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
List<String> xhs = new ArrayList<>(); if (!"Wound Closure".equals(buName)){ String dt1Sql = "select chu_ext_id,sl,xh from " + mainTablename + "_dt1 where mainid = '" + mainId + "'"; rs.executeQuery(dt1Sql); while (rs.next()){ String chuExtId = Util.null2String(rs.getString("chu_ext_id")); xhs.add("型号:" + Util.null2String(rs.getString("xh")) + " 数量:" + Util.null2String(rs.getString("sl"))); String updateSql = "update uf_chu_ext set ddzt=" + getDdzt() + ",wf_ddzt=" + getNewStatus() + " where id='"+ chuExtId + "'"; logger.writeLogInfo(this.getClass().getName(), ACTION_NAME + " action chu ext updateSql1: " + updateSql); if ("".equals(chuExtId)){ return failureInfo(requestInfo, requestid, "提示:数据校验异常,请联系管理员"); } innerRs.execute(updateSql); } } else { String dt2Sql = "select chu_ext_id,bcsl,bcxh from " + mainTablename + "_dt2 where mainid = '" + mainId + "'"; rs.executeQuery(dt2Sql); while (rs.next()){ String chuExtId = Util.null2String(rs.getString("chu_ext_id")); String bcsl = Util.null2String(rs.getString("bcsl")); String bcxh = Util.null2String(rs.getString("bcxh")); xhs.add("型号:" + bcxh + " 数量:" + bcsl); String updateSql = "update uf_chu_ext set ddzt=" + getDdzt() + ",wf_ddzt=" + getNewStatus() + " where id='"+ chuExtId + "'"; logger.writeLogInfo(this.getClass().getName(), ACTION_NAME + " action chu ext updateSql2: " + updateSql); if ("".equals(chuExtId)){ return failureInfo(requestInfo, requestid, "提示:数据校验异常,请联系管理员"); } innerRs.execute(updateSql); } }这个代码什么意思
10-17
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
public class QsNewInterfaceDataUtil implements InitializingBean{ @Autowired @Qualifier("pposJdbcTemplate") private JdbcTemplate jdbcTemplate; private Map<String,Map<String,Map<String,String>>> map = new HashMap<>(); private static final String SQL = "select FUNCTION_ID, FIELD_NAME, OLD_DATA, NEW_DATA, DATA_DESC from AMOS_DATA_HTTPINTERFACE_DATA"; public Map<String, Map<String, String>> getInterfaceDataByCode(String interfaceCode) { return map.get(interfaceCode); } @Override public void afterPropertiesSet() throws Exception { log.info("开始加载接口数据信息"); SqlRowSet rs = jdbcTemplate.queryForRowSet(SQL); ArrayList<HttpInterfaceDATADTO> list = new ArrayList<>(); if(null != rs) { while(rs.next()) { HttpInterfaceDATADTO dataDTO = new HttpInterfaceDATADTO(); dataDTO.setFunctionId(rs.getString("FUNCTION_ID")); dataDTO.setFieldName(rs.getString("FIELD_NAME")); dataDTO.setOldData(rs.getString("OLD_DATA")); dataDTO.setNewData(rs.getString("NEW_DATA")); dataDTO.setDataDesc(rs.getString("DATA_DESC")); list.add(dataDTO); } } //根据接口编码和字段名分组 Map<String,Map<String,Map<String,String>>> groupedMap = list.stream() .collect(Collectors.groupingBy( HttpInterfaceDATADTO::getFunctionId, Collectors.groupingBy( HttpInterfaceDATADTO::getFieldName, Collectors.toMap( HttpInterfaceDATADTO::getNewData, HttpInterfaceDATADTO::getOldData, (v1,v2)->v1 ) ) ) ); map.putAll(groupedMap); log.info("接口数据信息加载完成,:{}",map); } }解释一下相关代码,使用文字解释,详细一点
最新发布
11-13
package com.api.demo.web; import weaver.conn.RecordSet; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.servlet.http.HttpServletRequest; @Path("Kehuzic") public class Kehuzic { @GET @Path("scbm") public String scbm(@Context HttpServletRequest request) { String useID = request.getParameter("userId"); String zcmc = ""; String zcbm = ""; String cs = ""; int zcbm1 = 0; if(useID.equals("") || useID.trim().isEmpty()) { return "error: userId is required"; } try{ String sql = "select TOP 1 id from uf_KHZCRK where modedatacreater ='" + useID + "' order by id desc"; RecordSet rs = new RecordSet(); rs.execute(sql); rs.next(); String id = rs.getString("id"); String sql7 = "select zcmc,zcjg,zcfl,zcqc,gmrq,zccs,zcwz,zcgz from uf_KHZCRK where id='" +id +"'" ; RecordSet rs7 = new RecordSet(); rs7.execute(sql7); rs7.next(); zcmc = rs.getString("zcmc"); String zcjg = rs7.getString("zcjg"); String zcfl = rs7.getString("zcfl"); String zcqc = rs7.getString("zcqc"); String gmrq = rs7.getString("gmrq"); String zccs = rs7.getString("zccs"); String zcwz = rs7.getString("zcwz"); String zcgz = rs7.getString("zcgz"); int zcjg1 = Integer.parseInt(zcjg); String sql1 = "select colNo,parent_id from uf_FL where col_name ='" + zcmc+"'"; RecordSet rs1 = new RecordSet(); rs1.execute(sql1); rs1.next(); String colNo = rs1.getString("colNo"); String pant_id = rs1.getString("parent_id"); String sql4 = "select colNo from uf_FL where id=" + pant_id; RecordSet rs4 = new RecordSet(); rs4.execute(sql4); rs4.next(); String colNo2 = rs4.getString("colNo"); String sql5 =""; cs = "8"; if (zcjg1 >299){ sql5 = "select TOP 1 lsh from uf_ZCQD where zcmc='" + zcmc+"'"+" and zcbm like '4B%' order by lsh desc";} else { sql5 = "select TOP 1 lsh from uf_ZCQD where zcmc='" + zcmc+"'"+" and zcbm like '5B%' order by lsh desc"; } RecordSet rs5 = new RecordSet(); rs5.execute(sql5); rs5.next(); String lsh = rs5.getString("lsh"); cs = "4"; if (lsh == null || lsh.equals("")) { cs = "5"; if ( zcjg1 >299 ) { zcbm = "4" + "B" + colNo2 + colNo + "0001"; } else { zcbm = "5" + "B" + colNo2 + colNo + "0001"; } } else { zcbm1 = Integer.parseInt(lsh) + 1; String zcbm2 = String.format("%04d",zcbm1); zcbm1 = Integer.parseInt(zcbm2); if (zcjg1 >299) { zcbm = "4" + "B" + colNo2 + colNo + zcbm2; } else { zcbm = "5" + "B" + colNo2 + colNo + zcbm2; } } String sql6 = "insert into uf_ZCQD(formmodeid,zcbm,zcmc,jg,cfwz,wpmcggxh,zcgz,qgrq) values(72,'" + zcbm + "','" + zcmc + "','" + zcjg1 + "','" + zcwz + "','" + zcqc + "','" + zcgz + "','"+gmrq+"')"; RecordSet rs6 = new RecordSet(); rs6.execute(sql6); cs = "6"; return zcbm+";"+zccs+";"+zcmc+";"+zcgz+";"+zcwz+";"+zcqc+";"+zcjg1+";"+zcfl+";"+gmrq+";"+id+ ";"+cs; }catch (Exception e){ e.printStackTrace(); } return "scbm"; } } 为什么不执行插入语句,且返回scbm
10-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值