DBTools工具类和DAO工具类
DAO是:Database Access Object 数据库访问对象
在DAO中包括insert,delete,update。get()是用于获取结果集中只有一条记录的方法。getForList()是用于获取结果集中有多条记录的方法。而getForValue()用于获取结果集中只有一列的方法(比如想要获取数据库表中的某一列,COUNT(*),MAX(columnName)等)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* JDBC工具类
* 包含数据库连接及关闭数据库资源
*/
public class DBTools {
static Connection connection = null;
static PreparedStatement preparedStatement = null;
static ResultSet resultSet = null;
private final static String DB_URL = "jdbc:mysql://localhost:3306/dbs?useSSL=false";
private final static String DB_USER = "root";
private final static String DB_PASSWORD = "13579";
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = (Connection)DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
} catch (Exception e) {
System.out.println("加载驱动失败!");
e.printStackTrace();
}
return connection;
}
public static void close(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet) {
if(resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
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 org.apache.commons.beanutils.BeanUtils;
public class DAO {
// 插入,更新,删除操作都可以包含其中
public void update(String sql, Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = DBTools.getConnection();
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
DBTools.close(connection, preparedStatement, null);
}
}
// 查询一条记录,返回对应的对象
public T get(Class clazz, String sql, Object... args) {
List result = getForList(clazz, sql, args);
if (result.size() > 0) {
return result.get(0);
}
return null;
}
/**
* 传入SQL语句和class对象,查询多条记录,返回对应的对象的集合
*
* @param clazz 对象的类型
* @param sql SQL语句
* @param args 填充SQL语句的占位符可变参数
* @return 对象的集合
*/
public List getForList(Class clazz, String sql, Object... args) {
List list = new ArrayList<>();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 1. 得到结果集
connection = DBTools.getConnection();
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
resultSet = preparedStatement.executeQuery();
// 2.处理结果集,得到Map的List,其中一个Map对象就是一条记录
// Map的key为resultSet中的列名,value为列的值
List
其中的一些类及方法
使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象您可以使用此对象获得列的数目和类型以及每一列的名称。
getColumnCount(); 返回 ResultSet 中的列数。
getColumnName(int); 返回列序号为 int 的列名。
getColumnLabel(int); 返回此列暗含的标签。
调用PreparedStatement的setXxx(int index,Object val)设置占位符的值,其中index的值从1开始
Map是java中的接口,Map.Entry是Map的一个内部接口。java.util.Map.Entry接口主要就是在遍历map的时候用到。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。