先声明一些实例变量:
       
private JTextField jTextField_name=new JTextField();  //用户名文本框
private JPasswordField jPasswordField=new JPasswordField();  //密码框 private JButton okButton = new JButton();  //确定按钮
         private JButton cancelButton = new JButton();  //取消按钮         protected String user,password,password_from; //一些字符变量,用于存储用户名和密码        /*这里是中间的一些代码*/这是“确定” 按钮的触发函数:
 void okButtonAction(ActionEvent e) {
                 Connection con;
                 String url="jdbc:odbc:grrc";
                 Statement stmt;
                 user = jTextField_name.getText();
                 try{
                         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                         con=DriverManager.getConnection(url,"cq-pro","68597792");
                         String sql="SELECT PASSWORD        //密码字段
                                     FROM sys_safe          //sys_safe是表名
                                     WHERE NAME ='"+user+"'";
                         stmt=con.createStatement();
                         ResultSet rs=stmt.executeQuery(sql);
                         if(rs.next())
                           password_from =  rs.getString("PASSWORD");
                         if(password_from.endsWith(password)){
                             JOptionPane.showMessageDialog(this,"密码正确!","登录信息",JOptionPane.INFORMATION_MESSAGE);
                           this.setVisible(false);     //登录成功后登录窗口不可见
                           frame.setVisible(true);     //成功登录后显示主窗口frame
                           Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                           int h = screenSize.height;
                           int w = screenSize.width;
                           frame.setSize(w,h);
                           Dimension frameMainSize = frame.getSize();
                           // Center the Window
                           if (frameMainSize.height > screenSize.height) {
                             frameMainSize.height = screenSize.height;
                            }
                           if (frameMainSize.width > screenSize.width) {
                             frameMainSize.width = screenSize.width;
                            }
                             frame.setLocation((screenSize.width - frameMainSize.width) / 2, (screenSize.height - frameMainSize.height) / 2);
                           }
                           else{
                             JOptionPane.showMessageDialog(this,"密码和用户名不符,请重新输入密码!","登录信息",JOptionPane.INFORMATION_MESSAGE);
                           }
                         con.close();
                 }catch(Exception ex){
                         System.out.println("A problem occurred during the establishment of th connection: "+ex);
                       }      }是不是String sql="SELECT PASSWORD 
                  FROM sys_safe 
                  WHERE NAME ='"+user+"'";
有错?我没发现有什么错啊!有劳各位了!

解决方案 »

  1.   

    把SQL文改一下.                         String sql="SELECT PASSWORD        //密码字段
                                         FROM grrc.sys_safe          //sys_safe是表名
                                         WHERE NAME ='"+user+"'";
      

  2.   

    把SQL文改一下.                         String sql="SELECT PASSWORD        //密码字段
                                         FROM grrc.sys_safe          //sys_safe是表名
                                         WHERE NAME ='"+user+"'";
    --------------------------------------------------------------
    还是不行啊!
    我觉得是SQLserver的错,但怎么也找不出来,测试也是successful,就是不行啊!
      

  3.   

    表名用[grrc].[dbo].[sys_safe]或[dbo].[sys_safe]
      

  4.   

    源程序就是上面帖出来的,根据显示的异常,应该是在装载驱动的时候没有成功
    是不是都是用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");来装载?
    我在FAQ里面看到Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 这条语句,请问这条语句是什么含义?和Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");有什么区别?
    我的问题是不是出在这里?谢谢了
      

  5.   

    连接桥不一样,所用的驱动也不一样,楼主的连接桥可能没设对,因为我没用过JAVA与sqlserver的连接,具体用哪一个也不清楚,楼主可以去查下,"sun.jdbc.odbc.JdbcOdbcDriver"应该是ODBC转JDBC桥,可以直接用JDBC桥的,楼主看看这篇文章:http://tech.ccidnet.com/pub/article/c322_a180117_p1.html
      

  6.   

    仔细看了下,其实楼主的这种ODBC-JDBC的连接方式应该也是可行的,可能楼主的ODBC数据源没配吧!!!
      

  7.   

    你的SQL文本身就是这样的吗?还是你在贴的时候改了一下?                         String sql="SELECT PASSWORD        //密码字段
                                         FROM sys_safe          //sys_safe是表名
                                         WHERE NAME ='"+user+"'";如果这样写编译都通不过呀!
      

  8.   

    程序中,SQL文应该是这样的吧?
    String sql="SELECT PASSWORD  FROM sys_safe  WHERE NAME ='"+user+"'";
      

  9.   

    表名用[grrc].[dbo].[sys_safe]或[dbo].[sys_safe]
    ----------------------------------------------------
    这样改了之后就能连上了!顺便问一下zyg158(DD),为什么要这样改呢?
      

  10.   

    谢谢zyg158(DD),不过我想知道为什么要像这样改?和我原来的代码有什么区别吗?
    也谢谢各位网友的回答,问题解决了,我结帖了!
      

  11.   

    表名用[grrc].[dbo].[sys_safe]或[dbo].[sys_safe]
    因为你的表名和SQL Server中的系统表的前缀相同,都是sys,如果不加[]
    数据库有可能认为你要访问的是系统表,所以会有问题