2012-03-13 44 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语句只有一个可替换的占位符。单引号中的是文字问号。