0

我已经在 phpadmin 中创建了一个名为 fbaccount 的表。我仍然不知道这有什么问题。任何帮助将不胜感激。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.ImageIcon.*;
    import java.sql.*;
    public class Fb extends JFrame{

       Icon icon = new ImageIcon("images/signup.png");
       Icon icon2 = new ImageIcon("images/login.jpg");
       JLabel signupicon = new JLabel(icon);
       JLabel loginicon = new JLabel(icon2); 
       JTextField user = new JTextField();
       JTextField fname =new JTextField("First name");
       JTextField lname = new JTextField("Last name");
       JTextField email = new JTextField("Email");
       JTextField remail = new JTextField("Re-enter email");
       JTextField password =new JTextField("Password");
       JPasswordField pass = new JPasswordField();
       Container c = new Container();
       Connection con;
        Statement st;
        ResultSet rs;
        int ctr=0;
       public Fb()//constuctor
       {

        this.setSize(947,486);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        setContentPane(new JLabel(new ImageIcon("images/fb.jpg")));
        c = this.getContentPane();
        c.setLayout(null);
        c.add(signupicon);
        c.add(loginicon);
        c.add(user);
        c.add(pass);
        c.add(fname);
        c.add(lname);
        c.add(email);
        c.add(remail);
        c.add(password);
        loginicon.setBounds(875,18,48,21);
        signupicon.setBounds(526,405,195,40);
        user.setBounds(547,18,151,21);
        pass.setBounds(710,18,151,21);
        fname.setBounds(524,179,195,40);
        lname.setBounds(729,179,195,40);
        email.setBounds(524,229,400,40);
        remail.setBounds(524,279,400,40);
        password.setBounds(524,329,400,40);


       }
      //for sql codes 
       public void actionPerformed(ActionEvent e)
    {
    //for login 
    Object j= e.getSource();
    if(j==loginicon){
             String u = user.getText();
             String p = pass.getText();
         try{
                String driver="com.mysql.jdbc.Driver";
                String db="jdbc:mysql://localhost:3306/fbaccount";
                String user="root";
                String pass="";
                Class.forName(driver);
                con=DriverManager.getConnection(db,user,pass);
                st=con.createStatement();

               String QueryString = "SELECT username, password from fbaccount WHERE username = '"+u+"' AND password = '"+p+"'  ";
                    rs = st.executeQuery(QueryString);

                    int count = 0;
                    while(rs.next()){
                    count = count +1;
                    }
                        if (count==1)
                        {
                 Opening ms = new Opening();
                 ms.setVisible(true);
                 dispose(); 


                        }
                        else if (count>1){                
     JOptionPane.showMessageDialog(this,"Can't Login");


                        } 

                        else if (count==0)
                          JOptionPane.showMessageDialog(this,"No record Exist");  
            }catch(Exception ex){
                JOptionPane.showMessageDialog(this, "Error in database connection");
                ex.printStackTrace();
                System.exit(0);
            }

           }
    //for the signup
    else if (j==signupicon)
    {
             String u = user.getText();
             String p = pass.getText();
         String nemail=email.getText();
         String n= fname.getText();
         String l= lname.getText();

              try{ 
    int updateQuery = 0;  
                String driver="com.mysql.jdbc.Driver";
                String db="jdbc:mysql://localhost:3306/fbaccount";
                String user="root";
                String pass="";
                Class.forName(driver);
                con=DriverManager.getConnection(db,user,pass);
                st=con.createStatement();   

    String QueryString = "SELECT username, password from fbaccount WHERE username = '"+u+"'   ";
                    rs = st.executeQuery(QueryString);

                    int count = 0;
                    while(rs.next()){
                    count = count +1;
                    }
                        if (count>0)
                        {
                        JOptionPane.showMessageDialog(this,"Username already Exist");
                        }
                        else{                
            QueryString = "INSERT INTO fbaccount(lastname, firstname,username ,new_email,password) VALUES ('"+l+"','"+n+"','"+u+"' ,'"+nemail+"','"+p+"')"; 

    updateQuery = st.executeUpdate(QueryString);  
    { 
    JOptionPane.showMessageDialog(this,"Account created successfully");  
    }  
                        }

              }
    catch (Exception ex) 
    { 
         JOptionPane.showMessageDialog(this, "Unable to connect to database");
                ex.printStackTrace();
                System.exit(0);
     }   
    }
    }
       public static void main(String[] args) 
        {

            Fb f = new Fb();
            f.setVisible(true);
        }



    }

我该怎么办?这是如何连接到mysql还是我错过了什么?

4

2 回答 2

0

您还没有说明您的应用程序有什么问题,但让我指出一些明显的代码问题。

  1. 您不仅在每个用户操作上打开连接,而且每次都加载 JDBC 驱动程序,这是不推荐的。您应该加载驱动程序并在应用程序启动时打开连接。

  2. 当您应该使用PreparedStatement. 它使您的代码容易受到SQL 注入攻击,但是当字符串参数包含保留字符(如撇号)时,您首先应该担心 SQL 语句不起作用。

    String sql = "INSERT INTO fbaccount(lastname, firstname, username, new_email, password) VALUES (?,?,?,?,?)"; PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, l); ps.setString(2, n); ps.setString(3, u); ps.setString(4, 邮件); ps.setString(5, p); ps.execute();

  3. 是不是你的数据库也叫fbaccount,和数据库表一样?JDBC 连接 URL 应该包含数据库名称而不是数据库表的名称:

    jdbc:mysql://localhost:3306/fbaccount

于 2013-11-13T07:32:31.147 回答
0

查找有关 Hibernate 的任何教程并应用该框架,这对您来说是很多更好的解决方案。

于 2013-11-13T07:36:10.963 回答