2014-01-22 46 views
-3

這是我的錯誤:SQL異常:java.sql.SQLException中:不正確的整數值:「年齡」列「年齡」在行1Java的SQL不正確的整數值

的字段是給我的問題表中的第一個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

你硬是要插入''age''?或者實際上是否是'42'或者你的真實代碼?因爲現在,你的「年齡」字段是一個整數,而你正在試圖填入一個3個字符的字符串。 –

+0

年齡是一個整數,所以插入一個int如5左右 –

+4

你應該使用一個準備好的語句,並指定參數值... –

回答

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(); 
+0

你必須導入一些PreparedStatement的工作? – user3211740

+0

它位於包java.sql.PreparedStatement中。你應該可以在沒有外部庫的情況下使用它。 – luanjot

+0

QL異常:java.sql.SQLException:參數索引超出範圍(6>參數數量,即5)。 – user3211740

0

的Java不支持字符串插值,目前'用戶名'是解釋爲文字字符串。如果您不想使用準備好的語句,請考慮使用String.format來生成要插入的值。

String sql = String.format("INSERT INTO MEMBERS VALUES ('%s', %d, '%s')", username, id, firstname); 
stmt.executeUpdate(sql); 

使用的解決方案這樣離開你打開到SQL注入等漏洞,但我認爲這是完全可以接受的,如果您正在使用JDBC玩弄,並試圖瞭解它。

2

從所有int的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(); 
+1

使用準備的語句是一個更好的方式來執行SQL在java –

+0

對不起,但與第一個例子...你是不是插入「用戶名」 ,「ID」,年齡「等,而不是變量的值? – luanjot