2 DBUtils
2.1 DBUtils执行数据库的增删改
2.1.1:DBUtils执行增删改操作_QueryRunner 步骤:
1:注册驱动
2:获取链接
3: 创建QueryRunner类对象
4: 定义SQL语句(增删改)
5: 调用QueryRunner对象的update方法
6: 释放资源
2.1.2:DBUtils执行Update操作代码_QueryRunner
Remark:使用QueryRunner类下的Update()方法可以完成对数据库的update/detele/insert操作,不能进行select操作
package QueryRunnerDemo; import java.sql.Connection; import java.sql.DriverManager; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; //DBUtils为Apache开发的一个commons-dbutils工具类Jar包 public class QueryRunnerUpdate { public static void main(String[] args) throws Exception { QueryUpdate(); } public static void QueryUpdate() throws Exception { // 1:注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 2:获取链接 String url="jdbc:mysql://服务器ip:3306/Web08"; String username="root"; String password="密码"; Connection con = DriverManager.getConnection(url, username, password); // 3:创建QueryRunner类对象 QueryRunner qr = new QueryRunner(); // 4:写删除的SQL语句 String sql = "UPDATE product SET pname=?, price=? WHERE pid=?;"; //由于占位符可能是string、int,double等类型 所以我们可以用object类型通用代替,建立一个object类型的数组来保存占位符 Object[] p = {"Andy",34.9,"p003"}; // 5:调用QueryRunner方法update 注意(QueryRunne类中的update方法返回值为int类型 提示操作成功的行数 所以不能执行select sql语句) //update(Connection conn, String sql, Object... params) Object... params表示可变参数的Object占位符对象 因为sql语句中可能会有?作为占位符 int row = qr.update(con, sql,p); //object数组p或者字节写入对应的占位符都是一样的 //int row = qr.update(con, sql,"Andy",34.9,"p003"); System.out.println(row); //如果row>0则表示update成功 // 6:释放资源 DbUtils.closeQuietly(con); } } |
2.1.3:DBUtils执行Delete操作代码_QueryRunner
package QueryRunnerDemo; import java.sql.Connection; import java.sql.DriverManager; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; public class QueryRunnerInsert { public static void main(String[] args) throws Exception { InsertSQL("DELETE FROM product WHERE pid='p004';"); } public static void InsertSQL(String sqls) throws Exception { //1:注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2:获取链接 String url="jdbc:mysql://服务器ip:3306/Web08"; String username="root"; String password="密码"; Connection con = DriverManager.getConnection(url, username, password); //3: 创建QueryRunner类对象 QueryRunner qr = new QueryRunner(); //4: 定义SQL语句(增删改) String sql = sqls; //5: 调用QueryRunner对象的update方法 int row = qr.update(con, sql); System.out.println(row); //6: 释放资源 DbUtils.closeQuietly(con); } } |
2.2:DBUtils---QueryRunner实现SQL查询
原理:调用QueryRunner类中的方法query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)来实现对结果集的处理 其中ResultSetHandler<T>为一个接口 我们可以调用它的实现类方法
注意:query的返回值为T 表示泛型 具体返回值会根据结果集处理方式发生变化,例如如果是使用ArrayHandler来处理结果集 query换回的就是Object[]数组
下面是接口ResultSetHandler<T>实现类方法:
ArrayHandler |
将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 |
|
将结果集中第一条记录封装到一个指定的javaBean中。 |
|
BeanListHandler |
将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
将结果集中指定的列的字段值,封装到一个List集合中 |
|
它是用于单数据。例如select count(*) from 表操作。 |
|
MapHandler |
将结果集第一行封装到Map集合中,Key 列名, Value 该列数据 |
MapListHandler |
将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合 |
2.2.1:JDBC Utils 返回connection对象
package cn.itcast.jdbcutil; //自己写的一个JDBCUtils 目的是返回con 数据库链接对象 import java.sql.Connection; import java.sql.DriverManager; public class JDBCUtils { //由于需要返回con对象 所以需要先声明con对象 private static Connection con; static { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://服务器ip:3306/Web08"; String user = "root"; String password = "密码"; //由于是在静态代码块中执行 所以要在前面先声明这个变量 或者对象为static的 如果前面已经声明这个对象是Connection对象 这里再在con前面加Connection Ecliplse会默认两个con为不同的对象 con = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { return con; } } |
2.2.2:ArrayHandler处理QueryRunner对象获得的结果集
需要导入commons.dbutils Jar包
package cn.itcast.ArrayHandler; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.junit.Test; import cn.itcast.jdbcutil.JDBCUtils; public class arrayHandlerDemo { @Test public void ArrayDemo() { //1:获得con对象 Connection con = JDBCUtils.getConnection(); //2:创建QueryRunner对象 QueryRunner qr = new QueryRunner(); //3:处理sql语句 String sql = "SELECT * FROM product WHERE pid=?;"; try { //将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 Object[] arrayHandler = qr.query(con, sql, new ArrayHandler(), "p001"); for (Object object : arrayHandler) { System.out.print(object); } } catch (Exception e) { e.printStackTrace(); } } } |
2.2.3:ArrayListHandler处理QueryRunner对象获得的结果集
package cn.itcast.ArrayHandler; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.junit.Test; import cn.itcast.jdbcutil.JDBCUtils; public class arrayHandlerDemo { @Test public void ArrayDemo() { //1:获得con对象 Connection con = JDBCUtils.getConnection(); //2:创建QueryRunner对象 QueryRunner qr = new QueryRunner(); //3:处理sql语句 String sql = "SELECT * FROM product;"; try { //将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。所以需要先遍历成List集合成Object[]对象 在遍历Object[] List<Object[]> arrayListHandler = qr.query(con, sql, new ArrayListHandler()); for (Object[] objects : arrayListHandler) { for (Object object : objects) { System.out.print(object+" "); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } } |
2.2.4:BeanHandler处理QueryRunner对象获得的结果集
JavaBean封装对象
package cn.itcast.jdbcutil; public class BeanUtils { private String pid; private String pname; private String price; private String category_id; private String name_cid; public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getCategory_id() { return category_id; } public void setCategory_id(String category_id) { this.category_id = category_id; } public String getName_cid() { return name_cid; } public void setName_cid(String name_cid) { this.name_cid = name_cid; } } |
BeanHandler结果集方式处理JDBC查询操作代码
package cn.itcast.ArrayHandler; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.junit.Test; import cn.itcast.jdbcutil.BeanUtils; import cn.itcast.jdbcutil.JDBCUtils; public class BeanHandlerDemo { @Test public void BeanHandlerDemo() throws Exception { Connection con = JDBCUtils.getConnection(); QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM product;"; //将结果集中第一条记录封装到一个指定的javaBean中。 new BeanHandler<BeanUtils>(BeanUtils.class)中 <BeanUtils>表示泛型为BeanUtils对象 BeanUtils beanUtils = qr.query(con, sql, new BeanHandler<BeanUtils>(BeanUtils.class)); System.out.println(beanUtils.getPid()+beanUtils.getPname()+beanUtils.getPrice()); } } |
2.2.5:BeanListHandler处理QueryRunner对象获得的结果集
package cn.itcast.ArrayHandler; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.junit.Test; import cn.itcast.jdbcutil.BeanUtils; import cn.itcast.jdbcutil.JDBCUtils; public class BeanListHandlerDemo { @Test public void beanlistHandler() throws Exception { Connection con = JDBCUtils.getConnection(); QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM product;"; //将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 //qr.query(con, sql, new BeanListHandler<>(BeanUtils.class)); 这一条跟下面一条功能一样 List<BeanUtils> Bean = qr.query(con, sql, new BeanListHandler<BeanUtils>(BeanUtils.class)); for (BeanUtils beanUtils : Bean) { System.out.println(beanUtils.getPid()+beanUtils.getPname()+beanUtils.getPrice()); } } } 加QQ群:764333814(刚成立的新群)免费获取更多资料 |