2

生成したプリペアド ステートメントを使用していますが、Java によってスローされたステートメントで構文エラーが発生します。それでも、PS の toString をコピーしてデータベースの phpmyadmin に貼り付けると、問題なく実行されます。何が間違っているのか、私はかなり困惑していますか?

編集: ps.executeUpdate(query); に変更されました。まだ機能しません。

public int addOrder(Order order){
    int rs=false;
    try {
        String query = "INSERT INTO `orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`, `assembler`, "
                + "`meshType`, `beadType`, `beadCount`, `notes`, `dateCompleted`, `dateSubmitted`, `isComplete`) "
                +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(query);
        ps.setString(1, order.getOrderNumber());
        ps.setInt(2, order.getProductNumber());
        ps.setInt(3, order.getQuantity());
        ps.setString(4, order.getOrderer());
        ps.setString(5, order.getAssembler());
        ps.setString(6, order.getMesh());
        ps.setString(7, order.getBeadType());
        ps.setInt(8, order.getBeadCount());
        ps.setString(9, order.getNotes());
        ps.setLong(10, order.getDateCompleted().getTime());
        ps.setLong(11, order.getDateSubmitted().getTime());
        ps.setBoolean(12, order.getIsComplete());
        System.out.println(ps.toString());
        rs = ps.executeUpdate(query);

    } 
    catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return rs;
}

addOrder からの ps.toString() が前にあるエラーメッセージ。そして、私が言ったように、toString の関連部分をコピーして phpmyadmin に貼り付けて実行すると、正常に動作します。私が間違っていることのアイデアはありますか?

   com.mysql.jdbc.JDBC4PreparedStatement@40378309: INSERT INTO
 `orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`,
 `assembler`, `meshType`, `beadType`, `beadCount`, `notes`,
 `dateCompleted`, `dateSubmitted`, `isComplete`) VALUES
 ('',251,1,'Mark','','Other','LBB',150,'this is a
 test',1357249393009,1357249393010,0)

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SQL 構文にエラーがあります。sun.reflect の 1 行目の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 .NativeConstructorAccessorImpl.newInstance0(ネイティブ メソッド) (sun.reflect.NativeConstructorAccessorImpl.newInstance) (不明なソース) .jdbc.Util.handleNewInstance(Util.java:411) com.mysql.jdbc.Util.getInstance(Util.java:386) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053) com. mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:

4

5 に答える 5

2

@TheCapnの削除された回答はほぼ正しいです。パラメータなしで に変更executeQuery(query)executeUpdate()ます。

于 2013-01-04T04:19:52.193 に答える
1

クエリを入れると、2回実行されます。あなたのケースでは、クエリを入れるべきではありません。必要なのはこのようなものです。

ps.executeUpdate(query); <-- remove 'query'

//should be like this
ps.executeUpdate();

executeQuery(); //Generally this use for select statement. The output will be in Resultset. 

executeUpdate(); //Generally this use for insert, update, delete and drop table.

execute(); //If you don't know which method to be used for executing your SQL statements, you can use this.
于 2014-07-18T00:07:39.830 に答える
0

エラーはデータ型変換に起因する可能性があると思います。パラメータを使用せず、値を直接設定せずに試すことができますか?以前、ADO.NETでも同様の問題が発生しました。

于 2013-01-04T04:27:53.727 に答える
0

私はついに私の解決策を見つけました、何らかの理由でそれは私のsetStringsが気に入らなかったので、私はそれを長い道のりで設定し、それを機能させました。ありがとう!

于 2013-01-25T16:50:47.570 に答える
0
String query = "INSERT INTO `orders`(`orderNumber`, `productNumber`, `quantity`, `orderer`, `assembler`, "
            + "`meshType`, `beadType`, `beadCount`, `notes`, `dateCompleted`, `dateSubmitted`, `isComplete`) "
            +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";

読むべき

String query = "INSERT INTO orders(orderNumber, productNumber, quantity, orderer, assembler, "
            + "meshType, beadType, beadCount, notes, dateCompleted, dateSubmitted, isComplete) "
            +"VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";

つまり、引用符はありません。

于 2013-01-03T22:25:25.470 に答える