2012-03-12 107 views
1

我已经开始使用准备好的语句来执行我的sql更新,但是我在更新时似乎遇到了问题。逻辑看起来很合理,但每次进入更新段时都会出现错误。我可以删除或插入罚款。 Anywho ...准备好的语句更新问题

Connection con = getDBConnection(); 
PreparedStatement pstmt = null; 

String query = "update table set int = ?, String= ? where int= ? and date= ?"; 
pstmt = con.prepareStatement(query); 
pstmt.setInt(1, var); 
pstmt.setDate(2, sqlDate); 
pstmt.setInt(3, intVar); 
pstmt.setString(4, stringVar); 
pstmt.executeUpdate(); 

我在这里做错了什么?我已经完成了所有的故障排除工作,除此之外,一切似乎都很顺利。

Error = "A non-numeric character was found where a numeric was expected" 

回答

2

你有你的字符串回合日期错误的方式 - 你打电话setDate(2, ...)当第二个参数是在上下文中的“?字符串=”当第四个参数在“日期=?”的上下文中时为setString(4, ...)

诚然,你得到的错误是针对有些奇怪,但它是所有我可以看到... ...

+0

所以,在“pstmt.setWhatever”是放慢参数值(例如1,2,3 ,4)与查询语句或数据库列安排相关? 澄清:数据库有4列,abcd 语句设置为ac其中bd 然后,集合语句为a = 1,c = 2,b = 3和d = 4 通常,在数据库中设置信息时这将是 a = 1 b = 2 c = 3 d = 4 ... 如果这是有道理的。 – cphilpot 2012-03-12 23:29:36

+0

@cphilpot:它与SQL相关 - 您指定的索引作为“setDate”的第一个参数等等是SQL *中的位置*。数据库列顺序在这里是无关紧要的。 (如果你刚刚完成了'INSERT INTO X VALUES(?,?,?,?)',这将是相关的 - 但我个人认为这是一个坏主意。) – 2012-03-12 23:31:18

+0

这可能是我困惑的地方。因为我有一个与列号相关的插入语句。去尝试你的建议,看看是否能解决它。刚开始使用准备好的陈述今天(被错误地教导)。 – cphilpot 2012-03-12 23:33:05