package com.itemutils.jdbc;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
/**
-
@Author zbf
-
@DATA 2019/9/1 14:38
-
@ClassIntroduction 原生jdbc的实现
/
public class UseJDBCUtil {
/*- 修改数据库的链接对象
- @param sql sql语句
- @return
*/
public static int updateEntity(String sql){
Connection conn=null;
PreparedStatement pr=null;
int update=0;
try {
//加载驱动
Class.forName(JDBCConstant.DB_DRVIER);
//创建连接
conn = DriverManager.getConnection(JDBCConstant.DB_URL, JDBCConstant.DB_USER, JDBCConstant.DB_PASSWORLD);
conn.setAutoCommit(false);
//预编译SQL
pr = conn.prepareStatement(sql);
//执行sql
update= pr.executeUpdate();
//提交更改
conn.commit();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pr.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return update;
}
/**
- 查询单个对象
- @param sql sql
- @param tClass 需要查询的对象
- @param
- @return
*/
public static T getEntity(String sql,Class tClass){
return getRestult(sql,tClass).get(0);
}
/**
-
查询全部需要的集合对象
-
@param sql 查询的sql
-
@param tClass 需要返回的对象
-
@param 返回的对象实体
-
@return
*/
public static ArrayList getRestult(String sql, Class tClass){
//装结果的集合
ArrayList resUlt = new ArrayList<>();
//连接对象
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
//注册驱动,利用反射机制加载
Class.forName(JDBCConstant.DB_DRVIER);
//获得连接对象
con = DriverManager.getConnection(JDBCConstant.DB_URL, JDBCConstant.DB_USER, JDBCConstant.DB_PASSWORLD);
//需要执行的SQL
ps= con.prepareStatement(sql);
//获得结果集
rs= ps.executeQuery();
//获得结果集的元素对象
ResultSetMetaData metaData = rs.getMetaData();
//获得结果的元素个数
int columnCount = metaData.getColumnCount();
//获得对象的属性数组
Field[] fields = tClass.getFields();
//构造业务函数
while (rs.next()){
//获得对象
T t = tClass.newInstance();
//循环结果属性
for (int i=1;i<columnCount;i++){
//获得结果
Object obj = rs.getObject(i);
//对象属性集合
for (int j=0;j<fields.length;j++){
Field field = fields[j];
//判断是否对应
if (field.getName().equals(metaData.getCatalogName(i))){
boolean accessible = field.isAccessible();
field.setAccessible(true);
field.set(t,obj);
field.setAccessible(accessible);
}
}
}
resUlt.add(t);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} finally { //关闭连接
try {
rs.close();
ps.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}}
return resUlt;
}
}