Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ResultSet.updateRow()抛出MySQLSyntaxErrorException_Java_Mysql_Sql_Jdbc - Fatal编程技术网

Java ResultSet.updateRow()抛出MySQLSyntaxErrorException

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

我已经花了两天的时间试图弄明白这一点,但仍然无法找出代码的错误。所以,每当我试图更新Resultset中的日期并在得到这个语法异常后更新行时。这一切看起来都很简单,但我只是做错了什么。你能帮我缓解一下疼痛吗

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...