Java MySQL ODBCPreparedStatement 切断查询

标签 java mysql odbc prepared-statement

`我在为 Java ODBC MySQL 执行PreparedStatement 时遇到问题。它似乎切断了查询,并给出了语法错误。我不知道如何继续,因为我现在只学习 Java SQL。我无法真正做一个独立的示例,因为问题涉及数据库,而且它会变得相当大。

有问题的代码是这样的..

public void insertEntry(
            Hashtable<String, String> strings,
            Hashtable<String, Integer> integers,
            Date created, Date paid, boolean enabled)
            throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");

        String dburl = "jdbc:mysql://" + dbHost + "/" + dbName +
                        "?user=" + dbUser + "&password=" + dbPass;

        connect = DriverManager.getConnection(dburl);

        ps = connect.prepareStatement("INSERT INTO " + dbName + ".users INSERT " +
                "enabled=?, username=?, created=?, paid=?, alias=?, password=?, " +
                "email=?, bitmessage=?, torchat=?, reputation=?," +
                "privacy=?, fpmport=?, fpm-template=? ;");

        java.sql.Date SQLcreated = new java.sql.Date(created.getTime());
        java.sql.Date SQLpaid = new java.sql.Date(paid.getTime());
        System.out.println("Debug: SQLpaid = " + SQLpaid.toString());

        ps.setBoolean(1, enabled);
        ps.setString(2, strings.get("username"));
        ps.setDate(3, SQLcreated);
        ps.setDate(4, SQLpaid);
        ps.setString(5, strings.get("alias"));
        ps.setString(6, strings.get("password"));
        ps.setString(7, strings.get("email"));
        ps.setString(8, strings.get("bitmessage"));
        ps.setString(9, strings.get("torchat"));
        ps.setInt(10, integers.get("reputation"));
        ps.setInt(11, integers.get("privacy"));
        ps.setInt(12, integers.get("fpmport"));
        ps.setString(13, strings.get("fpm-template"));
        ps.executeUpdate();

        ps.close();
        connect.close();
        resultSet.close();
    }

尝试使用此方法时,我得到以下输出...

Debug: SQLpaid = 1990-03-21
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ception: 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 'INSERT enabled=0, username='default_username', created='2000-03-21', paid='1990-' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:41 1)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLErro r.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:26 17)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionIm pl.java:2834)
at com.mysql.jdbc.PreparedStatement.executeInternal(P reparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:2441)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:2366)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:2350)
at database.Users.insertEntry(Users.java:297)
at test.dbUsers.main(dbUsers.java:95) 

最佳答案

我认为您在代码中犯了一些错误:

如下:

1。您提到INSERT,并且您应该像SET

一样进行更改

2。在 SQL 查询中添加 ; 后,您应该将其删除。

您的代码:

 ps = connect.prepareStatement
 ("INSERT INTO " + dbName + ".users  INSERT " #look here error to change 'set' +
  "enabled=?, username=?, created=?, paid=?, alias=?, password=?, " +
  "email=?, bitmessage=?, torchat=?, reputation=?," +
  "privacy=?, fpmport=?, fpm-template=?  ; " #remove this semicolon(;));

您应该进行如下更改:

 ps = connect.prepareStatement
           ("INSERT INTO " + dbName + ".users SET " +
           "enabled=?, username=?, created=?, paid=?, alias=?, password=?, " +
           "email=?, bitmessage=?, torchat=?, reputation=?," +
           "privacy=?, fpmport=?, fpm-template=? ");

关于Java MySQL ODBCPreparedStatement 切断查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22551532/

相关文章:

java - 在我的情况下使用 finalize() 吗?

php - 使用 PHP/MYSQL 需要使用 IN 条件插入到表中

c# - 通过 ODBC 查询系统间缓存

orm - ORM 和 ODBC 有什么区别?

java - Tapestry 5,记录非页面的类

java - Android webview chromium 异常 - ContextResult::kFatalFailure: 支持的制服或变量太少

php - MySQL:将未加密的密码列转换为 MD5 哈希

c# - 必须声明标量变量 '@connection' 错误

java - 如何将证书链添加到 keystore ?

php - jQuery 和 ajax 在 jQuery UI 对话框小部件中更新 MySQL 中的行