2012-03-13 48 views
0

我在設置PreparedStatement以將新行插入到我的表中時遇到問題。我在我的SQL編輯器中測試了這個查詢,並且它工作成功,但是我無法使這個PreparedStatement正常工作。「列索引無效」嘗試插入一行時發生SqlException錯誤

String sql = "INSERT INTO table game(gamedate, type, world) values (TIMESTAMP '?', ?, '?');" 
runQuery(sql, date, type, world); 

...

protected runQuery(String sql, Object... params){ 
try { 
    initiateConnection(); 
    PreparedStatement statement = connection.PrepareStatement(sql); 

    int i = 1; 
    for (Object p : params){ 
     statement.setObject(i, p); 
     i++; 
    } 
    statement.executeUpdate(); 
} catch (Exception ex){ 

} finally { 
//close up things 
} 
} 

我在一些的println()來測試輸出增加,它似乎一切是非常好的

sql: INSERT INTO game(gamedate, type, world) values(TIMESTAMP '?', ?, '?'); 
date: 2012-03-13 21:42:14 
type: 1 
world: test 

我得到的錯誤是

java.sql.SQLException無效列索引

我真的很難過。任何想法是什麼罪魁禍首?

+0

爲什麼沒有第二個「?」的單引號 – Teja 2012-03-13 20:58:39

+0

第二個字段是數字 – arnehehe 2012-03-13 21:00:02

+1

第一列看起來有問題..是否有效? – Teja 2012-03-13 21:01:33

回答

1

兩個猜測:

  • 你不需要周圍的問號報價。擺脫那些
  • TIMESTAMP函數可能會有問題。嘗試將日期轉換爲時間戳,然後將其設置在準備好的語句中。 (date.getTime()/1000
+0

我擺脫了引號,但我不明白你的第二個建議。除以1000是如何給我一個時間戳?這不會導致嘗試在期望時間戳的表中插入數字的衝突嗎? – arnehehe 2012-03-13 21:13:30

+0

編輯:無所謂。我想到了。謝謝你,Timestamp函數確實造成了一些問題。 – arnehehe 2012-03-13 21:20:57

1

您的SQL語句只有一個可替換的佔位符。單引號中的是文字問號。