明らかにすべての関連コードが表示されていないか、必要なコードをメソッドに配置してこの作業を行う必要があります。
ResultSetは、基本的にはクエリの結果のコレクションであり、そのクエリのすべての結果にアクセスするために反復処理が必要です。 であり、ループは、結果セットオブジェクト内に含まれるすべての結果を反復処理する手段として広く使用されています。 ResultSetオブジェクトを宣言していても、まだそのコードを利用しようとしているあなたのコードはどこにもありません。おそらく次のようなものを試してみてください。
String email = email_register_txt.getText();
String username = username_register_txt.getText();
try {
Connection conn = DriverManager.getConnection("...your jdbc connection string...");
conn.setAutoCommit(false);
String sql = "SELECT * FROM user_profile WHERE username = ? OR user_email = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, email);
ResultSet res = stmt.executeQuery();
// Utilize a boolean Flag to indicate whether
// or not the User is registered.
boolean registered = false;
while (res.next()) {
if(res.getString("username").equalsIgnoreCase(username)) {
JOptionPane.showMessageDialog(registerPanel,
"The username has already been already registered!");
registered = true;
break; // Get out of the loop. No more need for it.
}
else if(res.getString("user_email").equalsIgnoreCase(email)) {
JOptionPane.showMessageDialog(registerPanel,
"This email address has already been already registered!");
registered = true;
break; // Get out of the loop. No more need for it.
}
}
// Do what needs to be done if User is NOT registered.
if (!registered) {
...............................
...............................
}
res.close();
stmt.close();
conn.close(); //Close the DB connection
}
catch (SQLException ex) {
ex.printStackTrace();
}
クラスPreparedStatementクラスの使用に気づくでしょう。
1)PreparedStatementには、動的クエリとパラメトリッククエリを記述することができます。
2)PreparedStatementは、Javaの文ステートメントよりも高速です。
3)のPreparedStatementはWhy to use Prepared Statements in Java hereについてもっと読む
のJava
に
SQLインジェクション攻撃を防ぐことができます。
問題は... –
すでに存在するユーザー名を入力しても機能しません。何もしません。 –
クエリで行が返されることを確認しましたか? –