前言
之前一直在写javaweb,当然也只是初步接触而已
按照我学的东西来看的话,在后台向前端返回数据的时候,每次要返回一个json字符串都需要首先新建一个类,然后存储到List,最后再转换为json字符串,比较占篇幅
那么既然是返回的是json字符串,为什么不直接拼接一个字符串出来返回给前端呢,需要做的就是多做一些循环,多加一些引号和冒号罢了
说干就干,于是就有了这个函数:
javaweb的ResultSet不使用类返回json字符串
package com.backController;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tomcat.util.buf.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class URLTest2 {
public String getResultString(String sqlstr) throws SQLException {
DBDao.getConnection(); // 根据自己的Dao层修改
ResultSet rs = DBDao.selectSql(sqlstr);
ResultSetMetaData rsmd = rs.getMetaData(); // 获取表格基础信息
int cnum = rs.getMetaData().getColumnCount(); // 获取列数
String[] title = new String[cnum]; // title存储表头
for(int i=0;i<cnum;i++) {
title[i] = rsmd.getColumnName(i+1);
}
//获取行数,很遗憾,rsmd里面没有行数
rs.last();
int rnum = rs.getRow();
rs.first(); //first指的是第一行,也就是说接下来如果要读取rs的话,需要先读取,再执行rs.next()
String[] return_content = new String[rnum]; // 以一行数据为一个字符串保存的数组
int readrow = 0; // 每次读取的一行,因为java的数组没有append的功能,需要手动赋值
do{
// 使用字符串拼接获取返回字符串
String[] row_content = new String[cnum]; // 列数,每一个元素就是一个格子的 key:value
for(int i=1;i<=cnum;i++) {
String key = "\""+title[i-1]+"\"";
String value = "\""+rs.getString(i)+"\"";
String kv = key+":"+value;
row_content[i-1] = kv;
}
String row_str = "{"+StringUtils.join(Arrays.asList(row_content), ',')+"}";
return_content[readrow]=row_str;
readrow+=1;
}while(rs.next());
String return_str = "["+StringUtils.join(Arrays.asList(return_content), ',')+"]";
return return_str;
}
@RequestMapping(value="/test2")
public void test(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException {
response.setContentType("aplication/json;charset=UTF-8");
String sqlstr = "select * from user_management";
response.getWriter().write(getResultString(sqlstr));
}
}
前端亲测可以直接使用eval直接解析成json对象。