2016-08-18 16 views
1

私はhibernate prepared statementを使って新しいテーブルを作成しようとしています。 "setparameter("values", value)"のように、クエリに引用符を追加しているようです。 マイコード:Hibernate setParameterは文字列に一重引用符を追加します

String hql = "create table :values " + "(name VARCHAR(50))"; 
     Query my = session.createSQLQuery(hql); 
     my.setParameter("values", value); 
     my.executeUpdate(); 
     session.close(); 

エラー:

SEVERE: Servlet.service() for servlet [contextServlet] in context with path [/SpringSafeHouseService2.0] threw exception [Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement] with root cause 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''merkurijuss' (name VARCHAR(50))' at line 1 
+0

あなたは、どのようにSQLインジェクションからこのクエリを防ぐために準備されたステートメント – Jens

答えて

0

あなたはプリペアドステートメントのパラメータとしてテーブル名を使用することはできません。

String hql = "create table "+ value+ " (name VARCHAR(50))"; 
    Query my = session.createSQLQuery(hql); 
    my.executeUpdate(); 
    session.close(); 
+0

のパラメータとしてテーブル名を使用することができます:あなたは刺し傷にそれを置く必要がありますか? – Liver

+0

@☺LiverSQLインジェクションは、テーブル名でないカラムの値に対してのみ機能します。 – Jens

+0

残念ですが、コードは判読できません。 – Jens

関連する問題