-1

次の選択クエリの実行中にエラーが発生します:

ResultSet rs = St.executeQuery("select * from login where username="+username+"and password ="+password);

そして例外は

java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended. 

構文的にクエリが間違っている場合はお知らせください。

4

6 に答える 6

2

少なくともパラメーターを使用します(名前付きパラメーターの方がさらに優れています)。値を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(); }
    }
}
于 2012-05-17T12:56:14.983 に答える
1

ユーザー名とパスワードの値は引用符で囲む必要があります

ResultSet rs = St.executeQuery("select * from login where username='" + username + "' and password ='" + password + "'");
于 2012-05-17T12:50:19.100 に答える
1

andユーザー名とキーワードの間にスペースはありません。これは解析されます

ログインから*を選択します。ここで、username = usernameand password = password

また、ステートメントに挿入する値の前後に一重引用符がありません。試す:

ResultSet rs = St.executeQuery( "select * from login where username ='" + username + "'and password ='" + password + "'");

また、Javaチュートリアルでのプリペアドステートメントの使用についても読むことをお勧めします。

于 2012-05-17T12:47:32.940 に答える
0

これを試してください(いくつかの空白と引用符がありません):

ResultSet rs = 
  St.executeQuery(
    "select * from login where username=\""+username+"\" and password =\""+password + "\"");

JDBCおよびSQLインジェクションの名前付きパラメーターについてもお読みください。

于 2012-05-17T12:48:10.397 に答える
0

値とパスワードの前に一重引用符がありません。次のようになります。

ResultSet rs = St.executeQuery("select * from login where username='"+username+"' and password ='"+password+"'");
于 2012-05-17T12:48:30.533 に答える
0
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);
于 2012-05-17T12:52:35.290 に答える