日期:2014-05-16  浏览次数:20403 次

Dbutil 使用总结

增删改查,想必是每个程序员都会遇到的数据库操作。 作为java程序员来说,同样如此,而且操作的手段可多了。 比如 JDBC,Hiberante, Ibaties等等。
JDBC 太啰嗦了,现在鲜有人写,Hiberante 太复杂, Ibaties居于2者之间。 有没有更简单的? 无需配置,轻量级,编写简单,易学易用?我想 Dbutils 就是。

官方网站: http://commons.apache.org/dbutils/

对 DBUtils 的感觉,优点与不足,看我一一道来:
1. 让我爱上DBUtils的原因是因为它很小,涉及面不多,会jdbc就会它,学习成本几乎为0,仿照官网的例子上手只要5分钟,简单才是王道。

2. 没有那么多异常处理的烦恼,当年学JDBC给我的第一映像就是一层又一层的try…catch….

3. 包装结果集,你有我也有,让大量的包装实现(将结果集转换成List,Array,Map,javabean….)代码化为乌有。代码看看谁比谁清爽。而且可以自定义。ibaties还需要配置

4. 性能,用什么操作数据库最快:JDBC。 而DBUtils,就是JDBC的简单封装。

5. 关连查询,尤其是一对多。其实Hiberante和ibaties也是分2步骤查询的。优势也没多大

6. 插入数据主键返回,这点在实现上不足。我记得ibaties也是在执行完成插入之后,又执行了“SELECT @@IDENTITY AS ID” 的操作。同样,这里也可以在执行完成后,执行SELECT LAST_INSERT_ID()获得自增主键。这里或者干脆自己写一个,怎么写?等一会就列出来。

/**
? ? ?* 插入数据库,返回自动增长的主键
? ? ?*
? ? ?* @param sql -
? ? ?* ? ? ? ? ? ?执行的sql语句
? ? ?* @return 主键
? ? ?*/

? ? public int insertForKey(String sql, Object[] params) {
? ? ? ? int key = 0;

? ? ? ? try {
? ? ? ? ? ? PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

? ? ? ? ? ? ParameterMetaData pmd = statement.getParameterMetaData();
? ? ? ? ? ? if (params.length < pmd.getParameterCount()) {
? ? ? ? ? ? ? ? throw new SQLException("Too many parameters: expected " + pmd.getParameterCount() + ", was given " + params.length);
? ? ? ? ? ? }

? ? ? ? ? ? for (int i = 0; i < params.length; i++) {
? ? ? ? ? ? ? ? statement.setObject(i + 1, params[i]);
? ? ? ? ? ? }

? ? ? ? ? ? statement.executeUpdate();
? ? ? ? ? ? ResultSet resultSet = statement.getGeneratedKeys();
? ? ? ? ? ?