如何使用PreparedStatement
在where
子句中传递字符串?
我尝试了以下代码行:
String sql = "select pass from lbdb_user WHERE username = ? collate latin1_bin";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,"\""+username+"\"" );
它引发以下mysql异常:
You have an error in your SQL syntax;
答案 0 :(得分:3)
像这样尝试:
String username = "Mickey Mouse";
String sql = "select pass from lbdb_user WHERE username = ? ";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);
我不知道该整理什么。我建议您在数据库中使用Unicode和UTF-8。
答案 1 :(得分:0)
下面是一个使用COLLATE latin1_bin的示例,它与您发布的内容相同,并且可以正常工作
String lSql = "SELECT lastname FROM contacts WHERE lastname= ? COLLATE latin1_bin ";
PreparedStatement lPreparedStatement = con.prepareStatement(lSql);
lPreparedStatement.setString(1, "andre");
ResultSet lResultSet = lPreparedStatement.executeQuery();
答案 2 :(得分:-2)
您是否正在使用Microsoft Transact-SQL?我只是无法测试,但尝试在“ order by”之后使用升序,并以asc结尾。由于归类确定特殊的排序顺序,因此如果不排序,则无法归类。
第二,我认为不存在带有引号的用户名。 您只能将它们包围在SQL中,而如果调用已准备好的语句的“ setString”方法,则不会。
更正的代码:
String sql = "select pass from lbdb_user WHERE username = ? order by pass collate latin1_bin asc";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);