次の選択クエリの実行中にエラーが発生します:
ResultSet rs = St.executeQuery("select * from login where username="+username+"and password ="+password);
そして例外は
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended.
構文的にクエリが間違っている場合はお知らせください。
少なくともパラメーターを使用します(名前付きパラメーターの方がさらに優れています)。値をSQL文字列に連結すると、エラーが発生しやすく、安全ではありません。例えば:
Statement stmt = null;
String query = "select * from login where username=? and password=?";
try {
stmt = con.createStatement();
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
//...
}
} catch (SQLException e ) {
//TODO handle e
} finally {
if (stmt != null) { stmt.close(); }
}
}
ユーザー名とパスワードの値は引用符で囲む必要があります
ResultSet rs = St.executeQuery("select * from login where username='" + username + "' and password ='" + password + "'");
andユーザー名とキーワードの間にスペースはありません。これは解析されます
ログインから*を選択します。ここで、username = usernameand password = password
また、ステートメントに挿入する値の前後に一重引用符がありません。試す:
ResultSet rs = St.executeQuery( "select * from login where username ='" + username + "'and password ='" + password + "'");
また、Javaチュートリアルでのプリペアドステートメントの使用についても読むことをお勧めします。
これを試してください(いくつかの空白と引用符がありません):
ResultSet rs =
St.executeQuery(
"select * from login where username=\""+username+"\" and password =\""+password + "\"");
JDBCおよびSQLインジェクションの名前付きパラメーターについてもお読みください。
値とパスワードの前に一重引用符がありません。次のようになります。
ResultSet rs = St.executeQuery("select * from login where username='"+username+"' and password ='"+password+"'");
ResultSet rs = St.executeQuery("select * from login where username='"+username+"' and password ='"+password+"'");
クエリを実行するための最良の方法は、それを取り出して、自分で試してみてください...例:
String query = "select * from login where username='"+username+"' and password = '"+password+"'";
//Print your query and execute it in your sql client you ll get to know if it works!
System.out.println(query);
ResultSet rs = St.executeQuery(query);