接上次groovy中利用解析json串进行sql语句拼接继而实现select方法后,本次我们利用JAVA来实现这一功能。
首先老规矩,构造select方法函数,由于select是需要查询出结果的,在此我给他设定一个返回值类型JSONArray。如果返回值需要用JSON的,我们也可以用一句
`json.put("data", myJsonArray);`
进行转换,根据个人需求进行选择。
下面是selectData方法:
public static JSONArray selectData(JSONObject jsonObject) throws SQLException {
Connection conn = null;
String sql;
JSONArray ja = new JSONArray();
sql = "select * from " + jsonObject.getString("name")+" where ";
Iterator it = jsonObject.keys();
while (it.hasNext()){
String key = it.next().toString();
String value = jsonObject.getString(key);
if(key.equals("name") ){
continue;
}else{
sql+= key+" "+value+" and ";
}
}
sql = sql.substring(0,sql.length()-4)+";";
System.out.print(sql);
String url = "你的数据库url";
try {
Class.forName("com.mysql.jdbc.Driver");// 动态加载mysql驱动
System.out.println("成功加载MySQL驱动程序");
// 一个Connection代表一个数据库连接
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
// Statement里面带有很多方法,比如executeUpdate可以实现插入,更新和删除等,有兴趣的小伙伴可以去了解一下
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
//在这里我们用ResultSet接收select方法的返回值,并把值存到一个ResultSetMetaData对象中
String columnName,columnValue;
while (rs.next()){
JSONObject json = new JSONObject();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
columnName = rsmd.getColumnName(i + 1);
columnValue = rs.getString(columnName);
json.put(columnName,columnValue);
//单条数据存入一个JSON
}
ja.add(json);
//将所有数据放到一个JSONArray对象中
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("MySQL操作错误");
} catch (SQLException e) {
e.printStackTrace();
}finally {
conn.close();
}
return ja;
//返回所有查询到的结果值
}
这里也给出测试用main函数仅供参考
public static void main(String[] args) throws Exception {
String sql = "{\"name\":\"te\",\"id\":\"<>\'2\'\",\"json1\":\"like\'%测试%\'\"}";
JSONObject jsonObject = JSONObject.fromObject(sql);
System.out.println(selectData(jsonObject));
}
如果以上方法有哪些不足之处欢迎指正,互相交流学习。