前几天我在做课程设计时遇到这样的一个问题:
首先sql2000建 的一个表如下:
大家留意 : 我的数据类型是char(这个是问题的关键)
如果大家有耐心的就看下代码拉不过我讲思路也行的(代码只是我事件的代码放最后了,现在我们说思路)
if(用户ID和用户秘密都不是空){
进行数据库的连接并读出用户ID和秘密;
用户输入的用户ID和秘密与数据库的比较;————问题是我怎么都比较不了
。。。。。。。。.(其他的我就不说了)。。。。。。。。。。
}
else则输出错误信息并再次输入;
。。。。。。。。。。。。
问题分析 :
if(managername.equals(name)&&managerpassword.equals(password))
我是用这个比较的,可是就是就是现实不相等啊;我想会不会长度有问题
于是我用managername。length 和 name。length 查看了 长度, 果然真的是长度不相等哦
数据库读出的长度都为8而用户输入的就是字符窜本身长度。equals只能比较等长的;
于是我就吧数据库的数据类型改成varchar
这样问题就解决了;问题在于varchar是可变长度 数据库的字符窜多长读出来的 就多长
ohoh!!!今天到此为止!!
public void jButton1_actionPerformed(ActionEvent e) throws Exception{
String name = jTextField1.getText().toString();
String password =new String(jPasswordField1.getPassword());
if(!name.equals("")&&!password.equals("")){
try {
String url = "jdbc:odbc:student";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * from stu");
while (rs.next()) {
managername = rs.getString("ad_id");
managerpassword = rs.getString("ad_pass");
}
if(managername.equals(name)&&managerpassword.equals(password)){
this.flag=true;
this.setVisible(false);
mainframe mframe = new mainframe();
mframe.setSize(750,560);
mframe.setVisible(true);
}
else{
jTextField1.setText("");
jPasswordField1.setText("");
}
}
catch (Exception ee) {
System.out.println(ee);
}
}
else{
JOptionPane.showMessageDialog(null, "请输入完整的信息","管理员登陆",JOptionPane.PLAIN_MESSAGE);
}
}