2015-01-31 51 views
0
Connection conn = null; 

PreparedStatement pst = null; 
try { 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chatdata",  "admin", "int*M=9167757203"); 
    pst = conn.prepareStatement("insert into user values (?, ?)"); 
} catch (Exception e) { 

     } 
String password; 
String userName; 
try { 
    BufferedReader kin = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("Enter Username :: "); 
    userName = kin.readLine(); 
    System.out.println("Enter Password :: "); 
    password = kin.readLine(); 
    pst.setString(1, userName); 
    pst.setString(2, password); 
    pst.execute(); 
} catch (Exception e) { 
    System.out.println(e); 
} 

此代碼顯示我的錯誤匹配值計數:值java.sql.SQLException:列數並不在行1 JDBC

"java.sql.SQLException: Column count doesn't match value count at row 1"

雖然我的表有三列條目UID是AUTO_INCREMENT和用戶名和密碼兩個字符串,我必須通過所以請如果有人可以找到答案請幫助。

回答

0

netbeans以不同的方式在mysql cmd中評估字段,如果你輸入這個語法,說 insert into user('username','password')values('xyz','abc'); 它會工作得很好,但在netbeans中,表和字段名稱不是用單引號表示,而是在這種類型的引號中,因此netbeans 插入userusername,password)values('xyz', 'ABC'); 其中像xyz和abc這樣的字符串用單引號表示...

2

這是MySQL手冊說,關於使用insert不列清單:

If you do not specify a list of column names for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided by the VALUES list or the SELECT statement.

所以,即使uidautoincrement標誌,你仍然需要在INSERT語句中指定你目前列值。作爲一個解決方案,你可以簡單地修改你的插入語句:

insert into user (username, password) values (?, ?) 

(我假定usernamepassword是列的名稱。)

你可以閱讀更多有關使用自動增量here