通过静态方法加载类路径
/**
* 获取连接
*/
static{
try {
//初始化数据库配置参数
Properties prop=new Properties(); //Map的子类
//获取类加载器
ClassLoader classLoader =DBHelper.class.getClassLoader();
//读取项目根目录的配置文件
InputStream in =classLoader.getResourceAsStream("jdbc.properties");
if(in==null) {
throw new IOException("配置文件不存在");
}
prop.load(in);
driver=prop.getProperty("driver");
url=prop.getProperty("url");
user=prop.getProperty("user");
password=prop.getProperty("password");
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new RuntimeException("数据库驱动加载失败!",e);
}catch(IOException e) {
throw new RuntimeException("数据库配置文件 jdbc.properties 加载失败!",e);
}
}
jdbc 配置文件
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@//ip/orcl
user=用户名
password=密码
把获取数据库连接做成一个方法
public static Connection getConnection() throws SQLException {
try {
return DriverManager.getConnection(url, user, password);
} catch (Exception e) {
//异常转型==>异常链
throw new RuntimeException(e);
}//获取类路径
}
封装增删改数据库的方法
public static int update(String sql, Object... params) throws SQLException {
try(Connection conn=getConnection()){
//构建语句对象
PreparedStatement ps=conn.prepareStatement(sql);
//设置参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1, params[i]);
}
//执行语句
System.out.println(sql);
return ps.executeUpdate();
}
}
封装查询多行结果集方法
public static List<Map<String, Object>> selectListMap(String sql, Object... params) throws SQLException {
try(Connection conn=getConnection()){
//构建语句对象
PreparedStatement ps=conn.prepareStatement(sql);
//设置参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1, params[i]);
}
ResultSet rs=ps.executeQuery();
//返回结果集"元数据"对象
ResultSetMetaData rsmd=rs.getMetaData();
//返回结果集中列的数量
int columnCount = rsmd.getColumnCount();
//创建返回的集合对象
List<Map<String,Object>> list=new ArrayList<>();
while(rs.next()) {
//创建Map对象,LinkedHashMap 为有序
Map<String, Object> row=new LinkedHashMap<>();
for(int i=0;i<columnCount;i++) {
String columnName =rsmd.getColumnName(i+1);
Object columValue =rs.getObject(i+1);
row.put(columnName, columValue);
}
//将改行数据对象存入list集合
list.add(row);
}
System.out.println(sql);
for(Object o:params) {
System.out.print(o+",");
}
System.out.println();
return list;
}
}
封装查询单行数据库结果集方法
/**
* 查询单行数据, 返回Map集合
*/
public static Map<String, Object> selectOneMap(String sql, Object... params) throws SQLException {
try(Connection conn=getConnection()){
//构建语句对象
PreparedStatement ps=conn.prepareStatement( sql,
ResultSet.TYPE_SCROLL_INSENSITIVE, //设置可滚动结果集,当数据库变化时,当前结果集不变
ResultSet.CONCUR_READ_ONLY); //只读结果集,不能用结果集更新数据库中的表
//设置参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1, params[i]);
}
ResultSet rs=ps.executeQuery();
//返回结果集"元数据"对象
ResultSetMetaData rsmd=rs.getMetaData();
//返回结果集中列的数量
int columnCount = rsmd.getColumnCount();
//判断结果集数量是否正确
if(rs.next()==false) {
return null;
}
//在向下走一行
//判断结果集是否大于1
if(rs.next()) {
throw new IllegalStateException("结果集数量大于1");
}
//控制游标回走一行,默认情况下(构造对象中没有加TYPE_SCROLL_INSENSITIVE)结果集不能回走
rs.previous();
//创建Map对象,LinkedHashMap 为有序
Map<String, Object> row=new LinkedHashMap<>();
for(int i=0;i<columnCount;i++) {
String columnName =rsmd.getColumnName(i+1);
Object columValue =rs.getObject(i+1);
row.put(columnName, columValue);
}
System.out.println(sql);
for(Object o:params) {
System.out.print(o+",");
}
System.out.println();
return row;
}
}
如果该文章对您有作用的话,就点个赞吧~