Java MySQL语法异常
公共静态登录登录(字符串用户名)引发异常{Java MySQL语法异常,java,mysql,Java,Mysql,公共静态登录登录(字符串用户名)引发异常{ String query="select user_name, password from login where user_name="+userName; System.out.println(query); Statement st=null; ResultSet result=null; LoginBean bean=new LoginBean(); try{ st=con.cr
String query="select user_name, password from login where user_name="+userName;
System.out.println(query);
Statement st=null;
ResultSet result=null;
LoginBean bean=new LoginBean();
try{
st=con.createStatement();
result=st.executeQuery(query);
while(result.next()){
bean.setUserName(result.getString("user_name"));
bean.setPassword(result.getString("password"));
}
return bean;
}
finally
{
if(result!=null)
{
result.close();
}
if(st!=null)
{
st.close();
}
}
}
我正在执行此方法,但它给了我一个错误,即
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:where子句中的未知列“admin”
我检查了语法,但找不到错误。用户名“admin”周围缺少引号,这使得mysql
认为您指的是列名而不是值
也就是说,您应该使用PreparedStatement
:
String query="select user_name, password from login where user_name=?";
System.out.println(query);
PreparedStatement st=null;
ResultSet result=null;
LoginBean bean=new LoginBean();
try{
st=con.prepareStatement(query);
st.setString(1,userName);
result=st.executeQuery();
...
“我已经检查了语法”-有吗?您能在问题中包括您试图执行的SQL查询的实际运行时值吗?告诉我们您已经检查了它,并且您认为它是正确的,这与向我们展示它以便我们可以检查它是不同的。我希望我们能根除所有不使用
PreparedStatement
的教程和代码片段。这是什么方法setString(1,userName);对于???@TaimoorKhan,它用存储在userName
变量中的值替换SQL字符串中的?
。