有一个 mySQL 错误,未知列 where 子句 [重复]

Posted

技术标签:

【中文标题】有一个 mySQL 错误,未知列 where 子句 [重复]【英文标题】:Having a mySQL error, unknown column where clause [duplicate] 【发布时间】:2012-02-29 20:33:11 【问题描述】:

我目前在从 mysql 数据库中选择某个项目时遇到问题。我的程序旨在将参数从 android 应用程序传递到 servlet,然后查询数据库。

但是控制台窗口上出现错误: 'where 子句'中的未知列'0102310c24'

只有当我要选择的值包含字母时才会出错。

当我查询这个号码0106172459时,我想要的数据没有问题的返回。

下面是我的servlet。

import java.io.*;
import java.util.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBServlet extends HttpServlet 
public void service(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String x=request.getParameter("item");
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try 
Class.forName("com.mysql.jdbc.Driver");
con =DriverManager.getConnection ("jdbc:mysql://IP/databasename", "username", "password");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM items WHERE item="+x);
// displaying records
while(rs.next())
out.print(rs.getObject(1).toString());
out.print(",");
out.print(rs.getObject(2).toString());
out.print(",");
out.print(rs.getObject(3).toString());
out.print(",");
out.print(rs.getObject(4).toString());
out.print(",");
out.print(rs.getObject(5).toString());
out.print(",");
out.print(rs.getObject(6).toString());
out.print(",");
out.print(rs.getObject(7).toString());
out.print(",");
out.print(rs.getObject(8).toString());
out.print(",");
out.print("\n");

 catch (SQLException e) 
throw new ServletException("Servlet Could not display records.", e);
 catch (ClassNotFoundException e) 
throw new ServletException("JDBC Driver not found.", e);
 finally 
try 
if(rs != null) 
rs.close();
rs = null;

if(stmt != null) 
stmt.close();
stmt = null;

if(con != null) 
con.close();
con = null;

 catch (SQLException e) 

out.close();


我使用它来将值发送到 servlet。

List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("item","List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("item","010238a2cc"));"));

如果有人能提供帮助,我将不胜感激

【问题讨论】:

【参考方案1】:

如果值 x 是整数,则使用以下代码:- rs = stmt.executeQuery("SELECT * FROM items WHERE item="+x); 如果值 x 是字符串,则使用以下代码:- rs = stmt.executeQuery("SELECT * FROM items WHERE item=' "+x" ' ");

【讨论】:

【参考方案2】:

尝试使用PreparedStatement

PreparedStatement st = con.prepareStatement("SELECT * FROM items WHERE item=?");
st.setString(1,x);
rs = st.executeQuery();

【讨论】:

【参考方案3】:

如果项目是字符串类型,则需要用引号将其括起来。更好的是,您应该使用PreparedStatement 来执行查询。

【讨论】:

【参考方案4】:

x 应该用引号引起来,否则会假定非数字值引用列而不是字符串文字。

rs = stmt.executeQuery("SELECT * FROM items WHERE item='"+x + "'");

请注意,您的脚本似乎容易受到 SQL 注入的攻击,因为值 x 尚未转义,而是从 Request 接收的。这里最好使用准备好的语句。

【讨论】:

完美,知道这是非常小的事情。非常感谢您的帮助和建议。我还将研究您提供的有关使用准备好的语句的其他建议。再次感谢。

以上是关于有一个 mySQL 错误,未知列 where 子句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

#1054 - MySQL 中“where 子句”中的未知列“proximite”

不使用`where`子句,但得到错误:“未知列 在where子句中“

错误代码:1054 'where 子句'中的未知列'billId'

在 MySQL 查询的 WHERE 子句中使用列别名会产生错误

查询中的错误 (1054):“where 子句”中的未知列“TableValue”

错误代码:1054。“where 子句”中的未知列“sdate”