准备好的语句和 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的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra CQL 准备好的语句比非准备好的语句慢?

Golang使用准备好的SQL语句

了解 PDO 准备好的语句和绑定参数

我啥时候应该使用准备好的语句?

如何查看准备好的语句的内容?

准备好的语句和数据库