Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JDBC获取结果并转换为JsonObject_Java_Jdbc_Jsonobject - Fatal编程技术网

Java 从JDBC获取结果并转换为JsonObject

Java 从JDBC获取结果并转换为JsonObject,java,jdbc,jsonobject,Java,Jdbc,Jsonobject,我试图从我的JDBC中获得结果,并将它们转换为Json对象,但我发现这很难做到。。这就是我所拥有的 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con=DB.getConnection(); String query = "Select city,state from zips where zip=10012"; ps=con.prepareStatemen

我试图从我的JDBC中获得结果,并将它们转换为Json对象,但我发现这很难做到。。这就是我所拥有的

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
    con=DB.getConnection();
    String query = "Select city,state from zips where zip=10012";
    ps=con.prepareStatement(query);
    String line="";
    while(rs.next())
    {
        line=  rs.getArray("city").toString();
    }
    JSONObject jsonObj = new JSONObject(line);
正如您所看到的,我试图获得while循环的结果,并将其放入字符串变量,然后将其放入JsonObject

这显然不起作用,有人有什么建议吗?我一直在寻找和调整这段代码,但没有任何效果

如果有什么不同,我使用的是Java 1.8 JDK。
数据库连接工作正常,我在MySQL中尝试过这个查询,所以代码中显然有一些东西

更新:
当我检查查询的输出时,我得到一个空白页。我之所以想在Json中使用它,是因为它应该是android的restful服务。rs.next()用于循环,以从查询中获取所有结果。

下面是我编写的一个子例程,应该可以解决您的问题。至少它对我有用,使用PostgreSQL。注意,它创建了一个JSONObject的JSONArray。因此,如果您将其转换为字符串,您将得到如下内容:[{“城市”:“柏林”,“州”:“柏林”},{“城市”:“图森”,“州”:“亚利桑那”},…]

publicJSONArray table2json(ResultSet rs)引发异常{
JSONArray jsArray=新的JSONArray();
int columns=rs.getMetaData().getColumnCount();
while(rs.next()){
JSONObject obj=新的JSONObject();

对于(int i=1;我试图解释您在
while(rs.next())
循环中尝试执行的操作。顺便说一句,您应该使用
StringBuilder
。此外,“这显然不起作用”没有明确的问题陈述。试着回答你的问题,描述你的期望和得到的结果。现在就澄清一下,好吧,我将使用stringbuilder,看看我得到了什么。事实上,我可能对stringbuilder有误解。一般的想法是,如果你想在每次迭代中添加大量的小部件,那么你不应该使用
resutl+=newContent
但是
instanceOfStringBuilder.append(newContent)
。但是如果您希望您的
while(re.next())
只执行一次,那么您的方法应该是好的(但是您可能应该将
whilte
更改为
if
,以使代码更清晰)。您的示例似乎表明array.toString生成字符串中有效JSON的假设,但事实并非如此。请查看类似于
JSONArray city=new JSONArray(rs.getArray(“city”);
的内容,尽管我仍然不确定这是您想要的。
 public JSONArray table2json(ResultSet rs) throws Exception {
  JSONArray jsArray = new JSONArray();        
        int columns = rs.getMetaData().getColumnCount();
        while (rs.next()) {
            JSONObject obj = new JSONObject();
            for (int i = 1; i <= columns; i++) {
                Object tempObject=rs.getObject(i);
                obj.put(rs.getMetaData().getColumnLabel(i), tempObject);
            }
            jsArray.put(obj);
        }
        return jsArray;