2017-11-05 17 views
-1
String QueryText= "INSERT INTO user_details (fname,lname,user_email,birth_day,birth_mnth,birth_year,addr,pwd) VALUES ('"+fname+"','"+lname+"','"+user_email+"','"+birth_day+"','"+birth_mnth+"','"+birth_year+"','"+gender+"','"+addr+"','"+pwd+"')"; 

Class.forName("com.mysql.jdbc.Driver"); 

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdatabase", "root",""); 

Statement st=con.createStatement(); 

int rt = st.executeUpdate(QueryText); 
+1

よく、8!= 9 ... – Eran

+1

パラメータを使用する方法を学んでください。それはあらゆる種類の問題を防ぎます。そして、コードを読みやすく、更新しやすくします。 –

答えて

0

カラム数が指定した値と一致していないことは明らかです。

8列を宣言して9個の値を指定します。

性別は、代わりにPreparedStatementを使用することをお勧めします。この性別やSQLインジェクションなどの問題を避けるために、あなたの列

1

で宣言されていません。

String queryText = "INSERT INTO user_details " 
     + "(fname, lname, user_email, birth_day, birth_mnth, birth_year, gender, addr, pwd) " 
     //----------------------------------------------------------------^ 
     + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

Connection con = DriverManager.getConnection(
         "jdbc:mysql://localhost:3306/jspdatabase", "root", ""); 

try(PreparedStatement pst = con.prepareStatement(queryText);){ 
    pst.setString(1, fname); 
    pst.setString(2, lname); 
    pst.setString(3, user_email); 
    pst.setString(4, birth_day); //If one of the three is integer type 
    pst.setString(5, birth_mnth); //You have to use setInt(...) instead 
    pst.setString(6, birth_year); //of setString(...) 
    pst.setString(7, gender); 
    pst.setString(8, addr); 
    pst.setString(9, pwd); 
    int rt = pst.executeUpdate(); 
    ... 
} 

本当の問題は、使用しているということです8個のパラメーターを挿入して9個の値を挿入しようとすると、これが原因でこのエラーが発生します。

関連する問題