准备好的语句和setString

时间:2017-08-21 09:08:24

标签: java sql jdbc prepared-statement

我对setString有疑问。当我将%添加到setString中的参数时,即使我没有写任何内容也能正常工作。但是,当我删除它时,它不起作用。有人可以帮忙吗?

String Id= User1.getText().toString();
String Passwords = Pass.getText().toString();


btnlogin.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
         String query = "SELECT * FROM TABLE WHERE id LIKE ? AND pass LIKE ? ";
            try {
                if (connect != null) {
                   PreparedStatement statement = connect.prepareStatement(query);
                statement.setString(1, Id );  //  statement.setString(1 ,"%" + Id + "%");
               statement.setString(2 ,Passwords);//  statement.setString(2 ,"%" + Passwords + "%");
                   r = statement.executeQuery();
                    if (r.next()){

                        Intent intent = new Intent();
                        intent.setClass(Login.this, MainActivity.class);
                        startActivity(intent);
                            }
                     else {
                        message = "Error";
                        info.setText(message);
                    }

                } else {
                    message = "Error in connection with SQL server";
                    info.setText(message);
                }


            } catch (SQLException e) {
                etat = false;
                message = "Got an exception!";
                System.err.println(e.getMessage());
            }


    }});  }

P.S:我没有错误

1 个答案:

答案 0 :(得分:2)

这是因为你的SQL查询正在乞求类似语法。

如果您不想使用%%,请传递直接字符串并将LIKE查询更改为=查询。

SELECT * FROM TABLE WHERE id = ? AND pass = ?

但是使用like运算符检查用户名和密码是个糟糕的主意。始终检查它们是否等于。