这是我的错误:SQL异常:java.sql.SQLException:不正确的整数值:' age'对于专栏' age'在第1行
给我问题的字段是表格中的第一个Int字段。
以下是我正在使用的代码:
数据:
String username = "test1";
String id="test1";
String firstName="Testname";
String lastName="Testnamer";
String address="Testadd";
String phone="Test0851459574";
String email="Testemailee";
int age = 24;
char sex='M';
double height=1.23;
int kgs=125;
double stone=5.75;
int targetWeightKgs=34;
double bmi=4.34;
String medicalHistory="testertester";
String extraHistory="testertestertest";
boolean smoker=true;
boolean usernameCompleted=true;
String myNotes="testnotes";
UsersDatabase.insertMember(username,id,firstName,lastName,address,phone,email,age,sex,height,kgs,stone,targetWeightKgs,bmi,medicalHistory,extraHistory,smoker,usernameCompleted,myNotes);
insertMember方法中的:
String sql = "INSERT INTO Members " + "VALUES ('username','id','firstName','lastName','address','phone','email','age','sex','height','kgs','stone','targetWeightKgs','bmi','medicalHistory','extraHistory','smoker','usernameCompleted','myNotes')";
stmt.executeUpdate(sql);
以下是表格截图:http://snag.gy/VuMpO.jpg
答案 0 :(得分:2)
我们的想法是通过preparedStatement创建一个查询,您可以在其中使用变量,然后执行更新。
您应该执行以下操作:
PreparedStatement st = connect.prepareStatement("INSERT INTO Members VALUES ('?','?','?','?','?','?','?','?','?','?','?','?','?','?'','?','?','?','?','?'");
st.setString(1, username);
st.setString(2, id);
它继续,并且,当你想设置一个int:
st.setInt(8, age);
设置完所有值后,您必须执行:
st.executeUpdate();
答案 1 :(得分:1)
从所有int中删除'',因为插入的int没有单引号。 所以你的sql是:
String sql = "INSERT INTO Members " + "VALUES ('username','id','firstName','lastName','address','phone','email',age,'sex',height,kgs,stone,targetWeightKgs,bmi,'medicalHistory','extraHistory','smoker','usernameCompleted','myNotes')";
stmt.executeUpdate(sql);
或者你也可以使用这样的东西:
PreparedStatement pstmt = con.prepareStatement("INSERT INTO `table`
(pid,tid,rid,tspend,description) VALUE
(?,?,?,?,?)");
pstmt.setString(1, pid );
pstmt.setString(2, tid);
pstmt.setString(3, rid);
pstmt.setInt(4, tspent);
pstmt.setString(5,des );
pstmt.executeUpdate();
答案 2 :(得分:0)
Java不支持字符串插值,当前“用户名”被解释为文字字符串。如果您不想使用预准备语句,请考虑使用String.format
生成要插入的值。
String sql = String.format("INSERT INTO MEMBERS VALUES ('%s', %d, '%s')", username, id, firstname);
stmt.executeUpdate(sql);
使用这样的解决方案会让您对SQL注入和其他漏洞持开放态度,但我认为如果您正在使用JDBC并尝试理解它,这是完全可以接受的。