从数据库取数据返回json格式
1.做一个dao层,放回conn,提供所有人调用.
1.1配置context.xml
<Context> <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="123456" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/book?autoReconnect=true"/> </Context> |
1.2做一个Dao层
package dao;
import java.sql.Connection; import javax.naming.InitialContext; import javax.sql.DataSource;
publicclass MysqlDriver {
privatestatic Connection conn = null; publicstatic Connection getConn(){ try{ //通过这个类访问Tomcat配置文件Context.xml中指定的JNDI数据源 InitialContext ctx = new InitialContext(); //使用lookup()方法查找匹配的JNDI名字,获得数据源 DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); //从数据源中获得数据库连接 conn = ds.getConnection(); }catch(Exception ex){ ex.printStackTrace(); } returnconn; }
} |
接下里就可以到jsp中用改下名方法得到conn了
<%
Connection conn=MysqlDriver.getConn();
%>
2.做一个类,用来转换resultset到json格式
package json;
import java.sql.ResultSet; import java.sql.SQLException; import java.sql.ResultSetMetaData;
import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONObject;
publicclass UseJson {
publicstatic String resultSetToJson(ResultSet rs) throws SQLException,JSONException { // json数组 JSONArray array = new JSONArray();
// 获取列数 ResultSetMetaData metaData=rs.getMetaData(); intcolumnCount = metaData.getColumnCount();
// 遍历ResultSet中的每条数据 while (rs.next()) { JSONObject jsonObj = new JSONObject();
// 遍历每一列 for (inti = 1; i <= columnCount; i++) { System.out.println(metaData.getColumnTypeName(i)); String type=metaData.getColumnTypeName(i); String columnName =metaData.getColumnLabel(i); // String value = rs.getString(columnName); // jsonObj.put(columnName, value);
if(type=="INT") { jsonObj.put(columnName, rs.getInt(i)); }elseif(type=="DECIMAL") { jsonObj.put(columnName, rs.getShort(i)); }else{ jsonObj.put(columnName, rs.getString(i));// 此处如果调用rs.getObject方法会返回一个Integer型[DB2] } } array.add(jsonObj); }
returnarray.toString(); } }
|
我查了百度,说net.sf.json只需要json-lib这个jar包,所以我想把其余的删掉.
3.新建一个jsp文档
在里面写上下面的代码,就可以直接打印这个json了.
<% Connection conn=MysqlDriver.getConn(); PreparedStatement ps; String jsonStr=""; String sql="select * from datas"; ps=conn.prepareStatement(sql); ResultSet rs=ps.executeQuery(); jsonStr=UseJson.resultSetToJson(rs); out.println(jsonStr); conn.close(); %> |
2018年4月27日15:06:36