DbUtils使用

jopen 12年前發布 | 46K 次閱讀 DbUtils 持久層框架

前言

 本文介紹了如何使用apache dbutils。主要以測試代碼介紹。本文的代碼使用了dbcp,請參見文章:dbutils與dbcp整合

使用代碼

1.更新操作(insert、update、delete),使用update方法完成:

  int update(String sql)int update(String sql, Object... params) 

  int update(String sql, Object param) 

  參數:sql:為需要執行的sql語句,

    params為參數

示例:

runner.update("delete from user where userName=?","用戶名");

int rowEffects = runner.update("insert into user(userName,password,comment) values(?,?,?)", "用戶名","密碼","備注");</pre>

2.查詢結果 

dbutils支持返回以下類型的結果:

   ArrayHandler :將結果集中第一行的數據轉化成對象數組。返回值類型:Object[]

   ArrayListHandler將結果集中所有的數據轉化成List。返回值類型:List<Object[]>

   BeanHandler :將Object中第一行的數據轉化成類對象。返回值類型:T

   BeanListHandler :將Object中所有的數據轉化成List,List中存放的是類對象。返回值類型:List<T>

   ColumnListHandler :將Object中某一列的數據存成List,List中存放的是 Object對象。返回值類型:List<Object>

   KeyedHandler :將Object中存成映射,key為某一列對應為Map。Map中存放的是數據。Map<關鍵字字段值,map<列名,字段值>>返回值類型:Map<Object,Map<String,Object>>

   MapHandler :將結果集中第一行的數據存成Map<列名,字段值>映射。返回值類型:Map<String,Object>

   MapListHandler :將結果集中所有的數據存成List。List中存放的是Map<列名,字段值>。返回值類型:List<Map<String,Object>>

   ScalarHandler :返回結果集中的第一行的指定列的一個值。返回值類型:Object
</div>

//返回ArrayHandler結果,第一行結果:Object[]
System.out.println("返回ArrayHandler結果......");
Object[] arrayResult = runner.query("select * from user", new ArrayHandler());
for (int i = 0; i < arrayResult.length; i++) {
    System.out.print(arrayResult[i] + "    ");
}
System.out.println();

//返回ArrayListHandler結果,第一行結果:List<Object[]> System.out.println("返回ArrayListHandler結果........."); List<Object[]> arrayListResult = runner.query("select * from user", new ArrayListHandler()); for (int i = 0; i < arrayListResult.size(); i++) { for (int j = 0; j < arrayListResult.get(i).length; j++) { System.out.print(arrayListResult.get(i)[j]+" "); } System.out.println(); } System.out.println();

//返回bean User user = runner.query("select * from user where userId=?", 1,new BeanHandler<User>(User.class)); Assert.assertEquals(user.getUserName(), "用戶名");

//返回beanlist System.out.println("返回BeanList結果......"); List<User> beanListResult = runner.query("select * from user", new BeanListHandler(User.class)); Iterator<User> iter_beanList = beanListResult.iterator(); while(iter_beanList.hasNext()){ System.out.println(iter_beanList.next().getUserName()); }

//返回指定列 System.out.println("返回ColumnList結果......"); List<Object> columnResult = runner.query("select * from user",new ColumnListHandler("userName")); Iterator<Object> iter = columnResult.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); }

//返回KeyedHandler結果:Map<Object,Map<String,Object>>:map的key為KeyedHandler指定 System.out.println("返回KeyedHandler結果........."); Map<Object, Map<String, Object>> keyedResult = runner.query("select * from user", new KeyedHandler("userName")); System.out.println(keyedResult.get("用戶名").get("userId"));

//MapHandler System.out.println("返回MapHandler結果........."); Map<String, Object> mapResult = runner.query("select * from user", new MapHandler()); Iterator<String> iter_mapResult = mapResult.keySet().iterator(); while (iter_mapResult.hasNext()) { System.out.print(mapResult.get(iter_mapResult.next())+" "); } System.out.println();

//返回MapListHandler結果 System.out.println("返回MapListHandler結果........."); List<Map<String,Object>> mapListResult = runner.query("select * from user", new MapListHandler()); for(int i=0;i<mapListResult.size();i++){ Iterator<String> values = mapListResult.get(i).keySet().iterator(); while(values.hasNext()){ System.out.print(mapListResult.get(i).get(values.next())+" "); } System.out.println(); }

Object increaseId=runner.query("select last_insert_id()", new ScalarHandler()); System.out.println(increaseId);</pre>

附:其他代碼

數據庫代碼
</div>

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `comment` varchar(250) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `userName` varchar(20) NOT NULL,
  `userId` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('備注', '密碼', '用戶名', '1');
INSERT INTO `user` VALUES ('備注2', '密碼2', '用戶名2', '7');

User.java

package com.dbutils.model;

public class User { private int userId; private String userName; private String password; private String comment;

public int getUserId() {
    return userId;
}
public void setUserId(int userId) {
    this.userId = userId;
}
public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String getComment() {
    return comment;
}
public void setComment(String comment) {
    this.comment = comment;
}

}</pre>

DbHelper.java </div>

package com.dbutils.common;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbutils.QueryRunner;

public class DbHelper { private static DataSource dataSource; private DbHelper(){ }

public static QueryRunner getQueryRunner(){
    if(DbHelper.dataSource==null){
        //配置dbcp數據源
        BasicDataSource dbcpDataSource = new BasicDataSource();
        dbcpDataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull");
        dbcpDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dbcpDataSource.setUsername("root");
        dbcpDataSource.setPassword("1234");
        dbcpDataSource.setDefaultAutoCommit(true);
        dbcpDataSource.setMaxActive(100);
        dbcpDataSource.setMaxIdle(30);
        dbcpDataSource.setMaxWait(500);
        DbHelper.dataSource = (DataSource)dbcpDataSource;
        System.out.println("Initialize dbcp...");
    }
    return new QueryRunner(DbHelper.dataSource);
}

}</pre>

</div> 原文地址:http://www.cnblogs.com/wushiqi54719880/archive/2011/06/23/2088022.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!