首先介绍一下Dbutils:
Common
Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
补充一下,传统操作数据库的类指的是JDBC(java database
connection:java数据库连接,java的数据库操作的基础API。)。
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。有兴趣的话可以到官网下载:http://commons.apache.org/dbutils/
下面的工具包正是符合了Common Dbutils 的思想
package com.util;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class JdbcUtils
{
// 表示定义数据库的用户名
private final String USERNAME = "root";
// 定义数据库的密码
private final String PASSWORD = "admin";
// 定义数据库的驱动信息
private final String DRIVER = "com.mysql.jdbc.Driver";
// 定义访问数据库的地址
private final String URL = "jdbc:mysql://localhost:3306/mydb";
// 定义数据库的链接
private Connection connection;
// 定义sql语句的执行对象
private PreparedStatement pstmt;
// 定义查询返回的结果集合
private ResultSet resultSet;
public JdbcUtils()
{
try
{
Class.forName(DRIVER);
System.out.println("注册驱动成功!!");
}
catch (Exception e)
{
// TODO: handle exception
}
}
// 定义获得数据库的链接
public Connection getConnection()
{
try
{
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
System.out.println("数据库连接成功");
}
catch (Exception e)
{
// TODO: handle exception
}
return connection;
}
public boolean updateByPreparedStatement(String sql, Listparams)
throws SQLException
{
boolean flag = false;
int result = -1;// 表示当用户执行添加删除和修改的时候所影响数据库的行数
pstmt = connection.prepareStatement(sql);
int index = 1;
// 填充sql语句中的占位符
if (params != null && !params.isEmpty())
{
for (int i = 0; i < params.size(); i++)
{
pstmt.setObject(index++, params.get(i));
}
}
result = pstmt.executeUpdate();
flag = result > 0 ? true : false;
return flag;
}
public Map findSimpleResult(String sql, Listparams)
throws SQLException
{
Map map = new HashMap();
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null && !params.isEmpty())
{
for (int i = 0; i < params.size(); i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();// 返回查询结果
// 获取此 ResultSet 对象的列的编号、类型和属性。
ResultSetMetaData metaData = resultSet.getMetaData();
int col_len = metaData.getColumnCount();// 获取列的长度
while (resultSet.next())// 获得列的名称
{
for (int i = 0; i < col_len; i++)
{
String cols_name = metaData.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (cols_value == null)// 列的值没有时,设置列值为“”
{
cols_value = "";
}
map.put(cols_name, cols_value);
}
}
return map;
}
public List
String cols_name = metaData.getColumnName(i + 1);
Field field = cls.getDeclaredField(cols_name);
//上面的两行红题字就是要求实体类中的属性名一定要和数据库中 的字段名一定要严//格相同(包括大小写),而oracle数据库中一般都是大写的,如何让oracle区分大小写,请看博///文:http: //blog.sina.com.cn/s/blog_7ffb8dd501013xkq.html
package com.util;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class JdbcUtils
{
// 表示定义数据库的用户名
private final String USERNAME = "root";
// 定义数据库的密码
private final String PASSWORD = "admin";
// 定义数据库的驱动信息
private final String DRIVER = "com.mysql.jdbc.Driver";
// 定义访问数据库的地址
private final String URL = "jdbc:mysql://localhost:3306/mydb";
// 定义数据库的链接
private Connection connection;
// 定义sql语句的执行对象
private PreparedStatement pstmt;
// 定义查询返回的结果集合
private ResultSet resultSet;
public JdbcUtils()
{
try
{
Class.forName(DRIVER);
System.out.println("注册驱动成功!!");
}
catch (Exception e)
{
// TODO: handle exception
}
}
// 定义获得数据库的链接
public Connection getConnection()
{
try
{
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
System.out.println("数据库连接成功");
}
catch (Exception e)
{
// TODO: handle exception
}
return connection;
}
public boolean updateByPreparedStatement(String sql, Listparams)
throws SQLException
{
boolean flag = false;
int result = -1;// 表示当用户执行添加删除和修改的时候所影响数据库的行数
pstmt = connection.prepareStatement(sql);
int index = 1;
// 填充sql语句中的占位符
if (params != null && !params.isEmpty())
{
for (int i = 0; i < params.size(); i++)
{
pstmt.setObject(index++, params.get(i));
}
}
result = pstmt.executeUpdate();
flag = result > 0 ? true : false;
return flag;
}
public Map findSimpleResult(String sql, Listparams)
throws SQLException
{
Map map = new HashMap();
int index = 1;
pstmt = connection.prepareStatement(sql);
if (params != null && !params.isEmpty())
{
for (int i = 0; i < params.size(); i++)
{
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();// 返回查询结果
// 获取此 ResultSet 对象的列的编号、类型和属性。
ResultSetMetaData metaData = resultSet.getMetaData();
int col_len = metaData.getColumnCount();// 获取列的长度
while (resultSet.next())// 获得列的名称
{
for (int i = 0; i < col_len; i++)
{
String cols_name = metaData.getColumnName(i + 1);
Object cols_value = resultSet.getObject(cols_name);
if (cols_value == null)// 列的值没有时,设置列值为“”
{
cols_value = "";
}
map.put(cols_name, cols_value);
}
}
return map;
}
public List
String cols_name = metaData.getColumnName(i + 1);
Field field = cls.getDeclaredField(cols_name);
//上面的两行红题字就是要求实体类中的属性名一定要和数据库中 的字段名一定要严//格相同(包括大小写),而oracle数据库中一般都是大写的,如何让oracle区分大小写,请看博///文:http: //blog.sina.com.cn/s/blog_7ffb8dd501013xkq.html