PreparedStatement.setNull方法研究

博客介绍了在PreparedStatement中设置空值的方法。若写成setInt(1,null)会报空指针异常,需使用setNull(index, type)方法代替,第二个参数为java.sql.Types中具体类型值,前提是数据库字段允许null值。

在PreparedStatement中设置空值

如果需要在PreparedStatement中设置空值,如果写成setInt(1,null),程序会毫不留情的报出空指针异常,所以你需要使用setNull(index, type)方法来代替。

                     例如:

第二个参数为java.sql.Types中具体的类型值,你可以通过Types查找到你需要的具体类型。通过这个方法,就可以完成在PreparedStatement设置null值,前提当然是你的数据库字段允许null值。源码如下

 

 

 

public int empUpdate(Emp emp) { PreparedStatement preparedStatement = null; Connection connection = this.getDBConnection(); int i = 0; String sql = "UPDATE EMP SET ENAME=?,JOB=?,MGR=?,HIREDATE=?,SAL=?,COMM=?,DEPTNO=? WHERE EMPNO=?"; try { connection.setAutoCommit(false); preparedStatement = connection.prepareStatement(sql); preparedStatement.setObject(1, emp.getEname()); preparedStatement.setObject(2,emp.getJob()); preparedStatement.setObject(3,emp.getMgr()); if(emp.getHiredate() == null){ preparedStatement.setObject(4,null); }else{ preparedStatement.setObject(4,new Date(emp.getHiredate().getTime())); } preparedStatement.setObject(5,emp.getSal()); preparedStatement.setObject(6,emp.getComm()); preparedStatement.setObject(7,emp.getDeptno()); preparedStatement.setObject(8,emp.getEmpno()); i = preparedStatement.executeUpdate(); connection.commit(); } catch (SQLException e) { try { connection.rollback(); } catch (SQLException ex) { throw new RuntimeException(ex); } }finally { if(preparedStatement != null){ try { preparedStatement.close(); } catch (SQLException e) { throw new RuntimeException(e); } } this.closeDBConnection(); } return i; } public static void main(String[] args) { EmpDaoImpl empDao = new EmpDaoImpl(); Emp emp = new Emp(); emp.setEmpno(1111); emp.setEname("XXX"); emp.setSal(55.56); emp.setDeptno(7766); emp.setHiredate(new Date()); emp.setComm(11.2); emp.setMgr(null); emp.setJob("FIS"); int i = empDao.empUpdate(emp); System.out.println(i); } 为什么不能修改数据库中emp表的数据
09-29
package record.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import record.dao.RecordDao; import record.model.Record; // 假设 Record 是封装借阅记录表的 Java Bean import util.DBUtil; // 假设 DBUtil 是用于获取数据库连接和关闭资源的工具类 /** * 借阅记录数据访问层实现类 */ public class RecordDaoImpl implements RecordDao { private Connection connection = null; private PreparedStatement preparedStatement = null; private ResultSet resultSet = null; /** * 添加借阅记录 * @param record 借阅记录对象 * @return 是否成功添加 */ @Override public boolean addRecord(Record record) { String sql = "INSERT INTO borrow_records (book_id, user_id, borrow_date, return_date, status) VALUES (?, ?, ?, ?, ?)"; try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, record.getBookId()); preparedStatement.setInt(2, record.getUserId()); preparedStatement.setString(3, record.getBorrowDate()); preparedStatement.setString(4, record.getReturnDate()); preparedStatement.setString(5, record.getStatus()); int rowsAffected = preparedStatement.executeUpdate(); return rowsAffected > 0; } catch (Exception e) { e.printStackTrace(); return false; } finally { DBUtil.close(null, preparedStatement, connection); } } /** * 根据用户ID查询借阅记录 * @param userId 用户ID * @return 借阅记录列表 */ @Override public List<Record> getRecordsByUserId(int userId) { List<Record> records = new ArrayList<>(); String sql = "SELECT * FROM borrow_records WHERE user_id = ?"; try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, userId); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { Record record = new Record(); record.setId(resultSet.getInt("id")); record.setBookId(resultSet.getInt("book_id")); record.setUserId(resultSet.getInt("user_id")); record.setBorrowDate(resultSet.getString("borrow_date")); record.setReturnDate(resultSet.getString("return_date")); record.setStatus(resultSet.getString("status")); records.add(record); } } catch (Exception e) { e.printStackTrace(); } finally { DBUtil.close(resultSet, preparedStatement, connection); } return records; } /** * 更新借阅记录状态 * @param id 记录ID * @param status 新的状态 * @return 是否更新成功 */ @Override public boolean updateRecordStatus(int id, String status) { String sql = "UPDATE borrow_records SET status = ? WHERE id = ?"; try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, status); preparedStatement.setInt(2, id); int rowsAffected = preparedStatement.executeUpdate(); return rowsAffected > 0; } catch (Exception e) { e.printStackTrace(); return false; } finally { DBUtil.close(null, preparedStatement, connection); } } /** * 删除借阅记录 * @param id 记录ID * @return 是否删除成功 */ @Override public boolean deleteRecord(int id) { String sql = "DELETE FROM borrow_records WHERE id = ?"; try { connection = DBUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, id); int rowsAffected = preparedStatement.executeUpdate(); return rowsAffected > 0; } catch (Exception e) { e.printStackTrace(); return false; } finally { DBUtil.close(null, preparedStatement, connection); } } } 去掉注解
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值