以下代码ResultSet
使用JSONArray
和将转换为JSON字符串JSONObject
。
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class ResultSetConverter {
public static JSONArray convert( ResultSet rs )
throws SQLException, JSONException
{
JSONArray json = new JSONArray();
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
int numColumns = rsmd.getColumnCount();
JSONObject obj = new JSONObject();
for (int i=1; i<numColumns+1; i++) {
String column_name = rsmd.getColumnName(i);
if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){
obj.put(column_name, rs.getArray(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
obj.put(column_name, rs.getBoolean(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){
obj.put(column_name, rs.getBlob(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
obj.put(column_name, rs.getDouble(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
obj.put(column_name, rs.getFloat(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
obj.put(column_name, rs.getNString(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
obj.put(column_name, rs.getString(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
obj.put(column_name, rs.getDate(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
obj.put(column_name, rs.getTimestamp(column_name));
}
else{
obj.put(column_name, rs.getObject(column_name));
}
}
json.put(obj);
}
return json;
}
}
由于JIT编译器只是分支和基本测试,因此它可能会使其变得非常快。您可以通过对回调进行HashMap查找来使其更加优雅,但我怀疑这样做会更快。至于记忆,这是非常苗条的。
我以某种方式怀疑此代码实际上是内存或性能的关键瓶颈。您有真正的理由尝试对其进行优化吗?
问题内容: 我正在尝试从Web服务器读取.json文件。 我从服务器接收到的JSON在http://jsonlint.com/上报告无效: 它显示以下测试结果: 在使用PHP解析之前,如何将其转换为VALID JSON? 问题答案: 所有键(preOpen,preClose等)都必须是字符串,因此它们需要用双引号引起来。 ===更新=== 如果您的Json-String无效,则可以使用以下脚本对其
我正在使用以下方法将resultset转换为JSON,并试图根据下面描述的场景找出如何处理值: 当我在Oracle SQL developer中运行以下SQL查询(在下面的代码中使用)时: 中选择SQLQUERY,得到以下结果: 如上所述,对于由上述SQL查询返回的上述数据,下面的Java代码将其转换为以下JSON: 因此,基本上,它没有在上面的雇员计数的JSON响应中显示列名,因为它是。如何确保
我有包含非法字符的json 我想要从服务器spring发送到客户端的明文,这样客户端就可以获得完整的数据。 如何将字符串的非法字符替换为有效的json对象?
问题内容: 我已经仔细阅读了JSON描述http://json.org/,但是我不确定我是否知道简单问题的答案。最小可能的有效JSON是什么字符串? 字符串是有效的JSON吗? 简单数字是有效的JSON吗? 布尔值是有效的JSON吗? 空对象是有效的JSON吗? 空数组是有效的JSON吗? 问题答案: 在撰写本文时,JSON仅在RFC4627中进行了描述。它(在“2”开头)将JSON文本描述为序列
问题内容: 我在Java中使用ResultSet,但不确定如何正确关闭它。我正在考虑使用ResultSet构造一个HashMap,然后在那之后关闭ResultSet。这种HashMap技术是有效的还是有更有效的方法来处理这种情况?我需要键和值,因此使用HashMap似乎是一个合理的选择。 如果使用HashMap是最有效的方法,如何在代码中构造和使用HashMap? 这是我尝试过的: 问题答案: 遍
问题内容: 我们的应用程序必须以最少的远程http请求显示大量数据,因此我们在后端添加了一个终结点,该终结点将所有必要的数据作为单个json响应提供。这导致〜1.5MB(压缩)或大约8MB的未压缩json格式的文本。 没什么大问题,它会在10到30秒内下载完毕,我们正在使用ASIHTTPRequest将整个响应写入磁盘。 现在来了有趣的部分-将未压缩的文件读入内存映射的字符串后,我们使用stig的