JAVA 连接MySQl,关于用户登录问题,只有一个用户能登录,其他密码用户错误,代码如下

ActionListener A_confrim=new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);
String id1=id.getText();
String code1=code.getText();
mysql land_sql=new mysql("select * from USER");
ResultSet rs=land_sql.getresul();
try
{
while(rs.next())
{
System.out.println(rs.getString("ID")+rs.getString("CODE"));
if(id1.equals(rs.getString("ID"))&&
code1.equals(rs.getString("CODE")))
{
new mainFrame();
break;
}
else
{
JOptionPane.showMessageDialog(null,"用户名或密码错误,请重新输入",
"通讯录管理系统",JOptionPane.ERROR_MESSAGE);
id.setText(null);
code.setText(null);
setVisible(true);
break;
}
}
}
catch(SQLException se){
System.out.println(se);
}
}
};

第1个回答  2013-03-04
你这是JAVA吗?怎么还看到“getText”这样的东西。。。是什么框架的?

无论怎样,你这个是只有数据库第一条记录的用户才可以登录吧?

仔细看看自己的逻辑呗,第一次循环就是if...else二选一的结果了。

虽然有些安全性问题等,但估计你不用考虑,为什么不用:
“SELECT * FROM user WHERE id=“' + id1 + ”' AND code='“ + code1 + ”'”

然后判断 rs.hasNext() ? 这样来判断用户呢?追问

使用rs.next()逐个选取结果集来与输入的比对不行么?

追答

那你要有100万个用户,一个用户登录,平均要判断50万条记录吗?

追问

还是没转过来,找你这样说,这段代码知识耗时,而不应该是错误?那错误在哪呢?

追答

因为你的If,else写法,如果第一条记录不匹配,并不会查看第二条记录,直接就进入“else”里面显示用户名密码错误退出了。

上面不是说了吗

追问

String id1=id.getText();

String code1=code.getText();
mysql land_sql=new mysql("SELECT * FROM user WHERE id='" + id1 + "' AND code='" + code1 + "'");
ResultSet rs=land_sql.getresul();
try
{
System.out.println(rs.getString("ID")+rs.getString("CODE"));
if(rs.next()){
new mainFrame();
}
else{
id.setText("");
code.setText("");
setVisible(true);
还是不对,抛出异常

追答

异常是什么?

追问

java.sql.SQLException: Before start of result set

追答

ResultSet的用法不对。

ResultSet在实例生成时,指针是指向“第一条记录之前”的位置。

也就是说:必须至少调用一次 rs.next() 方法才可以访问到记录(如果有的话)。

把你的输出信息放到if里面,所以是:
if (rs.next()) {

System.out.println(rs.getString("ID")+rs.getString("CODE"));
// 用户名和密码匹配成功的逻辑
} else {
System.out.println("No matched user and password combination");

// 显示错误的逻辑
}

记得用try。。。catch,还有记得finally的时候调用 rs.close();

本回答被提问者采纳
第2个回答  2013-03-04
在while外定义一个标示,用于记录用户名和密码是否与数据库匹配,如boolean isRight=false;
在while中如果用户名和密码匹配,则将定义的标示设置为true,即isRight=true。
在while外面判断isRight,如果isRight=true,则表名用户名和密码是正确的。
第3个回答  2013-03-04
能告诉我抛了什么异常吗?或者没有抛异常。
还有一个问的就是,code这个密码组件你用的是JTextField 还是JPasswordField呢?
建议这样的写法:
id.setText(null);
code.setText(null);
写成这样的:
id.setText(“”);
code.setText(“”);追问

java.sql.SQLException: Before start of result set

追答

引用 leemax 的话
“因为你的If,else写法,如果第一条记录不匹配,并不会查看第二条记录,直接就进入“else”里面显示用户名密码错误退出了。”

qincidong的做法可以参考的啊!

第4个回答  2013-03-04
你这不是都输出中间结果了么。比较一下与你输入的有什么不一样

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网