public class test {
String url = "jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC&characterEncoding=utf-8";
String user = "root";
String password = "root";
String driver = "com.mysql.jdbc.Driver";
String insert_sql = "insert into user(id,name) values(?,?)";
String select_sql = "select id,name from user WHERE id=? and name=?";
@Test
public void test(){
parameterMetaData(insert_sql,new Object[]{"1","tom"});
List<User> users = resultSetMetaData(select_sql, new Object[]{"1", "tom"}, User.class);
for (User user:users) {
System.out.println(user.toString());
}
}
//参数元数据编写增删改通用方法
public void parameterMetaData(String sql,Object[] params){
try {
//获取数据库连接
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
//获取PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//获取ParameterMetaData参数元数据
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
//获取sql参数的数量
int parameterCount = parameterMetaData.getParameterCount();
//给参数赋值
for(int i=0;i<parameterCount;i++){
preparedStatement.setObject(i+1,params[i]);
}
//执行sql语句
preparedStatement.executeUpdate();
//关闭连接
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//结果集元数据编写查找通用方法
public <T> List<T> resultSetMetaData(String sql, Object[] params, Class<T> clazz){
//创建List保存要查询的数据
List<T> list = new ArrayList<>();
try {
//获取数据库连接
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
//获取PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//获取ParameterMetaData参数元数据
ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
//获取sql参数的数量
int parameterCount = parameterMetaData.getParameterCount();
//给参数赋值
for(int i=0;i<parameterCount;i++){
preparedStatement.setObject(i+1,params[i]);
}
//执行sql语句
ResultSet resultSet = preparedStatement.executeQuery();
//获取ResultSetMetaData结果集元数据
ResultSetMetaData metaData = resultSet.getMetaData();
//通过结果集元数据获取字段数量
int columnCount = metaData.getColumnCount();
//每循环一个代表查询出一条数据,封装一个javabean对象
while(resultSet.next()){
T t = clazz.newInstance();
for(int i=0;i<columnCount;i++){
//通过字段序号获取字段名称
String columnName = metaData.getColumnName(i+1);
//通过字段序号获取字段数据
Object value = resultSet.getObject(i+1);
//结果赋值给javabean对象
Field declaredField = clazz.getDeclaredField(columnName);
declaredField.setAccessible(true);
declaredField.set(t,value);
}
//将javabean保存到List
list.add(t);
}
//关闭连接
resultSet.close();
preparedStatement.close();
connection.close();
//防止内存泄漏
resultSet = null;
preparedStatement = null;
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
class User{
private Integer id;
private String name;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
JDBC编写通用增删改查
猜你喜欢
转载自blog.csdn.net/qq_42239765/article/details/90671652
今日推荐
周排行