java.sql.SQLException:Unknown column '****' in 'where clause'错误问题原因以及如何解决?

在做数据库查询的时候,很容易碰到这样的错误。错误的原因是因为查询语句使用错误。比如一个用户表的属性有账号id(varchar)和密码password(varchar)当要查询的账号是数字的时候,如123456789可以使用查询语句select * from 表名 where id=123456789
但是,当要查询账号是字符串123456789@qq.com的时候,会报错java.sql.SQLException。
原因是123456789@qq.com的值是string类型的,所以,应加单引号'123456789@qq.com’
也就是使用查询语句select * from 表名 where id='123456789@qq.com'
也就是说:=号后的只要是String类型的就要加上单引号。
以上内容是引自凌世宇的博客

当然啦,还可以这么做
String a ="abc";
String sql = "select * from 表名 where id=''+'/ "+a+/" ';
当然转意有时候不写也不报错。

不过我个人觉得最好的方法还是使用参数绑定,这篇博客中介绍的还是忙详细的,我顺便总结下吧,

1:使用:形式、

Query query=session.createQuery(“from User user where user.name=:customername anduser:customerage=:age ”);
query.setString(“customername”,name);
query.setInteger(“customerage”,age);

2:使用?形式、

Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);
query.setString(0,name);
query.setInteger(1,age);

主要就是这2中方式,至于setParameter()和setParameter()这两种方法以后在研究。这么做的好处就多了,既可以防止sql注入,也不用为引号操心。

 

<%@ page import="util.DbConnet" %> <%@ page import="java.sql.ResultSet" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% // 1. 接收参数(使用唯一标识符) String id = request.getParameter("id"); if(id == null || id.trim().isEmpty()) { response.sendRedirect("list.jsp"); return; } // 2. 使用预编译查询 String sql = "SELECT * FROM living_room_appliances WHERE id=?"; Object[] params = new Object[]{ id }; ResultSet rs = DbConnet.select(sql, params); // 3. 处理查询结果 if(!rs.next()) { response.sendRedirect("list.jsp?error=not_found"); return; } %> <html> <head> <title>编辑家电信息</title> <link rel="stylesheet" href="../css/common.css"> <link rel="stylesheet" href="../css/add.css"> </head> <body> <header> <div class="title">编辑家电信息</div> </header> <div class="main"> <form id="editForm"> <input type="hidden" name="id" value="<%=id%>"> <div class="form-item"> <label for="appliance_type">家电类型:</label> <input readonly value="<%=rs.getString("appliance_type")%>" id="appliance_type" name="appliance_type" type="text"> </div> <div class="form-item"> <label for="appliance_name">家电名称:</label> <input value="<%=rs.getString("appliance_name")%>" id="appliance_name" name="appliance_name" type="text"> </div> <div class="form-item"> <button class="primary" id="btnSubmit" type="button">保存</button> <button type="reset">重置</button> <button id="btnBack" type="button">返回</button> </div> </form> </div> <script src="../js/jquery-3.5.1.min.js"></script> <script src="../js/common.js"></script> <script> // 表单验证函数 function validateForm() { // 验证家电名称不能为空 if($('#appliance_name').val().trim() === '') { alert('家电名称不能为空'); $('#appliance_name').focus(); return false; } return true; } // 保存按钮事件 $('#btnSubmit').on('click', function() { if(!validateForm()) return; // 提交数据到正确的端点 postAction("/appliance/update", $('#editForm').serialize(), function(res) { alert(res.msg); if(res.result) window.location.href = "list.jsp"; }); }); // 返回按钮事件 $('#btnBack').on('click', function() { if(confirm("确定要返回吗?未保存的修改将丢失")){ window.location.href='list.jsp'; } }); </script> </body> </html> 报错的原因是异常报告 消息 在 [15] 行处理 [/room/livingedit.jsp] 时发生异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 在 [15] 行处理 [/room/livingedit.jsp] 时发生异常 12: // 2. 浣跨敤棰勭紪璇戞煡璇� 13: String sql = "SELECT * FROM living_room_appliances WHERE id=?"; 14: Object[] params = new Object[]{ id }; 15: ResultSet rs = DbConnet.select(sql, params); 16: 17: // 3. 澶勭悊鏌ヨ缁撴灉 18: if(!rs.next()) { Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:610) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:489) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因javax.servlet.ServletException: java.sql.SQLSyntaxErrorException: Unknown column 'id' in 'where clause' org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:654) org.apache.jsp.room.livingedit_jsp._jspService(livingedit_jsp.java:227) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 根本原因java.sql.SQLSyntaxErrorException: Unknown column 'id' in 'where clause' com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:968) util.DbConnet.select(DbConnet.java:92) org.apache.jsp.room.livingedit_jsp._jspService(livingedit_jsp.java:134) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324) javax.servlet.http.HttpServlet.service(HttpServlet.java:623) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
07-06
import java.sql.*; public class StudentDAO { // 数据库配置 (从配置文件读取更好) private static final String URL = "jdbc:mysql://localhost:3306/school?useSSL=false&characterEncoding=utf8"; private static final String USER = "root"; private static final String PASSWORD = "123456"; // 1. 增加学生 public static void insertStudent(String name, String gender, String major, int year) { String sql = "INSERT INTO student (stuName, gender, major, enrollmentYear) VALUES (?, ?, ?, ?)"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, name); pstmt.setString(2, gender); pstmt.setString(3, major); pstmt.setInt(4, year); pstmt.executeUpdate(); System.out.println("新增学生成功!"); } catch (SQLException e) { System.err.println("数据库错误: " + e.getMessage()); [^2] } } // 2. 查询学生 public static void queryStudents(String majorFilter) { String sql = "SELECT * FROM student WHERE major LIKE ?"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "%" + majorFilter + "%"); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.printf("ID:%d 姓名:%s 性别:%s 专业:%s 入学年份:%d\n", rs.getInt("stuID"), rs.getString("stuName"), rs.getString("gender"), rs.getString("major"), rs.getInt("enrollmentYear")); } } catch (SQLException e) { System.err.println("查询失败: " + e.getMessage()); } } // 3. 更新学生信息 public static void updateStudentMajor(int stuID, String newMajor) { String sql = "UPDATE student SET major = ? WHERE stuID = ?"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, newMajor); pstmt.setInt(2, stuID); int rows = pstmt.executeUpdate(); System.out.println("更新影响行数: " + rows); } catch (SQLException e) { System.err.println("更新失败: " + e.getMessage()); } } // 4. 删除学生 public static void deleteStudent(int stuID) { String sql = "DELETE FROM student WHERE stuID = ?"; try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, stuID); int rows = pstmt.executeUpdate(); System.out.println("删除行数: " + rows); } catch (SQLException e) { System.err.println("删除失败: " + e.getMessage()); } } // 主方法测试 public static void main(String[] args) { insertStudent("张三", "男", "计算机科学", 2023); insertStudent("李四", "女", "人工智能", 2022); queryStudents("计算机"); updateStudentMajor(1, "软件工程"); deleteStudent(2); } }运行该代码出现数据库错误: Unknown column 'major' in 'field list' 数据库错误: Unknown column 'major' in 'field list' 查询失败: Unknown column 'major' in 'where clause' 更新失败: Unknown column 'major' in 'field list' 删除行数: 0这是为什么
06-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值