java连接oracle数据库查一张表的内容返回为json类型,并解析该json

时间:2021-10-30 14:53:01

本文介绍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