rs.getString(1)报无效的SQL

本文讨论了在Java中使用PreparedStatement执行SQL语句时可能遇到的问题,特别是当在一个事务中先后执行了查询和更新操作,并尝试再次从原先的查询结果中获取数据时会发生的错误。文章提供了解决方案,建议在执行新的SQL操作前保存所需的查询结果。
rs.getString("id") 执行到这句的时候报无效的SQL


其中一种原因是对同一个数据库操作,wState.executeUpdate(sql) 或者executeQuery(sql) 不能在第2ci操作后取第一次的rs.getString(1) 已发生变化
比如


rs=wState.executeQuery(sql)
if(rs.next()){

String id=rs.getString("id");

wState.executeUpdate(sql1);
String id1=rs.getString("id");


}

执行到id1时就报无效的SQL, 可以把需要取的rs.getString("id") 先保存到一个临时变量中,或者都放在wState.executeUpdate(sql1); 之前
package com.cissst.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.cissst.dao.IAdminDao; import com.cissst.entity.Admin; import com.cissst.util.DBUtil; public class AdminDaoImpl implements IAdminDao { @Override public List<Admin> getAllAdmin() throws SQLException { String sql = "select * from admin order by name"; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery()) { List<Admin> list = new ArrayList<>(); while (rs.next()) { Admin a = new Admin(); a.setId(rs.getInt("id")); a.setName(rs.getString("name")); a.setPassword(rs.getString("password")); a.setAge(rs.getInt("age")); a.setSex(rs.getString("sex")); a.setTel(rs.getString("tel")); a.setPhone(rs.getString("phone")); a.setAddr(rs.getString("addr")); a.setMemo(rs.getString("memo")); list.add(a); } return list; } } @Override public void save(Admin a) throws SQLException { String sql = "insert into admin(NAME,PASSWORD,SEX,AGE,TEL,PHONE,ADDR,MEMO) values(?,?,?,?,?,?,?,?) "; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, a.getName()); stmt.setString(2, a.getPassword()); stmt.setString(3, a.getSex()); stmt.setInt(4, a.getAge()); stmt.setString(5, a.getTel()); stmt.setString(6, a.getPhone()); stmt.setString(7, a.getAddr()); stmt.setString(8, a.getMemo()); stmt.executeUpdate(); } } @Override public Admin getAdminById(String id) throws SQLException { String sql = "select * from admin where id = ?"; Admin a = null; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, id); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { a = new Admin(); a.setId(rs.getInt("id")); a.setName(rs.getString("name")); a.setPassword(rs.getString("password")); a.setAge(rs.getInt("age")); a.setSex(rs.getString("sex")); a.setTel(rs.getString("tel")); a.setPhone(rs.getString("phone")); a.setAddr(rs.getString("addr")); a.setMemo(rs.getString("memo")); } } } return a; } @Override public void update(Admin a) throws SQLException { String sql = " update admin set NAME = ?,PASSWORD = ?,SEX = ?,AGE = ?, TEL = ?,PHONE = ?,ADDR = ?,MEMO = ? where id = ? "; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, a.getName()); stmt.setString(2, a.getPassword()); stmt.setString(3, a.getSex()); stmt.setInt(4, a.getAge()); stmt.setString(5, a.getTel()); stmt.setString(6, a.getPhone()); stmt.setString(7, a.getAddr()); stmt.setString(8, a.getMemo()); stmt.setInt(9, a.getId()); stmt.executeUpdate(); } } @Override public void delete(String id) throws SQLException { String sql = "delete from admin where id= ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, id); stmt.executeUpdate(); } } @Override public Admin getAdminBynp(String name, String password) throws SQLException { String sql = "select * from admin where name = ? and password = ?"; Admin a = null; try (Connection conn = DBUtil.getConnection()) { assert conn != null; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, name); stmt.setString(2, password); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { a = new Admin(); a.setId(rs.getInt("id")); a.setName(rs.getString("name")); a.setPassword(rs.getString("password")); a.setAge(rs.getInt("age")); a.setSex(rs.getString("sex")); a.setTel(rs.getString("tel")); a.setPhone(rs.getString("phone")); a.setAddr(rs.getString("addr")); a.setMemo(rs.getString("memo")); } } } } return a; } }at com.cissst.dao.impl.AdminDaoImpl.getAdminBynp(AdminDaoImpl.java:116)
最新发布
08-04
package com.bdqn.lib; import java.sql.*; import java.util.Scanner; public class EmpSystem { static Scanner input = new Scanner(System.in); static String url = "jdbc:mysql://localhost:3306/shujk?serverTimezone=GMT-8&useUnicode=true&characterEncoding=utf8"; static String user = "root"; static String pwd = "root"; public static void main(String[] args) { System.out.println("***欢迎使用员工系统***"); while (true) { System.out.println("1,添加员工"); System.out.println("2,根据编号删除员工"); System.out.println("3、修改员工信息"); System.out.println("4、根据编号查询员工"); System.out.println("5、查询所有员工"); System.out.println("0、退出系统"); switch (input.nextInt()) { case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 0: System.out.println("拜拜"); return;//返回(退出)主方法 //System.exit(1);//退出应用程序 default: System.out.println("无此功能!请重新输入!"); } } }//主方法 public static void selectAll() throws ClassNotFoundException, SQLException { // 1、加载驱动 Class.forName(com.mysql.cj.jdbc.Driver.class.getName()); // 2、创建数据库连接对象 Connection conn = DriverManager.getConnection(url, user, pwd); // 3、编写SQL语句 String sql = "select * from emp"; // 4、创建数据库操作对象 PreparedStatement stmt = conn.prepareStatement(sql); // 5、执行SQL语句 ResultSet rs = stmt.executeQuery(); // 处理数据 System.out.println("id\t姓名\t年龄\t性别\t地址\t邮箱\t部门编号"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); String address = rs.getString("address"); String email = rs.getString("email"); int did = rs.getInt("did"); System.out.println(id + "\t" + name + "\t" + age + "\t" + sex + "\t" + address + "\t" + email + "\t" + did); } // 7、关闭资源 rs.close(); stmt.close(); conn.close(); } public static void selectEmpById() throws ClassNotFoundException, SQLException { Class.forName(com.mysql.cj.jdbc.Driver.class.getName()); Connection conn = DriverManager.getConnection(url, user, pwd); String sql = "select * from emp where id = ?"; PreparedStatement stmt = conn.prepareStatement(sql); // 参数赋值 System.out.println("输入要查询员工的编号:"); int id = input.nextInt(); stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); String address = rs.getString("address"); String email = rs.getString("email"); int did = rs.getInt("did"); System.out.println(id + "\t" + name + "\t" + age + "\t" + sex + "\t" + address + "\t" + email + "\t" + did); } rs.close(); stmt.close(); conn.close(); } } } } 帮我纠错
07-27
package book.library.dao; import book.library.beans.BookBeans; import book.library.util.DBCon; import java.sql.*; import java.util.ArrayList; import java.util.List; public class BookDAO { private Connection conn; public BookDAO() throws SQLException { this.conn = DBCon.getConnection(); } public void addBook(BookBeans book) throws SQLException { String sql = "INSERT INTO books (title, price, author, publisher, stock, modifiedStock) VALUES (?, ?, ?, ?, ?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, book.getTitle()); pstmt.setDouble(2, book.getPrice()); pstmt.setString(3, book.getAuthor()); pstmt.setString(4, book.getPublisher()); pstmt.setInt(5, book.getStock()); pstmt.executeUpdate(); } } public void updateBook(BookBeans book) throws SQLException { String sql = "UPDATE books SET title = ?, price = ?, author = ?, publisher = ?, stock = ? WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, book.getTitle()); pstmt.setDouble(2, book.getPrice()); pstmt.setString(3, book.getAuthor()); pstmt.setString(4, book.getPublisher()); pstmt.setInt(5, book.getStock()); pstmt.setInt(6, book.getId()); pstmt.executeUpdate(); } } public void deleteBook(int id) throws SQLException { String sql = "DELETE FROM books WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.executeUpdate(); } } public List<BookBeans> getAllBooks() throws SQLException { List<BookBeans> books = new ArrayList<>(); String sql = "SELECT * FROM books"; try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { BookBeans book = new BookBeans(); book.setId(rs.getInt("id")); book.setTitle(rs.getString("title")); book.setPrice(rs.getDouble("price")); book.setAuthor(rs.getString("author")); book.setPublisher(rs.getString("publisher")); book.setStock(rs.getInt("stock")); books.add(book); } } return books; } } 这是后台代码,请修改。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %> <!DOCTYPE html> <html> <head> <title>图书信息展示</title> </head> <body> <h1>图书信息</h1> <table border="1"> <tr> <th>图书名称</th> <th>图书价格</th> <th>图书作者</th> <th>出版社</th> <th>存放数量</th> <th>修改数量</th> <th>删除</th> </tr> <c:forEach var="book" items="${books}"> <tr> <td>${book.title}</td> <td>${book.price}</td> <td>${book.author}</td> <td>${book.publisher}</td> <td>${book.stock}</td> <td> <a href="book?id=${book.id}">修改</a> </td> <td> <a href="delete?id=${book.id}">删除</a> </td> </tr> </c:forEach> </table> <a href="book.jsp">添加图书信息</a> </body> </html>这是前台代码,请修改。
05-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值