java解析字符串(解析sql语句,得到需要查询显示的字段名)。

Python017

java解析字符串(解析sql语句,得到需要查询显示的字段名)。,第1张

我写一条把

String aa=''select "+f_spbm+" from 表1"

主要注意其中的空格 select 后面的, from前面的空格。。

第二条一样。。表不固定,字段也就不能固定,功能也就不能固定,一般编写都会将表固定的。

import java.util.Iterator

import java.util.Set

import java.util.Map.Entry

import com.google.gson.JsonArray

import com.google.gson.JsonElement

import com.google.gson.JsonObject

import com.google.gson.JsonParser

public class Sql

{

public static String parseSQL(String json)

{

JsonParser parser = new JsonParser()

JsonObject obj = (JsonObject) parser.parse(json)

String table = obj.get("table").getAsString()

String op_type = obj.get("op_type").getAsString()

String sql = ""

if("I".equals(op_type))

{

sql += "INSERT INTO " + table + " ("

JsonObject after = (JsonObject) obj.get("after")

Set<Entry<String, JsonElement>> entry = after.entrySet()

Iterator<Entry<String, JsonElement>> it = entry.iterator()

String vs = " values ("

while(it.hasNext())

{

Entry<String, JsonElement> elem = it.next()

String key = elem.getKey()

String val = elem.getValue().toString()

sql += key + ", "

vs += val + ", "

}

sql = sql.replaceAll(",\\s*$", "")

vs = vs.replaceAll(",\\s*$", "")

sql += ") " + vs + ")"

}

else if("U".equals(op_type))

{

sql += "UPDATE " + table + " SET "

JsonObject after = (JsonObject) obj.get("after")

Set<Entry<String, JsonElement>> entry = after.entrySet()

Iterator<Entry<String, JsonElement>> it = entry.iterator()

while(it.hasNext())

{

Entry<String, JsonElement> elem = it.next()

String key = elem.getKey()

String val = elem.getValue().toString()

sql += key + "=" + val + ", "

}

sql = sql.replaceAll(",\\s*$", "")

sql += " WHERE "

after = (JsonObject) obj.get("before")

entry = after.entrySet()

it = entry.iterator()

while(it.hasNext())

{

Entry<String, JsonElement> elem = it.next()

String key = elem.getKey()

String val = elem.getValue().toString()

sql += key + "=" + val + " AND "

}

sql = sql.replaceAll("\\s*AND\\s*$", "")

}

else if("D".equals(op_type))

{

sql += "DELETE FROM " + table + " WHERE "

JsonObject after = (JsonObject) obj.get("before")

Set<Entry<String, JsonElement>> entry = after.entrySet()

Iterator<Entry<String, JsonElement>> it = entry.iterator()

while(it.hasNext())

{

Entry<String, JsonElement> elem = it.next()

String key = elem.getKey()

String val = elem.getValue().toString()

sql += key + "=" + val + " AND "

}

sql = sql.replaceAll("\\s*AND\\s*$", "")

}

return sql

}

public static void main(String[] args)

{

String insert =

        "{\"table\":\"GG.TCUSTORD\",\"op_type\":\"I\",\"op_ts\":\"2013-06-02 22:14:36.000000\",\"current_ts\":\"2015-09-18T13:39:35.447000\",\"pos\":\"00000000000000001444\",\"tokens\":{\"R\":\"AADPkvAAEAAEqL2AAA\"},\"after\":{\"CUST_CODE\":\"WILL\",\"ORDER_DATE\":\"1994-09-30:15:33:00\",\"PRODUCT_CODE\":\"CAR\",\"ORDER_ID\":\"144\",\"PRODUCT_PRICE\":17520.00,\"PRODUCT_AMOUNT\":3,\"TRANSACTION_ID\":\"100\"}}"

String update =

        "{\"table\":\"GG.TCUSTORD\",\"op_type\":\"U\",\"op_ts\":\"2013-06-02 22:14:41.000000\",\"current_ts\":\"2015-09-18T13:39:35.748000\",\"pos\":\"00000000000000002891\",\"tokens\":{\"L\":\"206080450\",\"6\":\"9.0.80330\",\"R\":\"AADPkvAAEAAEqLzAAC\"},\"before\":{\"CUST_CODE\":\"BILL\",\"ORDER_DATE\":\"1995-12-31:15:00:00\",\"PRODUCT_CODE\":\"CAR\",\"ORDER_ID\":\"765\",\"PRODUCT_PRICE\":15000.00,\"PRODUCT_AMOUNT\":3,\"TRANSACTION_ID\":\"100\"},\"after\":{\"CUST_CODE\":\"BILL\",\"ORDER_DATE\":\"1995-12-31:15:00:00\",\"PRODUCT_CODE\":\"CAR\",\"ORDER_ID\":\"765\",\"PRODUCT_PRICE\":14000.00,\"PRODUCT_AMOUNT\":3,\"TRANSCATION_ID\":\"100\"}}"

String delete =

        "{\"table\":\"GG.TCUSTORD\",\"op_type\":\"D\",\"op_ts\":\"2013-06-02 22:14:41.000000\",\"current_ts\":\"2015-09-18T13:39:35.766000\",\"pos\":\"00000000000000004338\",\"tokens\":{\"L\":\"206080450\",\"6\":\"9.0.80330\",\"R\":\"AADPkvAAEAAEqLzAAC\"},\"before\":{\"CUST_CODE\":\"DAVE\",\"ORDER_DATE\":\"1993-11-03:07:51:35\",\"PRODUCT_CODE\":\"PLANE\",\"ORDER_ID\":\"600\"}}"

System.out.println(parseSQL(insert))

System.out.println(parseSQL(update))

System.out.println(parseSQL(delete))

}

}