2017-04-24 34 views
0

尝试在Java中将单个行插入到数据库中。它只插入第一列,我不知道为什么。这里是代码:Java sql插入JOptionpane

@Override 
public void actionPerformed(ActionEvent e) { 
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int x = 1; 
    int limit; 
    //promts the user to enter input 
    // String InputString = JOptionPane.showInputDialog(null, "Enter the Number of Countries: ",JOptionPane.QUESTION_MESSAGE); 
    // limit = Integer.parseInt(InputString); 

    Connection connection; 
    PreparedStatement ps; 
    try { 
     String dbName = "osdesign"; 
     String dbUserName = "root"; 
     String dbPassword = ""; 
     //String u = jtfuser.getText(); 
     //String p =jpfpass.getName(); 
     String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" 
       + dbUserName + "&password=" + dbPassword 
       + "&useUnicode=true&characterEncoding=UTF-8"; 
     connection = DriverManager.getConnection(connectionString); 
     JOptionPane.showMessageDialog(null, "Connected!"); 

     //int x = 1; 
     User List = new User(); 

     //User[] List = new User [limit]; 
     //String query; 
     //for (x = 0; x < limit; x++) 
     // { 
     ///List[x] = new User(); 
     //List[x].User_type = null; 
     List.input(x); 
     //String sql = "INSERT into `userlist` (`UsrCode`, `UsrName`, `UsrPass`, `UsrPassChgDays`, `UsrPassChgDate`, `Usrtype`) VALUES(?, ?, ?, ?, ?, ?);"; 

     PreparedStatement preparedStmt = connection.prepareStatement("INSERT INTO `userlist`" + 
       "VALUES(?, ?, ?, ?, ?, ?);"); 

     String ID = List.ID; 
     String name = List.name; 
     preparedStmt.setString(1, ID); 
     preparedStmt.setString(2, name); 
     preparedStmt.setString(3, List.password); 

     preparedStmt.setString(4, List.Usr_PassChgDays); 
     preparedStmt.setString(5, List.data_of_passChg); 
     preparedStmt.setString(6, List.User_type); 

     preparedStmt.executeUpdate(); 
     //btnlogin.equals(result); 
     // panel.add(btnlogin); 
     // panel.add(jpfpass.getName(),btnlogin); 
     if (preparedStmt.equals(true)) { 
      JOptionPane.showMessageDialog(null, "Great sucess!!!"); 
      //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     } else { 
      JOptionPane.showMessageDialog(null, "FUCK!!!"); 
     } 

     //JOptionPane.showMessageDialog(null, "User sucessfully created"); 
    } catch (SQLException ex) { 
     Logger.getLogger(RychlikSystemversion0.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

在互联网上看到无处不在,并尝试每一个伎俩,我老实说,困惑。有人能帮助我吗?

+0

您必须确保Java中的数据类型与数据库中列的数据类型相匹配。例如'preparedStmt.setString(1,ID);'应该是'prepareStmt.setInt(1,ID);'! –

+0

我改变了数据库值为varchar,它仍然给我的问题。该程序发誓,因此它不插入行。 –

+0

我最初和@ Kh.Taheri有同样的想法。在数据库表中,您的ID列是** String数据类型还是Integer数据类型,现在它到底是什么? **列表**实际上是否包含任何内容?测试一下。把它放到控制台:'System.out.println(List.ID);的System.out.println(List.name); System.out.println(List.password);'等 – DevilsHnd

回答

0

请编辑SQL查询删除;结束查询

PreparedStatement preparedStmt = connection.prepareStatement("INSERT INTO `userlist`" + 
       "VALUES(?, ?, ?, ?, ?, ?)**;**"); 
+0

为什么? MySQL不喜欢它吗?我认为所有的数据库系统最后都用分号接受SQL语句。毕竟,这是将数据库系统中的每个SQL语句分开的标准方式,它允许在与服务器的相同调用中执行多个SQL语句。对于某些数据库系统来说,这是一个彻底的必要性有些系统不需要它,T-SQL可能不需要它,但它很快就会出现。 – DevilsHnd

+0

@DevilsHnd不一定,在某些数据库系统中,它只是客户端中的分隔符,而不是服务器本身(因此CLI知道语句何时完成并可以发送到服务器以供执行)。虽然给了这个问题的信息,但我同意这可能不是原因。 –

+0

@Mark Rotteveel - 在一些。正如我在我之前的评论中所说的:“有些系统不需要它......” – DevilsHnd