准备好的语句和 setString
Posted
技术标签:
【中文标题】准备好的语句和 setString【英文标题】:Prepared statement and setString 【发布时间】:2017-08-21 09:08:23 【问题描述】: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:我没有收到任何错误
【问题讨论】:
会不会是字符编码问题? @Maurice 我不知道为什么它不起作用 【参考方案1】:那是因为您的 SQL 查询请求类似语法。
如果您不想使用%%
,请传递直接字符串并将LIKE 查询更改为=
查询。
SELECT * FROM TABLE WHERE id = ? AND pass = ?
但是使用 like 运算符检查用户名和密码是一个糟糕的主意。始终检查它们是否相等。
【讨论】:
我之前试过用 = 替换 Like ,但是没有用 你能粘贴最后形成的sql查询吗? @Mimi 那么您的数据或输入有问题检查它们并确保您使用的是正确的信息,从您分享的内容中我们了解到这是您问题的正确答案 @SURESH String query = "SELECT * FROM TABLE WHERE id = ? AND pass = ?";尝试 if (connect != null) PreparedStatement 语句 = connect.prepareStatement(query); statement.setString(1 ,Id ); statement.setString(2 ,密码); r = statement.executeQuery(); “TABLE”是表的允许名称吗?以上是关于准备好的语句和 setString的主要内容,如果未能解决你的问题,请参考以下文章