java - where 子句中的未知列 'sunny'

标签 java jdbc

  <body>
    <%  String name=session.getAttribute("user").toString();    %>

 <br>

  <%@ page import="java.sql.*" %>
  <%
   try
  {
   Class.forName("com.mysql.jdbc.Driver").newInstance();
   java.sql.Connection 
   con=DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/pbl","root","");
   Statement st=con.createStatement();
   String q="select pcode ,pname,pprice from car where us="+name;
   ResultSet rs = st.executeQuery(q) ;
 %>

错误: java.sql.SQLSyntaxErrorException:您的 SQL 中有错误 句法;检查与您的 MariaDB 服务器对应的手册 在第 1 行“by name”附近使用正确语法的版本

最佳答案

i guess the problem in this line String q="select pcode,pname,pprice from car where us="+name;

是的,因为名称(显然是sunny)不在 SQL 引号中,所以它看起来像一个列引用。

决不使用字符串连接将值添加到 SQL 查询中。使用prepared statements相反:

PreparedStatement ps = con.prepareStatement("select pcode ,pname,pprice from car where us = ?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

这样,信息将作为数据处理,而不是作为 SQL(必要时适当转义等)。需要注意的事项:

  1. 您在值所在的位置使用?。即使您要使用字符串作为值,您也不会将 ? 放在引号或其他内容中。
  2. 您可以通过在连接上调用 prepareStatement 来获取准备好的语句。
  3. 没有将字符串传递给executeQuery。 (这很重要,因为遗憾的是,您可以将字符串传递到 PreparedStatement 上的 executeQuery 中,这绕过了使用准备好的语句的全部意义;它应该被定义为引发异常,但遗憾的是事实并非如此。)

让我向您介绍my friend Bobby :

Her daughter is named Help I'm trapped in a driver's license factory.

关于java - where 子句中的未知列 'sunny',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55312918/

相关文章:

java - 保存具有复杂关系的实体时出现 StaleStateException

java - java中如何从多个文档中搜索一个单词?

java - 为什么 R 无法识别我的 "about"标签

r - 通过 JDBC 连接到 R 中的 S3 Athena

java - 具有依赖关系(外键)的多个 DAO

java - : "Updating Maven Project". org.eclipse.m2e.wtp.WTPProjectsUtil.isM2eWtpDisabled 期间发生内部错误

java - 将java中的时间格式从YYYY-MM-DD转换为Day-Month-Year

java - 将 UUID 存储在 mysql 数据库表中

java - 导出 JAR 文件但需要 MySQL 驱动程序

java - 运行 lagom 测试时喷油器错误