2011-08-11 17 views
1

いいえ、私はSqliteにデータを格納しようとしています。だから、私は "ライン"とユーザーのIDを格納しようとしている。しかし、where節が私に失敗しているようです。Sqliteクエリの問題

String query = "SELECT * FROM Users WHERE username='Fellixombc"; 
    ResultSet result = this.sqlStatement.executeQuery(query); 
    int userId = 0; 
    while(result.next()) { 
     System.out.println("TRUE"); 
     userId = result.getInt("id"); 
     System.out.println(result.getString("username")); 
    } 

trueは印刷されません。しかし、クエリからWHERE句を削除すると、すべてのユーザー名/ IDの罰金が印刷されますが、もちろん「TRUE」になります。

Sqliteで何か不足していますが、それは構文ですか?

編集:ちょうど1のidを持つと、ユーザー名Fellixombc 編集を持つユーザー列にユーザーが存在し明確にする:だから私は今、HERESに私のコード、あなたの男の提案を取り、文を準備してみました:

 PreparedStatement sqlStatement = this.sqlConnection.prepareStatement("SELECT * FROM Users WHERE username=?"); 
     sqlStatement.setString(1, "Fellixombc"); 
     ResultSet result = sqlStatement.executeQuery(); 
     int userId = 0; 
     while(result.next()) { 
      System.out.println("TRUE"); 
      userId = result.getInt("id"); 
      System.out.println(result.getString("username")); 
     } 
     result.close(); 

答えて

2

基本的に、ユーザー名を保存しますか?

現在のクエリは、ユーザー名に関連するすべての情報を取得します。これは、SELECTクエリが行うもので、取得します。

新しいユーザー、利用作成する必要がある場合:

INSERT INTO Users (username) Values ('Fellixombc'); 

を私はあなたのユーザーテーブルがあり、他のどのような分野に応じて、このクエリでより多くの情報を提供する必要があることを教えてください。

EDIT:あなたのSELECT文で

、開いている単一引用符を持っています。

"SELECT * FROM Users WHERE username='Fellixombc" 

prepareStatement機能を検討し、SQLインジェクションの問題を避けるために

"SELECT * FROM Users WHERE username='Fellixombc'" 

でなければなりません。

+0

奇妙なことに、私はその一重引用符、他のアイデアを閉じるとまだ機能しません。そして、はい、prepareStatementを使用しますが、最初にこれを動作させたいと思います。また、私はユーザーのIDを取得しようとしていますが、何も挿入していません。編集:私はFellixombcのidを取得しようとしています。これは1でなければなりません。 – Fellixombc

+0

whereを削除すると、レコードが得られますか? – MPelletier

+0

はい、私は1つのレコードを取得します。これは、Fellixombcと1のIDを保持するレコードです。 – Fellixombc

1

ユーザー名欄でトリムを試してください。その可能性があるどこかに偽のスペースがあり、where節が失敗する原因になります。

"SELECT * FROM Users WHERE trim(username) ='Fellixombc'" 

また、@ MPelletierに同意します。あなたは間違いなくPreparedStatementsを使うべきです。

+0

また、ユーザー名は私がアクセスしようとしている変数ではなく、アクセスしようとしているフィールドです。それとも、私はあなたを完全に誤解しましたか?とにかく@OP – Fellixombc

+0

@Fellixombc - そうです。私は、ユーザと呼ばれるsqlliteデータベーステーブルのフィールドを認識しています。 trim()関数をクエリで使用できます。ここを参照してください - http://www.sqlite.org/lang_corefunc.html ..あなたの名前の最後の空白は、不一致を引き起こす可能性があります。 – Kal

+0

ああ、まあ、それは実際のレコードでの問題であることが判明した= /とにかく、あなたにはあまり気にしないのは残念です!私は助けに感謝します! – Fellixombc

関連する問題