登陆是和数据库连接出错,进不了CarMFrame!!!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.sql.*;public class Login extends JFrame {
    private JButton ok_btn,cancel_btn;
    private JLabel lab1,lab2;
    private JTextField jtfld1;
     private  JPasswordField jtfld2;
    private JFrame frame;
       private Connection con;
       private Statement stmt;public Login(){
    frame=new JFrame("登陆");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container content=frame.getContentPane();
    content.setLayout(new GridLayout(3,2,20,20));
    lab1=new JLabel("用户名:");
    lab2=new JLabel("密码:");
    jtfld1=new JTextField();
    jtfld2=new JPasswordField();
     jtfld2.setForeground(Color.RED);
    ok_btn=new JButton("确定");
    cancel_btn=new JButton("取消");
    ok_btn.addActionListener(new ActionHandler());
    cancel_btn.addActionListener(new ActionHandler());
    content.add(lab1);
    content.add(lab2);
    content.add(jtfld1);
    content.add(jtfld2);
    content.add(ok_btn);
    content.add(cancel_btn);
    frame.setLocationRelativeTo(null);
    frame.setSize(300,200);
    frame.setVisible(true);
    try {
        Class.forName("jdbc.odbc.JdbcOdbcDriver");
         con=DriverManager.getConnection("jdbc:odbc:car");
        stmt=con.createStatement();
    }  catch(ClassNotFoundException e)
        {
        }
        catch(SQLException ex)
        {
        }
}
    class ActionHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
  String str1,str2,username1,sqlStr;
       Object obj=e.getSource();
          str1=jtfld1.getText().trim();
          str2=new String(jtfld2.getPassword()).trim();
          try {
               if(obj.equals(ok_btn)){
                  if(str1.equals(""))
           {JOptionPane.showMessageDialog(frame,"username can't be null!");
            return;}
        sqlStr="select * from login where username="+"'"+str1+"'"+
                " and password="+"'"+str2+"'";
         ResultSet result=stmt.executeQuery(sqlStr);//执行一条返回单个 ResultSet 的 SQL 语句
         if(result.next())
         {
               username1=result.getString("username");               if(username1.equals("guest"))
               {
                       CarMFrame mainFrame=new CarMFrame(); 
                       mainFrame. JMenuItem1.setEnabled(false);
                       mainFrame. JMenuItem2.setEnabled(false);
                       mainFrame. JMenuItem3.setEnabled(false);
                       mainFrame. JMenuItem4.setEnabled(false);
                      
               }
    }
    if(obj==cancel_btn){
          frame.dispose();
          stmt.close();
          con.close();
      }    }
}
    catch(SQLException ex)
    {
            System.err.println(ex);
    }
    }    }    public static void main(String[]args)
    {            new Login();
    }
}

解决方案 »

  1.   

    sqlStr="select * from login where username="+"'"+str1+"'"+
                    " and password="+"'"+str2+"'";
    粗略看了一下好像是这个错了
    str1不就是一个String型么?
    怎么还用一个''括起来,''里面又有一个""....直接
    sqlStr="select * from login where username="+str1+" and password="+str2;
    应该就可以了
      

  2.   

    个人感觉是rs.next返回的是false;
    if(result.next())
             {
                   username1=result.getString("username");             ---->  if(username1.equals("guest"))
     两个地方分           {
      别添加断点    ---->         CarMFrame mainFrame=new CarMFrame(); 
                           mainFrame. JMenuItem1.setEnabled(false);
                           mainFrame. JMenuItem2.setEnabled(false);
                           mainFrame. JMenuItem3.setEnabled(false);
                           mainFrame. JMenuItem4.setEnabled(false);
                          
                   }
        }
      

  3.   

    细心啊
     Class.forName("jdbc.odbc.JdbcOdbcDriver");
    大家看这段代码没,错了吧....
    应该是
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    自己搞出来的,呵呵