package com.chapter08;
import java.sql.*;
import java.util.Scanner;
public class log {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn =null;
PreparedStatement pre =null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shiyan?serveTimezone=GMT","root","123456");
//验证登录
String s="select * from bank where id=? and pwd=?";
pre = conn.prepareStatement(s);
System.out.println("请输入账号:");
int i1 = sc.nextInt();
System.out.println("请输入密码:");
//int s2 = sc.nextInt();
int s1 = sc.nextInt();
pre.setInt(1,i1);
pre.setInt(2,s1);
ResultSet rs = pre.executeQuery();
int id =0;
int pwd =0;
String name=" ";
while(rs.next()) {
id = rs.getInt("id");
pwd = rs.getInt("pwd");
}
System.out.println(id==i1&&pwd==s1?"登录成功":"登录失败");
// 获取数据
System.out.println("编号\t卡号\t密码\t电话号码\t姓名");
while(rs.next()){
System.out.println(rs.getInt("id")+" "+rs.getInt("card")+" "+rs.getInt("pwd")+" "
+rs.getInt("pho")+rs.getString("name"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
pre.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
因为你在第一个while循环的时候,已经把游标移动第一条数据了,你只有一条数据,第二次while循环后,就没有数据可取了
同学,你这个结果集的使用不太正确,因为rs.next()方法的调用会导致结果集的游标往下一行记录移动,你的结果集其实是取出来这条数据的,在第一个while循环处,你调用rs.next()方法,游标其实已经指向第一条数据了,你此时调用rs.getInt()方法可以正常取到id和pwd,所以你下面System.out.println(id==i1&&pwd==s1?"登录成功":"登录失败");这句代码可以打印"登录成功"。然后因为你结果集中只有一条记录,所以会跳出第一个while循环,走到第二个while循环的地方,此时,你再调用rs.next()方法,会导致结果集rs的游标再往下移动一条记录,指向空记录,所以你此时再通过rs.getXXX()方法是获取不到数据了。你可以在第二个while循环之前,加上rs.previous()方法,将结果集游标往上移动一行记录,就可以正常取到数据了。
rs.previous();
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getInt("card") + " " + rs.getInt("pwd") + " "
+ rs.getInt("pho") + rs.getString("name"));
}