对JDBC的封装
1.首先创建一个properties文件***jdbc.properties***,用来设置数据库连接参数:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///weixin
jdbc.user:root
jdbc.password:root
2.创建一个工具类PropertUtil用于读取配置文件并获取数据import
java.util.ResourceBundle;
public class PropertUtil {
static ResourceBundle resource;
static{
resource = ResourceBundle.getBundle("jdbc");
}
public static String getValueByKey(String key){
return resource.getString(key);
}
}
3.创建一个常量类***Constants*** ,获取通过上面的工具类获取数据库链接信息
package jdbc.util;
public class Constants {
public static final String JDBC_DRIVER = PropertUtil.getValueByKey("jdbc.driver");
public static final String JDBC_URL = PropertUtil.getValueByKey("jdbc.url");
public static final String JDBC_USER = PropertUtil.getValueByKey("jdbc.user");
public static final String JDBC_PASSWORD = PropertUtil.getValueByKey("jdbc.password");
}
4.增删改查操作的封装
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;
public class JdbcUtil {
/**
* 类加载时加载数据库驱动
*/
static{
try {
Class.forName(Constants.JDBC_DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("驱动加载失败!");
e.printStackTrace();
}
}
/**
* 获取数据库连接的方法
* @return 数据库连接对象conn
*/
private static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(Constants.JDBC_URL, Constants.JDBC_USER, Constants.JDBC_PASSWORD);
} catch (SQLException e) {
System.out.println("获取连接失败!");
e.printStackTrace();
}
return conn;
}
/**
* 执行更新操作(插入、修改、删除)
* @param sql 要执行的SQL语句
* @param params SQL语句预编译参数(如无可省略)
* @return rows 影响的行数
*/
public static int executeUpdate(String sql,Object...params){
Connection conn = getConnection();
PreparedStatement ps = null;
int rows=0;
try {
ps = getConnection().prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
rows = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
closeResource(conn, ps, null);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return rows;
}
/**
* 执行查询操作
* @param sql 要执行的查询sql语句
* @param params SQL语句预编译参数(如无可省略)
* @return list 结果集,每一条结果为所有查询的字段名和字段值为键值对的Map集合
*/
public static List<Map<String, Object>> executeQuery(String sql,Object...params){
Connection conn = getConnection();
PreparedStatement ps=null;
ResultSet set=null;
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
ps = conn.prepareStatement(sql);
if(params!=null&¶ms.length>0){
for(int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
set = ps.executeQuery();
ResultSetMetaData rsmd = set.getMetaData();
int columnCount = rsmd.getColumnCount();
while(set!=null&&set.next()){
Map<String,Object> map = new HashMap<String,Object>();
for(int i=1;i<=columnCount;i++){
map.put(rsmd.getColumnName(i), set.getObject(i));
}
list.add(map);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
closeResource(conn,ps,set);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
/**
* 释放资源
* @param conn Connection对象
* @param ps PreparedStatement对象
* @param rs ResultSet对象
* @throws SQLException
*/
private static void closeResource(Connection conn,PreparedStatement ps,ResultSet rs) throws SQLException{
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}
}
5.测试
插入测试:
查询测试:
附上源码链接:链接: 百度网盘地址 密码: sqrc