ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 预处理 ## 预处理对象 使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔。 ~~~ String sql = "insert into sort(sid,sname) values(?,?)";; PreparedStatement预处理对象代码: PreparedStatement psmt = conn.prepareStatement(sql) ~~~ 常用方法: 执行SQL语句: ~~~ int executeUpdate(); --执行insert update delete语句. ResultSet executeQuery(); --执行select语句. boolean execute(); --执行select返回true 执行其他的语句返回false. ~~~ 设置实际参数 `void setXxx(int index, Xxx xx) 将指定参数设置为给定Java的xx值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL Xxx类型值。` 例如: setString(2, "家用电器") 把SQL语句中第2个位置的占位符? 替换成实际参数 "家用电器" ## 预处理对象executeUpdate方法 通过预处理对象的executeUpdate方法,完成记录的insert\update\delete语句的执行。操作格式统一如下: 1. 注册驱动 2. 获取连接 3. 获取预处理对象 4. SQL语句占位符设置实际参数 5. 执行SQL语句 6. 释放资源 ### 插入记录:insert 实现向分类表中插入指定的新分类 ~~~ public void demo01() throws Exception { // 1注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3获得预处理对象 String sql = "insert into sort(sname) values(?)"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL语句占位符设置实际参数 stat.setString(1, "奢侈品"); // 5执行SQL语句 int line = stat.executeUpdate(); System.out.println("新添加记录数:" + line); // 6释放资源 stat.close(); conn.close(); } ~~~ ### 更新记录:update 实现更新分类表中指定分类ID所对应记录的分类名称 ~~~ public void demo02() throws Exception { // 1注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3获得预处理对象中 String sql = "update sort set sname=? where sid=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL语句占位符设置实际参数 stat.setString(1, "数码产品"); stat.setInt(2, 1); // 5执行SQL语句 int line = stat.executeUpdate(); System.out.println("更新记录数:" + line); // 6释放资源 stat.close(); conn.close(); } ~~~ ### 删除记录:delete 实现删除分类表中指定分类ID的记录 ~~~ public void demo03() throws Exception { // 1注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3获得预处理对象 String sql = "delete from sort where sid=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL语句占位符设置实际参数 stat.setInt(1, 1); // 5执行SQL语句 int line = stat.executeUpdate(); System.out.println("删除记录数:" + line); // 6释放资源 stat.close(); conn.close(); } ~~~ ## 预处理对象executeQuery方法 通过预处理对象的executeQuery方法,完成记录的select语句的执行。操作格式统一如下: 1. 注册驱动 2. 获取连接 3. 获取预处理对象 4. SQL语句占位符设置实际参数 5. 执行SQL语句 6. 处理结果集(遍历结果集合) 7. 释放资源 ### 查询记录:select * 实现查询分类表中指定分类名称的记录 ~~~ public void demo05() throws Exception { // 1注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root"); // 3获得预处理对象 String sql = "select * from sort where sname=?"; PreparedStatement stat = conn.prepareStatement(sql); // 4 SQL语句占位符设置实际参数 stat.setString(1, "奢侈品"); // 5执行SQL语句 ResultSet rs = stat.executeQuery(); // 6处理结果集(遍历结果集合) while( rs.next() ){ //获取当前行的分类ID String sid = rs.getString("sid");//方法参数为数据库表中的列名 //获取当前行的分类名称 String sname = rs.getString("sname"); //显示数据 System.out.println(sid+"-----"+sname); } // 7释放资源 rs.close(); stat.close(); conn.close(); } ~~~ * 模糊查询 ~~~ //要这样写 stat.setString(1, "%"+"jdxia"+"%"); ~~~ # 注意 当使用了PreparedStatement的时候最需要注意的是里面的setDate()方法,里面需要是java.sql.Date 不再是java.util.Date 在java.util.Date类下面有三个子类都是在java.sql包中的: ~~~ * java.sql.Date 描述的是日期 * java.sql.Time 描述是时间 * java.sql.Timestamp 描述的是时间戳(日期时间) ~~~ 如果要把java.util.Date变为java.sql.Date(Time,Timestamp)只能依靠long完成 ~~~ * java.util.Date: public long getTime() 可以 把Date变为long * java.sql.Date: public Date(long date) 将long变为sql.Date ~~~ ~~~ Date date = new Date(); new java.sql.Date(date.getTime()); ~~~ 但是sql.Date可以变为util.Date向上转型