Java ResultSet.updateRow()抛出MySQLSyntaxErrorException
我已经花了两天的时间试图弄明白这一点,但仍然无法找出代码的错误。所以,每当我试图更新Resultset中的日期并在得到这个语法异常后更新行时。这一切看起来都很简单,但我只是做错了什么。你能帮我缓解一下疼痛吗Java ResultSet.updateRow()抛出MySQLSyntaxErrorException,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我已经花了两天的时间试图弄明白这一点,但仍然无法找出代码的错误。所以,每当我试图更新Resultset中的日期并在得到这个语法异常后更新行时。这一切看起来都很简单,但我只是做错了什么。你能帮我缓解一下疼痛吗 public class TableTest extends JFrame { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver
public class TableTest extends JFrame {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/fishman", "root", "");
Statement stm = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stm.executeQuery("SELECT * FROM customers where id = 3 or id = 189 or id = 310 or id = 12 order by Date ");
while(rs.next()) {
Date date = rs.getDate("lastcontact");
if(date == null) {
rs.updateDate("lastcontact", new java.sql.Date(new Date().getTime()));
rs.updateRow(); // Throws exception here
}
}
rs.close();
connection.close();
}
}
这是我得到的例外
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
at com.mysql.jdbc.UpdatableResultSet.updateRow(UpdatableResultSet.java:2411)
at com.TableTest.main(TableTest.java:50)
这可能是:
“使用ResultSet.updateRow将设置表的主键(在
生成的更新语句),即使PK字段不在列表中
要更新的字段数。当权限不可用时,这会导致问题
允许用户更新表中的某些字段(例如PK)。”
从
从进一步的研究来看,这基本上看起来像一个MySQL错误,已经被发现,但从未修复过
解决这个问题的一种方法是,首先不要将PK提取到resultSet中
(例如,代替
“从tbl中选择*”
其中col1是主键,do
“选择col2、col3…”
等)
这种解决方法有一个明显的缺点——在结果集中没有PK列可供使用
但在您的情况下,这可能会起作用-如果“lastcontact”不是您的PK(而且可能不是),您可以更改
SELECT * FROM customers where...
到
这也许行得通
希望这有所帮助。尝试将更新的
添加到您选择的末尾。
谢谢,我尝试了,但仍然没有更改。您可以尝试记录发送到MySQL的内容:。
SELECT lastcontact FROM customers where...