一个包含增删改查的DBhelper
我的实现方法通过注释的方式记录
可以用于练习写DBHleper,也可以直接拿去用
自己的实现方式,欢迎指正与交流
package com.yc.utils;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSetMetaData;
public class DBHelper {
//1.加载驱动 Class.forName("驱动路径");
//2.获取连接 Connection conn = DriverManager.getConnection(url, user,password );
//3.获取预编译语句 PreparedStatement ps = conn.preparedStatement(sql);
//4.获取返回集对象(相当于一行一行的数据) ResultSet rs = ps.executeQuery();
//5.获取结果集结构(相当于一列一列的表头) ResultSetMetaData rsmd = rs.getMetaData();
//6.将查询出来的结果返回
private static String url="jdbc:mysql://localhost:3306/student"; //student-->>[需要连接的数据库名]
private static String user="root";
private static String password="a";
/**
* 通过静态块加载驱动
*/
static {
try {
Class.forName("com.mysql.jdbc.Driver.class");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return (Connection) DriverManager.getConnection(url, user, password);
}
/**
* 查询多条数据
* @param sql SQL语句
* @param params 传入参数
* @return
*/
public static List<Map<String,Object>> selectList(String sql,Object... params){
Connection conn = null;
try {
//获取连接
conn=getConnection();
//获取预编译对象PreparedStatement
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
//加载参数
for(int i=0;i<params.length;i++){
//需要注意 加载参数的时候下标从1开始
ps.setObject(i+1, params[i]);
}
//获取结果集对象(相当于一行一行的数据
ResultSet rs = ps.executeQuery();
//获取结果集结构(相当于一列一列的表头
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
//创建一个用于返回的List集合
List<Map<String,Object>> ret = new ArrayList<Map<String,Object>>();
//如果下一行还有数据
while(rs.next()){
//用于保存查到的一行的数据
Map<String,Object> row = new LinkedHashMap<String,Object>();
for(int i=0 ; i< rsmd.getColumnCount();i++){
// 获取列名
String columnName = rsmd.getColumnName(i+1);
// 将列名 列值 存入row中
// rs.getObject(column) 通过列名获取到值
row.put(columnName, rs.getObject(columnName));
}
//将一行的数据保存到List集合中
ret.add(row);
}
//将查询的结果返回
return ret;
} catch (SQLException e) {
throw new RuntimeException("SQL执行错误", e);
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 数据库的修改删除操作
* @param sql SQL语句
* @param params 传入的参数
* @return
*/
public static int update(String sql,Object... params){
Connection conn=null;
try {
//获取连接
conn=getConnection();
//获取预编译对象PreparedStatement
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
//加载参数
for(int i=0;i<params.length;i++){
//需要注意 加载参数的时候下标从1开始
ps.setObject(i+1, params[i]);
}
// ps.executeUpdate(); 执行SQL语句 返回值是int类型的数值 表示收到影响的行数
return ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}