Java SQL不正确的整数值

时间:2014-01-22 15:27:00

标签: java mysql sql database

这是我的错误: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

3 个答案:

答案 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并尝试理解它,这是完全可以接受的。