JDBC----具体项目运用
我的前一篇博客介绍了JDBC的底层(普通的底层,健壮性不如大佬写的jar包好),不过我们写项目时不用每次都自己写一份,这样太浪费时间了。
我们完全可以运用别人写好的代码来添加到我们的项目中:
我一般用阿里巴巴的德鲁伊jar包和Apache的commons-dbutils的jar包,前者用来提供连接池和提供得到连接方法,后者提供对数据库的操作方法。
一、Druid配置:
首先新建一个druid.properties配置文件
内容如下:
url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8 本地数据库链接 username=root 用户名 password=********* 密码 driverClassName=com.mysql.jdbc.Driver 要用的类 initialSize=10 初始连接池数量 maxActive=10 最大连接池数量
德鲁伊得到连接方法(在JDBCUtils中定义):
private static DruidDataSource dataSource; static { //读取jdbc.properties属性配置文件 InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); Properties properties = new Properties(); try { //从流中加载数据 properties.load(inputStream); //创建了数据库连接池 dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection1(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (Exception e) { e.printStackTrace(); } return conn; }
我们首先要在JDBCUtils中定义一个数据源,并且还要写静态代码块,当类加载到内存中时执行静态代码块中的内容
静态代码块中的内容是读取配置文件并且创建数据库连接池给数据源。
getConnection()方法返回JDBCUtils中创建好的连接池中的一个连接。
二、资源的关闭
public static void close(Connection conn) { if(conn != null){ try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
由于我们使用dbutils方法时根本不需要自己自己传入PreparedStatement对象或者是结果集对象,直接关闭连接就好了。
三、DBUtils使用:
我们首先要在JDBCUtils类中添加QueryRunner对象:
private QueryRunner queryRunner = new QueryRunner();
我们之后都是用这个对象来实现对数据库的操作。
增删改操作:
public int update(String sql,Object ...args) { Connection conn = JdbcUtils.getConnection(); try { return queryRunner.update(conn,sql,args); } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return -1; }
我们这里用的都是DBUtils封装好的方法,用起来是相当的爽啊。
查询单条记录操作:
public <T> T queryForOne(Class<T> type,String sql,Object ...args) { Connection conn = JdbcUtils.getConnection(); try { return queryRunner.query(conn,sql,new BeanHandler<T>(type),args); } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return null; }
这里要注意传入query方法中的参数,要传入连接,sql语句,还要注意传入BeanHandler参数,还有查询语句中的参数。
查询多条记录操作:
public <T> List<T> queryForList(Class<T> type,String sql,Object ...args){ Connection conn = JdbcUtils.getConnection(); try { return queryRunner.query(conn,sql,new BeanListHandler<T>(type),args); } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return null; }
查询特殊值的操作:
public Object queryForSingleValue(String sql,Object ...args){ Connection conn = JdbcUtils.getConnection(); try { return queryRunner.query(conn,sql,new ScalarHandler(),args); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.close(conn); } return null; }