java.sql.SQLException: Column 'admin' not found.的解决方案之一

本文详细记录了在使用Java进行数据库操作时遇到的错误:尝试从数据库中获取用户名admin时出现的java.sql.SQLException异常。通过对比rs.getString(username)和rs.getString(“username”)的使用,最终解决了问题。

##我只是在做简单测试登录页面,从数据库里调取username列下的用户名admin。总是出错。出错代码如下:

java.sql.SQLException: Column 'admin' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:862)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1076)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5206)
at com.cjy.login.dao.UserDaoImpl.getUserByUsernameAndPassword(UserDaoImpl.java:36)
at com.cjy.login.servlet.LoginServlet.doPost(LoginServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

后来发现只是改正前致使出错的地方
和这个的区别改正后

可能是你结果集返回时,获取rs.setString(username);和rs.setString(“username”)的区别。

消息 在 [15] 行处理 [/list.jsp] 时发生异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 在 [15] 行处理 [/list.jsp] 时发生异常 12: } 13: 14: int offset = (pageNum - 1) * pageSize; 15: List<Article> articles = articleDao.getArticles(offset, pageSize); 16: int totalArticles = articleDao.getTotalArticles(); 17: int totalPages = (int) Math.ceil((double) totalArticles / pageSize); 18: %> 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 'field list' org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:654) org.apache.jsp.list_jsp._jspService(list_jsp.java:298) 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 'field list' com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1009) com.myblog.dao.ArticleDAO.getArticles(ArticleDAO.java:104) org.apache.jsp.list_jsp._jspService(list_jsp.java:141) 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) ):注意 主要问题的全部 stack 信息可以在 server logs 里查看
06-12
Java 数据库操作中,当抛出 `java.sql.SQLException: Column 'bookName' not found` 异常时,通常表示在结果集中找不到指定的列名。这种错误常见于使用 JDBC 直接操作数据库或使用某些 ORM 框架(如 MyBatis、Hibernate)进行映射时。以下是可能的原因及对应的解决方法。 ### 1. 检查 SQL 查询中的列名 确保 SQL 查询中包含了 `bookName` 列。如果查询语句中没有明确选择该列,或者使用了别名但未正确匹配,将导致结果集中不存在该列名。 ```sql SELECT id, book_name AS bookName FROM books; -- 使用别名匹配 Java 实体字段名 ``` ### 2. 检查数据库表结构 确认数据库表中确实存在名为 `bookName` 或其对应字段名的列。例如,如果数据库中列名为 `book_name`,但在 Java 代码中尝试访问 `bookName`,则会抛出此异常。 ```sql DESCRIBE books; -- MySQL -- 或 SELECT column_name FROM information_schema.columns WHERE table_name = 'books'; -- PostgreSQL ``` ### 3. 使用别名匹配 Java 实体类字段 在 ORM 框架中,如 Hibernate 或 MyBatis,若实体类字段名与数据库列名不一致,需在 SQL 查询中使用别名进行映射。 ```java public class Book { private String bookName; // getter and setter } ``` 对应的 SQL 查询应为: ```sql SELECT book_name AS bookName FROM books; ``` ### 4. 检查 JDBC 结果集获取方式 在使用 JDBC 时,确保使用正确的列名从 `ResultSet` 中获取数据。 ```java ResultSet rs = statement.executeQuery("SELECT book_name AS bookName FROM books"); while (rs.next()) { String bookName = rs.getString("bookName"); // 确保列名与别名一致 } ``` ### 5. 检查 ORM 框架的映射配置 如果使用 Hibernate 或 MyBatis,需检查实体类与数据库表之间的映射是否正确。例如,在 Hibernate 中使用注解: ```java @Entity public class Book { @Column(name = "book_name") private String bookName; } ``` 或者在 MyBatis 的 XML 映射文件中: ```xml <resultMap id="BookResultMap" type="Book"> <result property="bookName" column="book_name"/> </resultMap> ``` ### 6. 使用 `columnLabel` 替代 `columnIndex` 在某些数据库驱动中,`ResultSet` 使用 `getString(int columnIndex)` 可能不会抛出列名不存在的错误,但使用 `getString(String columnLabel)` 时会更严格地检查列名是否存在。 ```java String bookName = rs.getString("bookName"); // 使用列名获取 ``` ### 7. 检查数据库驱动版本与兼容性 有时,旧版本的 JDBC 驱动可能对列名的处理方式不同,建议更新至最新版本以确保兼容性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值