标签:android style blog http color java 使用 os
1、叉叉哥的代码resultSetToJson:
    public String resultSetToJson(ResultSet rs) throws SQLException,JSONException
    {
       // json数组
       JSONArray array = new JSONArray();
      
       // 获取列数
       ResultSetMetaData metaData = rs.getMetaData();
       int columnCount = metaData.getColumnCount();
      
       // 遍历ResultSet中的每条数据
        while (rs.next()) {
            JSONObject jsonObj = new JSONObject();
           
            // 遍历每一列
            for (int i = 1; i <= columnCount; i++) {
                String columnName =metaData.getColumnLabel(i);
                String value = rs.getString(columnName);
                jsonObj.put(columnName, value);
            } 
            array.put(jsonObj); 
        }
      
       return array.toString();
    } 
 
修改前面博文提到的从db0703中读取Student表中数据那个代码,调用resultSetToJson,将数据集rs传给这个方法,调试没错,运行:
(代码流程)如果是:
line1 调用resultSetToJson;
line2. 循环显示数据库中内容;
结果:什么都没有,line2也不会显示出内容;
如果是:
line2;
line1;
结果:line2正常输出,line1还是没内容,在resultSetToJson中加入printf测试一下,发现rs的长度是正常的,但是while (rs.next()) {}循环根本没有执行,不知怎么解释,遂不会了。。。
导入下文提到的多个jar包后,叉叉哥代码array.put(jsonObj);处提示无put方法;
2、cnblogs虾米工作室
http://www.cnblogs.com/xia520pi/archive/2012/05/22/2513369.html
我用其中student.java
public class Student {
    private String userName;
    private String sex;
    private int age;
    public Student() {
    }
    public Student(String userName, String sex, int age) {
        this.userName = userName;
        this.sex = sex;
        this.age = age;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getSex() {
     
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
} 
 
JsonLib.java
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
/*
 * json-lib包来源
 * http://download.csdn.net/download/zyuc_wangxw/3742101
 * */
public class JsonLib {
 public static void main(String args[]){
  collections2json();
 }
    public static void collections2json(){
        List list1 = new ArrayList();
        list1.add("first");
        list1.add("second");
        JSONArray jsonArray1 = JSONArray.fromObject(list1);
        System.out.println("List list1");
        System.out.println(jsonArray1);
      
        List<Student> list2 = new ArrayList<Student>();
        list2.add(new Student("xiapi1","男",10));
        list2.add(new Student("xiapi2","女",11));
        list2.add(new Student("xiapi3","男",12));
        JSONArray jsonArray2 = JSONArray.fromObject(list2);
        System.out.println("List<Student> list2");
        System.out.println(jsonArray2);
    }
} 
 
作者用了多个jar包(),本想按部就班,但(官方网站:http://json-lib.sourceforge.net/)非常慢,看到评论说fastjar不错,便找到这个(http://download.csdn.net/detail/finaljia/5293875#comment)试试;
导入之后JSONArray.fromObject处提示(The method fromObject(List) is undefined for the type JSONArray),了解到百度知道网友使用json-lib.jar解决,遂重新找找json-lib.jar;
检索开始:
Mark1、fastjson 的简单使用 (http://blog.csdn.net/qiantujava/article/details/37522477),这篇不是我要的,前后文有(Android实现简单登录,mybatis简单使用),看来作者是“简单”系列的人,我也是;
Mark2、fastjson生成和解析json数据,此文逻辑非常清晰,涉及
(1. fastjson生成和解析json数据
(举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>)
2.通过一个android程序测试fastjson的用法。),火候到了再回头看;
Mark3、此网页(http://www.sencha.com/forum/topics-remote.php)都是json文本,可能是用来测试的吧
检索结束;
发现目标(http://download.csdn.net/download/zyuc_wangxw/3742101),简直是太棒了,文件简介:
json-lib.rar:
Json开发所必需的jar包,以及关联的所以jar包。 列表为: 1)json-lib-2.3-jdk15.jar; 2)ezmorph-1.0.6.jar; 3)commons-logging-1.1.1.jar; 4)commons-lang-2.0.jar; 5)commons-collections-3.1.jar; 6)commons-beanutils.jar.
和虾米工作室所需jar包的完全匹配,全部导入,运行结果:
List list1
["first","second"]
List<Student> list2
[{"age":10,"sex":"男","userName":"xiapi1"},{"age":11,"sex":"女","userName":"xiapi2"},{"age":12,"sex":"男","userName":"xiapi3"}]
接下来就基于这个代码将数据集rs的内容转化为json格式,
直接使用
JSONArray jsonArray2 = JSONArray.fromObject(rs); System.out.println(jsonArray2);
结果报错。
Try1、考虑将resultSet类型转化为List或者数组类型 ;
此文(ResultSet转换为List的方法)提出多种方法将resultSet转化为其它类型
//方法1、ResultSet转换为List的方法
 private static List convertList(ResultSet rs) throws SQLException {
  List list = new ArrayList();
  ResultSetMetaData md = rs.getMetaData();
  int columnCount = md.getColumnCount(); //Map rowData;
  System.out.println("convertList:"+columnCount);
  while (rs.next()) { //rowData = new HashMap(columnCount);
   Map rowData = new HashMap(); 
   for (int i = 1; i <= columnCount; i++) {
 
    rowData.put(md.getColumnName(i), rs.getObject(i));
   }
 
   list.add(rowData);
  }
  return list;
  }
 
//方法2、返回list类型
 /**
 * 通用取结果方案,返回list
 * 
 * @param rs
 * @return
 * @throws SQLException
 */
 public static List extractData(ResultSet rs) throws SQLException {
 ResultSetMetaData md = rs.getMetaData();
 int num = md.getColumnCount();
 List listOfRows = new ArrayList();
 while (rs.next()) {
 Map mapOfColValues = new HashMap(num);
 for (int i = 1; i <= num; i++) {
 mapOfColValues.put(md.getColumnName(i), rs.getObject(i));
 }
 listOfRows.add(mapOfColValues);
 }
 return listOfRows;
 }
 
 //方法3、返回JSONArray类型
 public static JSONArray extractJSONArray(ResultSet rs) throws SQLException {
 ResultSetMetaData md = rs.getMetaData();
 int num = md.getColumnCount();
 JSONArray array = new JSONArray();
 while (rs.next()) {
 JSONObject mapOfColValues = new JSONObject();
 for (int i = 1; i <= num; i++) {
 mapOfColValues.put(md.getColumnName(i), rs.getObject(i));
 }
 array.add(mapOfColValues);
 }
 return array;
 } 
 
其中方法3和叉叉哥代码基本一样,但调用这些函数,输出都是空;
Try2、有可能是数据集rs处理之后就再次处理为空,所以在前面将rs赋值给rs_replication;
数据库输出之后紧跟着这两句
JSONArray jsonArray = JSONArray.fromObject(extractJSONArray(rs_replication));
System.out.println("jsonArray\n"+jsonArray);
结果输出还是空。。
Try3、将方法1中代码插入到数据库输出中间
输出
convertList:3
[{"name":"tom","ID":1}]
1 tom 计算机
[{"name":"tom","ID":1},{"name":"sheldon","ID":2}]
2 sheldon 物理
[{"name":"tom","ID":1},{"name":"sheldon","ID":2},{"name":"raj","ID":3}]
3 raj 天体
少了class这一列,rowData.put只能有两个参数
//初始化变量
     int ID=-1;
     String name = null;
     String classname= null;
    // new add
   List list = new ArrayList();
   ResultSetMetaData md = rs.getMetaData();
   int columnCount = md.getColumnCount(); //Map rowData;
   System.out.println("convertList:"+columnCount);
    //  new add
     //循环读取
     while(rs.next()) {
  // new add
    Map rowData = new HashMap(); 
    for (int i = 1; i <= columnCount; i++) {
   
     rowData.put(md.getColumnName(i), rs.getObject(i));
    }
   
    list.add(rowData);
    JSONArray jsonArray = JSONArray.fromObject(list);//add
    System.out.println(jsonArray);//show result each time
    
  //  new add
      // 读取3列数据
      ID = rs.getInt("ID");
      name=rs.getString("name");
      classname=rs.getString("class");
      //输出结果
      System.out.println(ID + "\t" + name+"\t"+classname);     
    } 
Try4、每次输出为空是rs的问题
//创建副本
     ResultSet rs_replication =rs;
这两句没有创建新的resultset,好像指针一样指向的是同一个,所以回到Try2再试试;
// 遍历ResultSet中的每条数据
       JSONObject jsonObj = new JSONObject();
        while (rs.next()) {
            // 遍历每一列
            for (int i = 1; i <= columnCount; i++) {
                String columnName =metaData.getColumnLabel(i);
                String value = rs.getString(columnName);
                jsonObj.put(columnName, value);
                System.out.println(jsonObj);
            }
输出
{"ID":"1"}
{"ID":"1","name":"tom"}
{"ID":"1","name":"tom","class":"计算机"}
{"ID":"2","name":"tom","class":"计算机"}
{"ID":"2","name":"sheldon","class":"计算机"}
{"ID":"2","name":"sheldon","class":"物理"}
{"ID":"3","name":"sheldon","class":"物理"}
{"ID":"3","name":"raj","class":"物理"}
{"ID":"3","name":"raj","class":"天体"}
Try5、试试转化为数组
(http://weihuarongkitty.blog.163.com/blog/static/178533162006615211500/),将数据集内容逐条赋给二维数据应该不难。
占位
标签:android style blog http color java 使用 os
原文地址:http://my.oschina.net/SnifferApache/blog/296090