Preparestatement 反射创建对象

本文介绍了一个Java项目中用于数据库连接的工具类实现方法,包括获取连接、执行更新操作及资源释放等功能,并提供了一个查询方法的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.hu;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.ResultSetMetaData;

public class Tools {
public static Connection connection=null;
public static PreparedStatement preparedStatement=null;
public static ResultSet resultSet=null;

public static String DriverClass=null;
public static String Url=null;
public static String user=null;
public static String PassWord=null;

static Properties properties=null;
public static Connection getConnection() throws Exception{
InputStream inputStream=Tools.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties=new Properties();
properties.load(inputStream);
DriverClass=properties.getProperty("DriverClass");
Url=properties.getProperty("Url");
user=properties.getProperty("User");
PassWord=properties.getProperty("PassWord");
Class.forName(DriverClass);
connection=DriverManager.getConnection(Url, user, PassWord);
return connection;

}
public static void update(String sql,Object...args) throws Exception{
connection=getConnection();
preparedStatement=(PreparedStatement) connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedStatement.setObject(i+1, args[i]);
}
preparedStatement.executeUpdate();
}
public static void release(Connection connection,PreparedStatement preparedStatement,ResultSet
resultSet,ResultSetMetaData resultSetMetaData){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

 

查询方法的测试方法

public <T> T getT(Class<T> clazz,String sql,Object...args) throws Exception{
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
ResultSetMetaData rsmd=null;
T entity=null;

connection=Tools.getConnection();
preparedStatement=(PreparedStatement) connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedStatement.setObject(i+1, args[i]);
}
resultSet=(ResultSet) preparedStatement.executeQuery();
rsmd=(ResultSetMetaData) resultSet.getMetaData();
Map<String, Object> map=new HashMap<>();
while(resultSet.next()){
for(int i=0;i<rsmd.getColumnCount();i++){
String labelString=rsmd.getColumnLabel(i+1);
Object valueObject=resultSet.getObject(labelString);
map.put(labelString, valueObject);
}
}
if(map.size()>0){
entity=clazz.newInstance();
for(Map.Entry<String, Object> entry:map.entrySet()){
String fieldString=entry.getKey();
Object fieldoObject=entry.getValue();
ReflectionUtils.setFieldValue(entity, fieldString, fieldoObject);
}
}
return entity;

}

 

转载于:https://www.cnblogs.com/afterhours/p/7289847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值