0

次の問題があります。1つのデータベースに2つのテーブルがあり、最後の列の名前に加えて同じ列で構成されています。Javaを使ってデータを書きたい。両方のテーブルに同じpreparedStatementを使用したいのですが、ifコマンドを使用して、それがtable1かtable2かを確認します。最後の列の名前tableは2amount10で、最後の列の名前はtable1amount20です。これnumberは私のコード内の変数に格納されています。

以下に、(簡略化された)例と、列名を変数にしようとしたが機能しない方法を示します。numberステートメント全体をコピーして変数を手動で変更せずにこれを修正する方法はありますか?

String insertData = "INSERT INTO `database`.`"+table+"`
(`person_id`,`Date`,`amount`+"number") VALUES "+
"(?,?,?) ON DUPLICATE KEY UPDATE " +
"`person_id` = ? , " +
"`Date` = ? , " +
"`amount`+"number" = ? ; ";
PreparedStatement insertDataStmt;
4

2 に答える 2

1

変数numberとtableは、変更中にinsertData文字列に魔法のように挿入されないため、これは機能しません。正しいPreparedStatementを返すメソッドprepareInsertstatement(String table、String number)を実行します。

public void prepareInsertStatement(Connection conn, Strint table, String number) {
    String insertData = "INSERT INTO `database`.`"+table+"`
    (`person_id`,`Date`,`amount+"number"') VALUES "+
    "(?,?,?) ON DUPLICATE KEY UPDATE " +
    "`person_id` = ? , " +
    "`Date` = ? , " +
    "`amount+"number"' = ? ; ";
    PreparedStatement insertDataStmt = conn.prepareStatement(insertData);

    return insertDataStmt;
}

不要になった場合は、PreparesStatementを閉じることを忘れないでください。

于 2012-09-14T11:54:14.497 に答える
0

その理由は無効な構文だと思います。最後の列名の文字列を連結するときは、コードを使用します'amount' + number。数値が20の場合、連結結果よりも 'amount'20無効な構文例外が発生します。番号の後に1つ余分に移動'します。

"'amount" + number + "'"

注:ログ、またはこのステートメントの実行中に表示されるエラーは、質問に対する正しい答えを見つけるのに非常に役立ちます。

于 2012-09-14T11:55:24.813 に答える