2011-04-20 16 views
0

私のJavaコードは、 'emp'からのクエリー - > deleteを生成しますが、私はそれをempから削除する必要があります。私のJavaコードは、 'emp'からのクエリ - > deleteを生成しますが、私はempから - > deleteを必要とします。助けてください

Query is ----> DELETE FROM 'emp' WHERE empid = '21' 

Could not execute sql command - Original message: null 
+0

これを行わないでください。各テーブルに対して1つのDAOを作成します。 _field-values_をパラメータとし、tableNameとfield-namesを渡さないメソッドを記述します。あなたのコードを不規則に振る舞うことは別として、テーブルをリファクタリングしながら首に痛みを感じます。 – Nishant

答えて

3

あなたは、残念ながら、パラメータとしてテーブル名を設定することはできません:私はエラーのコンソールを見たとき、それは示してくれ

void deleteData(Map records) throws SQLException { 
    String delQuery = "delete from ? where empid = ?" 
    String tbname = String records.get(tabName); 
    String empid = String records.get(empid); 
    PreparedStatement data = getPreparedStatement(DelQuery); 
    data.setString(1,tbname); 
    data.setString(2,empid); 
    System.out.println("Query is ---->"+data.toString()); 
    ResultSet rst = data.executeQuery(); 
} 

を助けてください。それをSQLの一部としてコード化する必要があります。

delQuery = "DELETE FROM " + tbname + " WHERE empid = ?" 

明らかに、テーブル名フィールドを確保するための通常の注意事項が適用されます。

+0

ありがとうPhill、あなたの提案はうまくいきましたが、関数の外にprivate static finalとしてdelQueryを作成することを考えていました。 cozテーブル名wil bは、Map値を使用して関数自体にフェッチされます。 – Shweta

+0

@ Shwetaあなたができることは、このようにStringとして保存することです:DELETE FROM%s where empid =? - String.format(delQuery、tableName)を使用してテーブル名を置き換えます。 –

+0

最終的に私はMybatisのようなフレームワークを調べます。http://www.mybatis.org/ - すべてのSQLはXML構成ファイルに格納されており、実行時にテーブル名を設定するなどの作業を行うことができます。 –

0

テーブル名をPreparedStatementにバインドすることはできず、列の値のみをバインドすることはできません。あなたは行うことができます。

... 
String tbname = String records.get(tabName);  
String delQuery = "delete from " + tbname + " where empid = ?"; 
... 

tableNameのは、とにかくユーザーから来るべきではありませんので、これは、注入にこれ以上脆弱ことはありません。

+0

Nikola、ユーザーはレコードの種類として入力を与えます。empはそのうちの1つですが、ユーザー入力のみに基づいてテーブルを選択する必要があります – Shweta

関連する問題