2012-02-18 4 views
2

データベースにレコードを追加するJavaアプリケーションを作成しています。データベースにローカル変数を追加するまでは、すべてうまく動作します(私はカッコが間違っていると思います)。とにかく、私は問題を探すのに飽き飽きし、何か助けに感謝します。Java SQLite:そのような列エラーなし

マイコード:

public void newUser(int userID, String userName, String credentials) { 
    try { 
     Class.forName("org.sqlite.JDBC"); 
     conn = DriverManager 
       .getConnection("jdbc:sqlite:c:/temp/alarmsystem.db"); 
     Statement statement = conn.createStatement(); 
     statement.execute("insert into Users values(" + 1 + "," + userName 
       + "," + "'Helloskit'" + ") "); 
     core.printToConsole("created"); 
     ResultSet rs = statement.executeQuery("select * from Users"); 

     while (rs.next()) { 
      String s = rs.getString("Username"); 

      core.printToConsole("name = " + s); 

     } 
    } catch (Exception e) { 
    } 
} 

エラー:

java.sql.SQLException: no such column: Tombellens 
at org.sqlite.DB.throwex(DB.java:288) 
at org.sqlite.NestedDB.prepare(NestedDB.java:115) 
at org.sqlite.DB.prepare(DB.java:114) 
at org.sqlite.Stmt.execute(Stmt.java:82) 
at me.server.DBCommunications.DBConnection.newUser(DBConnection.java:59) 
at me.server.Core.Core.newUser(Core.java:61) 
at me.server.LocalUser.Console.main(Console.java:72) 

おかげで、トム

+6

**警告**あなたのコードはSQLインジェクション攻撃の影響を受けやすいです。 –

+1

@Thomasあなたは '' Robert ''としてユーザ名を入れなければなりません。 DROP TABLEユーザー。 - '' as 'がクエリにありません...;) – havexz

+3

ああ、そうです。リトルボビーシングルクォート、彼らは私を呼び出します。 – Thomas

答えて

13

問題がクエリです。 userName変数は

利用コードの下に引用符で囲まれていない:あなたのSQL文で

statement.execute("insert into Users values(" + 1 + ",'" + userName + "'," + "'Helloskit'" +") "); 
+0

ありがとう、それは今働いています:) – tb96

+0

@ライオンなぜですか?それは私に文字列リテラルのように見えます。 – havexz

+0

私は、「O'Sullivan」である家族の名前を知っています。 _実際のデータでは一重引用符が使用されます。_準備された文を使用します。 –

1

は、変数usernameは引用符で囲む必要があります。

関連する問題