Java实现数据库ResultSet的数据转换为Object对象
使⽤原因
我们在进⾏数据库查询的时候,查询出来的结果是ResultSet对象,我们需要⼀⾏⼀⾏的遍历,⽤
Object.String(“xxx”))。如果表的字段⽐较多的话,每次查询都这样写⼯作量就很多拉,⽆疑是浪费时间和精⼒。
解决思路
我们可以让查询的RestultSet对象⼀⾏数据和数据库表对象的实体类Object⼀起传⼊⼀个类中进⾏“加⼯”,把ResultSet中的值通过Object.setXxx⽅法写⼊Object对象中。
实现过程
⼀、创建数据库表
在数据库中创建⼀个Student表作测试
⼆、创建实体类
public class Student {
private String s_sno;
private String s_name;
private String s_age;
public String getS_sno() {
return s_sno;
}
public void setS_sno(String s_sno) {
this.s_sno = s_sno;
}
public String getS_name() {
return s_name;
}
public void setS_name(String s_name) {
this.s_name = s_name;
}
public String getS_age() {
return s_age;
}
public void setS_age(String s_age) {
this.s_age = s_age;
}
}
三、创建加⼯类(主要的是toObject⽅法⽤于ResultSet转换为Object)
import flect.Field;
import flect.Method;
import java.sql.Connection;
object toimport java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
public class DButil {
public static void toObject(ResultSet resultSet , Object object) {
Class<?> c = Class();
Map<String, Object> map=new HashMap<>();
Field[] DeclaredFields();//获取属性数组
for(int i=0;i<fields.length;i++){
try {
System.out.println(fields[i].getName());
map.put(fields[i].getName(), Object(fields[i].getName()));
} catch (SQLException e) {
e.printStackTrace();
}
}
Method[] methods = c.getMethods();//获取对象⽅法
for (Method method : methods) {
if (Name().startsWith("set")) {
String name = Name();
System.out.println(name);
name = name.substring(3, 4).toLowerCase() + name.substring(4, name.length());//获取属性名 System.out.println(name);
if (ainsKey(name)) {
try {
method.invoke(object, (name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
public static Connection getConnection(String driver ,String url ,String user ,String password) { Connection connection = null;
try {
Class.forName(driver);
connection = Connection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
return connection;
}
}
四、测试类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class test {
public static void main(String[] args) {
//("sql.jdbc.Driver", "jdbc:mysql://localhost/ddserver", "root", "");
String driver="sql.jdbc.Driver";
String url="jdbc:mysql://localhost/student";
String user="root";
String password="";
String sql = "select * from students";
Student student = null;
Connection connection = Connection(driver, url, user, password);
try {
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = uteQuery();
()) {
student = new Student();
}
} catch (SQLException e) {
e.printStackTrace();
}
if(student !=null) {
System.out.String());
}
}
}
五、测试结果
六、注意事项
注意:实体类的属性必须和数据库⾥⾯的字段对应,属性的类型也要和数据库对应。属性类型最好使⽤对象类型不要使⽤基本数据类型,⽐如int写成Integer、double写成Double。实体类bi要有get和set⽅法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论