Java 将ResultSet获取到私有字符串的最快方法?
我有一个类,它在每次操作发生时都会运行,例如,我登录并运行User类。该类被传递一个包含该特定用户信息的Java 将ResultSet获取到私有字符串的最快方法?,java,Java,我有一个类,它在每次操作发生时都会运行,例如,我登录并运行User类。该类被传递一个包含该特定用户信息的ResultSet 现在我要做的是得到结果并将它们分割成“类变量”(我相信它们被称为字段)。我尝试了以下方法: public User(ResultSet resultSet) throws SQLException { this.username = resultSet.getString("username"); this.firstname = resultSet.get
ResultSet
现在我要做的是得到结果并将它们分割成“类变量”(我相信它们被称为字段)。我尝试了以下方法:
public User(ResultSet resultSet) throws SQLException {
this.username = resultSet.getString("username");
this.firstname = resultSet.getString("firstname");
// etc etc.
}
这是可行的,但因为我有大约24个元素在里面,这将成为一个很长的列表
我还想到了一个方法,在这个方法中,我会查看结果,然后检查它是否是字符串。如果是,则将其分配给一个名称与键对应的变量,但这将把我的问题减少一半,因为我仍然需要声明所有这些变量
我想知道是否有一种更快,也许更优雅的方法来处理这样的事情
谢谢。您可以为从数据库检索到的每种类型的信息创建一个类。您为用户信息创建了一个用户类。数据库表创建Java对象没有捷径,除非使用类似ORM的工具。我最近一直在开发一个简单的工具来实现这一点。它接受一个
映射和一个类,并返回该类的一个实例。请看下面的例子。如果使用Maven,只需添加一个依赖项:
<dependency>
<groupId>uk.co.jpawlak</groupId>
<artifactId>map-to-object-converter</artifactId>
<version>1.1</version>
</dependency>
uk.co.jpawlak
映射到对象转换器
1.1
当然,这需要您首先将ResultSet
转换为Map
,但是这非常简单,您只需编写一次代码。没有现成的工具可以帮助您完成类似的任务。
有两种方法可以做到这一点
如果您愿意花时间和精力配置和设置框架,并根据需要更新对象,那么使用ORM将是最佳选择李>
使用Java反射和ResultSetMetaData将resultSet直接映射到对象是另一种选择。类似这样的东西
如果您足够幸运,能够使对象的字段名与sql列名完全匹配(如示例中所示),您可以编写如下代码
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
...
private void getUserDetails(ResultSet resultSet) throws SQLException, NoSuchFieldException,
SecurityException, IllegalArgumentException, IllegalAccessException {
ResultSetMetaData rsmd = resultSet.getMetaData();
while (resultSet.next()) {
int i = rsmd.getColumnCount();
while (i-- > 0) {
// *this* being the user object
String colName = rsmd.getColumnName(i);
Field field = this.getClass().getDeclaredField(colName);
field.set(this, resultSet.getObject(colName));
}
}
}
不知道你想做什么。您试图解决的性能问题是什么?听起来好像您试图在成功登录后收集用户信息。“这是对的吗?”安德烈亚斯:对不起,我把问题的格式弄错了一点。现在更清楚了吗?我建议您将局部变量set
更改为类似resultSet
或rs
的其他变量,因为set
非常混乱。如果我理解正确,您可以为从数据库检索到的每种类型的信息创建一个类。您为用户信息创建了一个用户类。除非您使用类似Hibernate的ORM,否则数据库表没有创建Java对象的快捷方式。