0

私は現在、登録にこのコードを使用しています:

value1 = registerEmail.getText().toString();
    value2 = registerPassword.getText().toString();
    value3 = registerName.getText().toString();
    try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);
        Statement st = con.createStatement();
        Log.d("Connectc","executing check");
        ResultSet res = st.executeQuery("SELECT * FROM user where email='"+value1+"'");
        while (res.next()) {
            userc = res.getString("email");
        }
            if (value1.equals(userc)) {
                tv.setText("Email already in use!");
            }
            else{
                Log.d("Connectc","registering");
                st.executeUpdate("INSERT INTO user (email, password, name) VALUES('"+value1+"', '"+value2+"', '"+value3+"' )");
                tv.setText("Data is successfully saved." );
                Intent i = new Intent(getApplicationContext(),
                        LoginActivity.class);
                                    startActivity(i);
                finish();
                Log.d("Connectl","pfffffffff");
            }               

はい、jsonを使用する方が良いでしょうが、これを使用する必要があります...したがって、コードは電子メールが存在するかどうかを確認し、ユーザー名も存在するかどうかを確認する必要があります。どうすればよいですか?別のSQLクエリを追加する必要があります。または、これを編集して、ユーザー名がデータベースに存在するかどうかも確認できますか?ありがとう。

4

2 に答える 2

1

これにより、電子メールまたはユーザー名が存在する場合に行が返されるため、ログインデータがすでに存在することをユーザーに求めることができます。

ResultSet res = st.executeQuery(
"SELECT * FROM user 
where email='"+value1+"' 
OR username='"+ value3+"'");
于 2013-01-08T19:43:49.713 に答える
1

ユーザーからの入力を受け取っているので、プリペアドステートメントを使用することをお勧めします。それはあなたが何も挿入することを許可しませんSQL Injection

value1 = registerEmail.getText().toString();
value3 = registerName.getText().toString();

query = "SELECT * FROM user where email=? OR username=? ";
PreparedStatement st = con.prepareStatement(query); // con is active connection
st.setText(1,value1);
st.setText(2,value3);

プリペアドステートメントの使用方法の例。

SQLインジェクションとは何ですか?

于 2013-01-08T19:47:55.803 に答える