0

次の方法でmySQLデータベースにタプルを挿入しようとしています。

 String insertString = "INSERT INTO listings(Seller, Title, Close_Time, Price, Condition)"
                + " VALUES('"+par.getSellerName()+"', '"+par.getItemName()+"', "
                +closetime+", "+par.getPrice()+", '"+par.getCondition()+"')";

pst = con.prepareStatement(insertString);
pst.executeUpdate();
ResultSet rs = pst.getGeneratedKeys();

しかし、SQL構文エラーが発生し続けます。不思議なことに、Conditionを省略しても問題ありません。リストテーブルでは、Conditionはvarchar(45)であり、par.getCondition()は文字列の長さ<45を返します。

私はこれも次のように試しました:

pst = con.prepareStatement(
                    "INSERT INTO listings(Seller, Title, Close_Time, Price, Condition)"
                    + "VALUES(?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);
pst.setString(1, par.getSellerName());
        pst.setString(2, par.getItemName());
        long closeTime = getTimeMills(par.getTimeOver());
        pst.setLong(3, closeTime);
        pst.setDouble(4, par.getPrice());
        pst.setString(5, par.getCondition());
        pst = con.prepareStatement(insertString);
        pst.executeUpdate();
        ResultSet rs = pst.getGeneratedKeys();

同じ結果になります。私は愚かなことをしているに違いないと確信していますが、私は完全に途方に暮れています。挿入が実行される前に文字列を印刷しましたが、構文エラーを見つけることができません。どんな助けでも大歓迎です。

4

2 に答える 2

1

条件はmysqlの予約語です:mysqlの予約語を参照してください

プロパティの名前を変更するだけで、正常に実行されます

于 2012-09-30T18:35:19.943 に答える
1

「条件」は列名であり、テーブルの変更はオプションではない可能性があるため、現在の回答を拡張すると、クエリで条件を引用することでうまくいく場合があります-バッククォートまたは引用符で説明されている文字以前参照した文書。

すべてのデータベースがこの規則を使用しているわけではないため、トレードオフは移植性を失うことです。列の名前を変更することは、可能であれば長期的な選択肢として最適です。

于 2012-09-30T18:47:21.657 に答える