流程:
封装增删
1.获取数据类连接对象 从另个工具类获取
(封装的JdbcUtils类中获取)
2.预处理搬运工对象,去处理sql对象
3.参数赋值
4.循环赋值
5.执行sql语句
封装查询
1.连接数据库获取对象
2.获取搬运工对象
3.获取参数个数
4.对?赋值5.执行sql语句
6.创建新的集合
7.获取元数据通过元数据获取自字段个数和字段名
8.通过元数据获取对象字段的个数
9.遍历数据10.通过Class对象获取对应的类对象
11.获取字段
12.通过字段获取值
13.获取数据库数据后将数据赋值给一个对象
得有一个类
14.每while一次循环一次存到集合里
15.关闭资源
public int update(String sql, Object[] parameters) {
/**
* sql 传入sql语句
* parameters 对sql的?进行赋值
* 受影响的行数
*/
//1.获取数据类的连接对象 从另个工具类去获取
Connection connection = JdbcUtil.getConnection();
//2.预处理搬运工对象,去预处理sql对象
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection.prepareStatement(sql);
//3.参数赋值
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//4.循环赋值
if (parameters != null && parameters.length == parameterCount) {
for (int i = 1; i <= parameterCount; i++) {
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.执行sql语句
int i = preparedStatement.executeUpdate();
return i;
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(preparedStatement, connection);
}
return 0;
}
//查!!!(重点)
//不清楚查出来的数据是什么,用泛型
//Class<T> class 通过构造方法反射出对象赋值
public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) {
//1.连接数据库对象获取
Connection connection = JdbcUtil.getConnection();
//2.获取预处理的搬运工对象
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = connection.prepareStatement(sql);
//3.获取参数个数
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
//4.对?赋值
if (parameters != null && parameters.length == parameterCount) {
for (int i = 1; i <= parameterCount; i++) {
preparedStatement.setObject(i, parameters[i - 1]);
}
}
//5.执行sql语句
resultSet = preparedStatement.executeQuery();
//6.创建新的集合
ArrayList<T> list = new ArrayList<>();
//7.获取元数据,通过元数据获取字段的个数和字段的名字
ResultSetMetaData metaData = resultSet.getMetaData();
//8.通过元数据获取对象字段的个数
int columnCount = metaData.getColumnCount();
//9.遍历数据
while (resultSet.next()) {//往下遍历每一行的数据
//10.通过Class对象获取对应的类对象
//相当于new了个work对象
T t = cls.getConstructor(null).newInstance(null);
for (int i = 1; i <= columnCount; i++) {//获取字段
//11.获取列名
String columnName = metaData.getColumnName(i);
//System.out.println(columnName);
//12.通过字段获取值
Object value = resultSet.getObject(columnName);
System.out.println(value);
//13.获取数据库数据之后将数据赋值一个对象,得有个类
//BeanUtils.setProperty(对象,属性,值)
BeanUtils.setProperty(t,columnName,value);
}
//14.每while一次循环一次存到集合里
list.add(t);
}
return list.size() != 0 ? list : null;
} catch (Exception e) {
e.printStackTrace();
}finally {
//15.关闭资源
JdbcUtil.close(resultSet,preparedStatement,connection);
}
return null;
}
}