/*
* Created on 13-5-25
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*
* Copyright @2013 the original author or authors.
*/
package org.cneng.pool.dbutils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.ProxyFactory;
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.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet;
import org.apache.commons.lang.StringUtils;
import org.cneng.pool.model.Student;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
/**
* 利用DBUtils测试数据库的修改
* <p/>
* (2)org.apache.commons.dbutils.handlers
* ArrayHandler :将ResultSet中第一行的数据转化成对象数组
* ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
* BeanHandler :将ResultSet中第一行的数据转化成类对象
* BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
* ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
* KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
* MapHandler :将ResultSet中第一行的数据存成Map映射
* MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
* ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
* <p/>
* (3)org.apache.commons.dbutils.wrappers
* SqlNullCheckedResultSet :该类是用来对sql语句执行完成之后的的数值进行null的替换。
* StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
*
* @author XiongNeng
* @version 1.0
* @since 13-5-25
*/
public class ExampleJDBC {
private static final Logger log = LoggerFactory.getLogger(ExampleJDBC.class);
public static void main(String[] args) {
JdbcUtil.initDataSourcePool();
ComboPooledDataSource ds = ((ComboPooledDataSource)JdbcUtil.getDataSource());
ds.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8");
ds.setUser("root");
ds.setPassword("123456");
getBeanListData();
}
/**
* BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
*/
public static void getBeanListData() {
Connection conn = getConnection();
QueryRunner qr = new QueryRunner();
try {
ResultSetHandler<Student> rsh = new BeanHandler(Student.class);
Student usr = qr.query(conn, "SELECT id, name, gender, age, team_id as teamId FROM test_student WHERE id=1", rsh);
System.out.println(StringUtils.center("findById", 50, '*'));
System.out.println("id=" + usr.getId() + " name=" + usr.getName() + " gender=" + usr.getGender());
List<Student> results = (List<Student>) qr.query(conn, "SELECT id, name, gender, age, team_id as teamId FROM test_student LIMIT 10",
new BeanListHandler(Student.class));
System.out.println(StringUtils.center("findAll", 50, '*'));
for (Student result : results) {
System.out.println("id=" + result.getId() + " name=" + result.getName() + " gender=" + result.getGender());
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
/**
* MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
*/
public static void getMapListData() {
Connection conn = getConnection();
QueryRunner qr = new QueryRunner();
try {
List results = (List) qr.query(conn, "SELECT id, name, gender, age, team_id FROM test_student", new MapListHandler());
for (Object result : results) {
Map map = (Map) result;
System.out.println("id=" + map.get("id") + " name=" + map.get("name") + " gender=" + map.get("gender"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
/**
* 新增和更新例子
*/
public static void insertAndUpdateData() throws SQLException {
Connection conn = getConnection();
QueryRunner qr = new QueryRunner();
try {
//创建一个数组来存要insert的数据
Object[] insertParams = {"John Doe", "男", 12, 3};
int inserts = qr.update(conn, "INSERT INTO test_student(name,gender,age,team_id) VALUES (?,?,?,?)", insertParams);
System.out.println("inserted " + inserts + " data");
Object[] updateParams = {"John Doe Update", "John Doe"};
int updates = qr.update(conn, "UPDATE test_student SET name=? WHERE name=?", updateParams);
System.out.println("updated " + updates + " data");
} catch (SQLException e) {
e.printStackTrace();
conn.rollback();
} finally {
DbUtils.close(conn);
}
}
/**
* Unlike some other classes in DbUtils, this class(SqlNullCheckedResultSet) is NOT thread-safe.
*/
public static void findUseSqlNullCheckedResultSet() {
Connection conn = getConnection();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name, gender, age, team_id as teamId FROM test_student");
SqlNullCheckedResultSet wrapper = new SqlNullCheckedResultSet(rs);
wrapper.setNullString("N/A"); // Set null string
rs = ProxyFactory.instance().createResultSet(wrapper);
while (rs.next()) {
System.out.println("id=" + rs.getInt("id") + " username=" + rs.getString("name")
+ " gender=" + rs.getString("gender"));
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
/**
* *数据库连接***
*/
public static Connection getConnection() {
try {
return JdbcUtil.getConnection();
} catch (Exception e) {
log.error("获取数据库连接错误", e);
return null;
}
}
}