2016-12-05 9 views
0

私の名前はアプリケーションで作成されたStringによって設定される新しいSQLiteテーブルを作成しようとしています。文字列は、文字列FinnalJava - 新しいSQLテーブル名としての文字列

LocalDate date = LocalDate.now(); 

public void save() { 
    String db; 
    db = String.valueOf("uid" + userID + date.toString()); 
    try { 
     PreparedStatement pst = conn.prepareStatement("CREATE TABLE ?(name TEXT, kcal FLOAT, protein FLOAT, carbs FLOAT, fat FLOAT)"); 
     pst.setString(1, db); 
     pst.executeUpdate(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

ユーザーIDとcurret日付(文字列)はint型から作成され、たとえば次のようになります。uid02016-12-05

は生憎、私は

org.sqliteを得ました.SQLiteException:[SQLITE_ERROR] SQLエラーまたはデータベースが見つかりません( "?"の近くに:構文エラー)

と私のPreparedStatementを指すエラー何か間違っているのですか?それ以外のやり方は?

+0

テーブル名を 'PreparedStatement'プレースホルダで設定することはできません。 – Kayaman

答えて

1

これは単純な文字列連結によって達成できます。

私はPreparedStatementの疑問符は、テーブル名ではなくパラメータのためのものであると信じています。

+0

ああ、いいえ。 OPはPreparedStatementsを使う上で正しいアイデアを持っています。その最良のSQLクエリの文字列の連結を主張していません。それは単に人々にフォローするための悪いメッセージを送信します。 –

+0

NeetsのバッククォートとSQLインジェクションを防ぐためのエスケープ –

+0

PreparedStatementでテーブル名を動的に変更する方法がわかっている場合は、お知らせください。 OPはそれを他の方法でやる方法を尋ねられました - 私にとって、このようなことはとにかく悪い考えですが、私はここで判断するのではありません。 –

関連する問題