1. 简单介绍
大多数Java程序员的主要工作重心基本上都在Web开发上,而在Web端,已经有了与各大框架集成的数据库连接池,只要简单配置即可在程序中使用。但是也有一部分Java程序员从Web端转向了大数据方面的工作。很多时候如果将数据导入数据库,然后在该数据库中进行一系列的分析,那么就不可避免的需要从头写一个用于数据库连接的类。作为程序员,“懒惰”是一个很好的习惯,即一次开发,到处运行,为了提高开发效率,我们都希望这次写的代码在下次能够继续使用。出于这样的目的,我在GitHub上开源了一个用于快速开发数据库操作的库:rapid-db-conn,该库使用xml作为配置文件,在数据库配置改变的情况下只需要修改xml文件即可,支持MySQL,Oracle,SQL Server,PostgreSQL这四个主流的数据库,并且封装了常用的增删改查,只要传入SQL语句及相关参数即可调用相应的方法(需要注意的是,此库未加入连接池的功能,故只适合于快速开发,而不适用于Web环境)。rapid-db-conn的GitHub地址为:rapid-db-conn 打包好的jar包的下载地址:rapid-db-conn-v1.0.rar 下载后解压即可。
2.使用方法
2.1前期准备
(1)dom4j的jar包(用于xml的解析)
(2)使用的数据库的Java驱动
(3)准备config.xml,并将其放置在工程的根目录下(config.xml的模板参见:config.xml)
(4)把rapid-db-conn-v1.0.jar引入工程
2.2获取数据库连接
/** * 如果没有引入正确的数据库驱动,或者配置出错,此构造函数会抛出 ClassNotFoundException 或者 SQLException */ Connector connector = new TelaConnector();
/** * 普通版本 */ boolean isInserted = connector.insert(String sql); // assume connector is a Connector object /** * 带参数的版本(即内部使用PreparedStatement实现参数的定向绑定) */ boolean isInserted = connector.insert(String sql, Object[] args); // recommanded
/** * 普通版本 */ boolean isDeleted = connector.delete(String sql); // assume connector is a Connector object /** * 带参数的版本 */ boolean isDeleted = connector.delete(String sql, Object[] args); // recommanded
2.4更新数据
/** * 普通版本 */ boolean isUpdated = connector.update(String sql); // assume connector is a Connector object /** * 带参数的版本 */ boolean isUpdated = connector.update(String sql, Object[] args); // recommanded
/** * 普通版本 */ ResultSet set = connector.select(String sql); // assume connector is a Connector object /** * 带参数的版本 */ ResultSet set = connector.select(String sql, Object[] args); // recommanded
客户端无需关心关闭数据库操作过程中产生的Statement对象的问题,Connector提供了close()方法,只需要在finally程序块中调用close()方法即可关闭所有的Statement对象和数据库连接
Connector connector = null; try { connector = new TelaConnector(); /** * 此处为各种操作 */ } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (connector != null) { connector.close(); } }
当然,如果程序中使用了ResultSet对象,那么在调用Connector的close()方法之前应该先关闭ResultSet对象,Connector不负责关闭ResultSet对象。