31

準備済みステートメントを使用して、データを選択するテーブル名を設定しようとしていますが、クエリを実行するとエラーが発生し続けます。

エラーとサンプル コードを以下に示します。

[Microsoft][ODBC Microsoft Access Driver] Parameter 'Pa_RaM000' specified where a table name is required.



private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [?]"; //?=date
public Execute(String reportDate){
    try {

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection conn = DriverManager.getConnection(Display.DB_MERC);
        PreparedStatement st = conn.prepareStatement(query1);
        st.setString(1, reportDate);
        ResultSet rs = st.executeQuery();

これを引き起こしている可能性のあるものについて何か考えはありますか?

4

7 に答える 7

39

テーブル名はパラメーターとして使用できません。ハードコーディングする必要があります。したがって、次のようなことができます。

private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [" + reportDate + "?]";
于 2009-07-30T18:33:11.137 に答える
0

多くの人が言っているように、テーブル名にステートメント パラメータを使用することはできず、条件の一部としての変数にのみ使用できます。

(少なくとも) 2 つのテーブル名を持つ変数テーブル名があるという事実に基づいて、おそらく、格納しているエンティティを取得して準備済みステートメントを返すメソッドを作成するのが最善でしょう。

PreparedStatement p = createStatement(table);
于 2016-05-09T16:48:51.367 に答える
-2

PreparedStatement を使用してテーブルの名前を指定できるかどうかはわかりませんが、一部のフィールドの値だけです。とにかく、同じクエリを試すことができますが、括弧なしで:

"SELECT plantID, edrman, plant, vaxnode FROM ?"
于 2009-07-30T18:34:45.097 に答える