本文介绍java访问oracle数据库查一张简单的表返回json后再解析该json。
JDBC和JSON的概念大家都很清楚了,我们直接进入看怎么做的思路。
@java连接oracle数据库的步骤也很简单:
1.设定数据库驱动,数据库连接地址、端口、名称,用户名,密码
2.反射Oracle数据库驱动程序类、获取数据库连接 ,驱动所查询的表
@ 我们再看看生成json的思路:
1.声明json对象用来存放json数组
2.声明json数组来存放json数据
3.拼接json
@同样解析json的思路也很简单(json解析有JsonReader解析、org.json包解析、新建gson对象解析json三种方法。为了对应json的生成我使用了org.json包来进行解析),使用这种方法解析JSON,总结一句话就是:遇到{}用JSONObject,遇到[]用JSONArray:
1.首先用JSONObject来解析大括号
2.ceshiinfo是一个数组用JSONArray解析
3.JSONArray中每一项都是jsonobject,所以用JSONObject解析。
好,大体思路说完了,可能不是很直观还有一点懵圈,没事下面的一段代码有极其清晰的注释,相信你带着上面的思路很快就能明白:

package com.java.test;  

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;
import java.sql.Statement;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;  

public class TestJson{  

    public void SetRet() throws JSONException{ 

        //设定数据库驱动,数据库连接地址、端口、名称,用户名,密码  
        String driverName="oracle.jdbc.driver.OracleDriver";  
        /*172.18.1.252是我自己建的一个数据库的地址,你在自己电脑建
        的数据库直接localhost就可以了,ORA9IS为数据库名称(一般默认
        为orcl),1521为连接数据库的默认端口*/ 
        String url="jdbc:oracle:thin:@172.18.1.252:1521:ORA9IS";   
        String user="xxx";   //xxx为你的用户名  
        String password="xxx";  //xxx为你的密码  

        Statement stmt = null;  
        ResultSet rs = null;  

        //数据库连接对象  
        Connection conn = null;  

        try {  
            //反射Oracle数据库驱动程序类  
            Class.forName(driverName);  

            //获取数据库连接  
            conn = DriverManager.getConnection(url, user, password);  

            //输出数据库连接  
            System.out.println(conn);  
             //驱动所查询的表 
             stmt = conn.createStatement(); 
             rs = stmt.executeQuery("select * from ceshi");   
             //声明JSONObject对象
             JSONObject json = new JSONObject();
             //声明JSONArray数组对象,注意声明对象相对循环的位置,不然可能导致循环失常
             JSONArray jay = new JSONArray();
             //将指针移到下一行,判断rs中是否有数据  
            while(rs.next()){
                //声明JSONObject对象,这里存放的信息即将存放到JSONArray中
                JSONObject json1 = new JSONObject();
                //输出字符串信息
                System.out.println("查询到id为【" + rs.getString("cid") + "】的信息,其姓名为:" + rs.getString("cname") + ",其性别为:" + rs.getString("csex"));
                //拼各个列的json信息
                json1.put("cid", rs.getString("cid"));
                json1.put("cname", rs.getString("cname"));
                json1.put("csex", rs.getString("csex"));
                jay.put(json1);
            }
            //将json1的信息拼起来,相当于json={ceshiinfo:[]}
            json.put("ceshiInfo", jay);
             //转换成字符串形式
            String jsonStr = json.toString();
            //输出字符串
            System.out.println("json = "+ jsonStr);
            //解析json,遇到大括号,用JSONObject
            JSONObject jot = new JSONObject(jsonStr);
            //ceshiinfo是一个数组,就用JSONArray
            JSONArray ary = jot.getJSONArray("ceshiInfo");
            //循环遍历arr数组的信息
            for(int i=0 ; i < ary.length() ; i++){
            //遇{}就用jsonobject,jsonarry里的每一项信息都是jsonobject
                JSONObject jj = ary.getJSONObject(i);
                String cid = jj.getString("cid");
                String cname = jj.getString("cname");
                String csex = jj.getString("csex");
                System.out.println(" cid = "+ cid + " cname = "+ cname + " csex = " + csex);
            }
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }finally{  
            try{  
                if(rs != null){  
                    rs.close();  
                }  
                if(stmt != null){  
                    stmt.close();  
                }  
                if(conn != null){  
                    conn.close();  
                }  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }     
        }  
    }  

    public static void main(String[] args) throws JSONException{  
        new TestJson().SetRet();  
    }  
}

ps:在你的oracle数据库用如下程序中建一张表:

select * from user_all_tables


create table ceshi(
       cid number ,
       cname varchar2(20),
       csex char(2) check(csex in ('男','女'))
)


select * from ceshi

insert into ceshi values(1,'张三','男');
insert into ceshi values(2,'李四','男');
insert into ceshi values(3,'王五','女');
insert into ceshi values(4,'赵六','男');




要导入的jar包:json.jar、classes12.jar