我想在登录界面单击登录按钮就进入主界面,请问这个该怎么实现?
我作了两个界面,在登录界单击登录按钮,出现了下列错误:
          Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
我用的是ACCESS2007,部分代码为: 
   public class SqlIncapsulation{
ResultSet rs=null;
Connection con=null;
Statement sql=null;
public void SqlIncapsulation(){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try{
con=DriverManager.getConnection("jdbc:odbc:sun");
sql=con.createStatement();

}catch(SQLException e){
e.printStackTrace();
}
}
//查询指定的用户名和用户密码
public  ResultSet userQuery(String s){
try{
//System.out.println("执行到了这里");  
rs=sql.executeQuery(s);
return rs;
}catch(SQLException e){
e.printStackTrace();
return null;
}
}
  }S为:s="select * from usertable where username = '"+textStr+"' and userpassword = '"+passwordStr+"'";
textStr为从文本框获得的用户名
passwordStr为从文本框获得的密码

解决方案 »

  1.   

    你在捕捉异常中用这个语句比较容易看出问题出现的准确位置:System.out.print(e.toString());
      

  2.   

    提示异常出现这句:rs=sql.executeQuery(s); 
        不明白啊!!!!
      

  3.   

    一点一点的print调试吧,问题没有明确定位
      

  4.   

    用的是JDBC ODBC桥连的,是不是没配好数据源啊?
      

  5.   

    用这句:
    ResultSet rs=sql.executeQuery("select * from usertable");
    while(rs.next()){
         System.out.println(rs.getString(1));
         System.out.println(rs.getString(2));
    }这个能输出结果,数据库应该是连好了的吧
      

  6.   

    怎么会没有定位呢,就是这句抛出的异常:
                 rs=sql.executeQuery(s);
             
      

  7.   

    你可以输出下System.out.println(sql);这句话加在  rs=sql.executeQuery(s); 之前
      

  8.   

    我觉得这句错了,没有获得连接
    con=DriverManager.getConnection("jdbc:odbc:sun"); 你的数据库名字叫sun?我猜不是吧,去odbc数据源,那里看看。另外数据库应该有用户名和密码的,可以这样连接
      Connection   conn=   DriverManager.getConnection(url,user,password);    
      

  9.   

    解决这个问题的最好方法就是自己debug一下看哪个变量出错了
      

  10.   

    System.out.println(sql);这句输出的是:
    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] SELECT 子句中包
    含一个保留字、拼写错误或丢失的参数,或标点符号不正确。
    这是个什么错误
      

  11.   

    上面的问题已解决,可又有了新的问题,
     有ResultSet的引用rs,rs.first();该方法的调用总是抛出异常:java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY后来我就没用这个方法rs.next()也同样能指到第一行吧,但是单击按钮事件总是抛出Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException这是部份代码:
    public void actionPerformed(ActionEvent e){
    if(e.getSource()==jb2){
    this.dispose();
    System.exit(0);
    }
    if(e.getSource()==jb1){
    String textStr=jtf1.getText().trim();
    char[] password=jpf1.getPassword();
    String passwordStr=new String(password);
    if(textStr.equals("")){
    JOptionPane.showMessageDialog(null,"用户名不能为空");
    return;
    }
    if(passwordStr.equals("")){
    JOptionPane.showMessageDialog(null,"密码不能为空");
    return;
    }
    boolean isExist=false;
    String s="select * from usertable where username = '"+textStr+"' and userpassword = '"+passwordStr+"'";
    ResultSet rs=si.userQuery(s);

    try{
    while(rs.next()){
    isExist=true  
    }
    }catch(SQLException el){
    System.out.println(el.toString());
    }

    if(!isExist){
    JOptionPane.showMessageDialog(null,"用户名或密码不正确");
    return;
    }
    else{
    mainFrame.setVisible(true);
    si.closeConnection();
    this.dispose();
    }
    }
    }
    mainFrame是另一个界对像的引用.
    敬请大侠们指出错误,小弟不胜感激