Java 数据库中的行作为字符串(JDBC)

Java 数据库中的行作为字符串(JDBC),java,jdbc,Java,Jdbc,是否有一种直接方法可以从ResultSet获取一行中的所有元素作为字符串?JDBC我必须问一下-为什么您需要这样的东西 不,这是不可能的-无论发生什么情况,您都需要至少调用一次getString()。最好是在SQL中连接字段,例如 SELECT col1 || ', ' || col2 || ', ' || col3 ... FROM my_table 并调用resultSet.next().getString(1)以获取该结果 更新(基于评论) 我不认为(这取决于您的JDBC驱动程序和数据库

是否有一种直接方法可以从ResultSet获取一行中的所有元素作为字符串?JDBC

我必须问一下-为什么您需要这样的东西

不,这是不可能的-无论发生什么情况,您都需要至少调用一次
getString()
。最好是在SQL中连接字段,例如

SELECT col1 || ', ' || col2 || ', ' || col3 ... FROM my_table
并调用
resultSet.next().getString(1)
以获取该结果

更新(基于评论)
我不认为(这取决于您的JDBC驱动程序和数据库,真的-您必须进行测量才能发现)通过列发送数据(从DB到应用程序)与通过一个串联字符串发送数据之间的数据量有很大差异。事实上,如果您有数字/日期,后者可能会更加昂贵,因为它们可能会占用更多格式化为文本的字节。

没有一个方法调用来实现这一点,但您可以使用类似这样的方法来构建字符串:

StringBuilder sb = new StringBuilder();
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for (int i = 1; i <= numberOfColumns; i++) {
    sb.append(rs.getString(i));
    if (i < numberOfColumns) {
        sb.append(", ");
    }
}
String data = sb.toString();
StringBuilder sb=新建StringBuilder();
ResultSetMetaData rsmd=rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();

对于(int i=1;i您可以使用

然后,您将有:

{ id = 1, name = Oscar, lastName = Reyes }
等等

如果您想摆脱columNames:

String s = m.values().toString();

您希望如何表示数据?String data=“value1,value2,value3”但不使用getString(“”)或者类似的方法并连接它们!为什么不连接或使用StringBuffer创建您自己的字符串?谢谢,正在寻找另一种解决方案。顺便说一句,如果您遇到性能问题,请记住,在大多数情况下,问题不在于信息处理,而在于在网络上花费的时间。因此,不要尝试若要调整行处理,您最好弄清楚如何一次发送较少的信息。如果您不相信我,请查看java程序处理2MB或数据与通过网络发送2MB数据需要多少时间。有时要求令人难以置信!但它们仍然存在:)我需要使用tcp/ip套接字逐行输出数据,并正在寻找最有效的解决方案。这会比使用StringBuffer在java端进行连接更有效吗?如果您想让它们真正发挥性能,我建议使用存储过程,并以clob/blob或任何应用程序的形式返回整个过程。但是您是在从应用程序中流式传输数据,对吗?从ResultSet字段逐字段读取它,并用Java将其格式化为字符串。它可能比在DB端进行连接要快,也可能不快(只有评测会告诉我们),但肯定会更干净。例如,我想到了数字/日期格式等问题。@NobodyMan-老实说吧。你没有投我反对票的原因是因为你在65岁的时候名声不好:-)这对一个讽刺的评论来说怎么样?我的回答是一个问题;但我会编辑它,使它少…嗯。。。为了澄清这是一个给定的、严格的要求,还是仅仅是提问者头脑中突然出现的第一个可能的方法,询问一个给定的解决方案的潜在原因是完全有效的。在后一种情况下,其他可能的方法可能要好得多。虽然我非常同意你关于:数据吞吐量与处理时间的评论,但我必须说,我发现
BasicRowProcessor.toMap()
(以及访问该映射的后续代码)是大数据集上的绝对性能杀手
toArray()
更好,原始结果集访问更好。这非常接近,但需要稍微调整。它应该在while(rs.next())中包装
String s = m.values().toString();