-2

我有这样的字符串:String sql = "SELECT COL1, COL2, COL3 FROM SCHEMA.TABLE"; 现在我需要从字符串中获取这个值:SCHEMA.TABLE并且这个值总是在变化。而且整个 SQL 总是在变化。

我将如何实现这一目标?

不知道如何使用不同的值进行操作?这个值总是在后面FROM,SQL 也可能在FROM( ORDER BY, GROUP BY...)后面有其他值

示例 SQL:

`SELECT ZGAR.ZGAR_ID, JARTI.ARTI_NAME, JZGAR.ZGAR_NAME, ZGAR.KAZG_ID, ZGAR.KZPO_ID, JZGAR.ZGAR_DESC FROM NETZGP.ZGANJEARTIKEL ZGAR LEFT JOIN NETZGP.J_ARTI JZGAR ON ZGAR.ZGAR_ID = JZGAR.ZGAR_ID LEFT JOIN NETZGP.J_ARTIKEL JARTI ON ZGAR.ARTI_ID = JARTI.ARTI_ID AND JZGAR.JEZI_ID = JARTI.JEZI_ID WHERE ZGAR.ARTI_ID = 1 AND JZGAR.JEZI_ID = 1 WITH UR`
4

4 回答 4

1

尝试使用substring().

String result= queryString.substring(queryString.lastIndexOf(" ")+1);

给出查询的最后一部分。

如果每个查询中至少有 FROM

String[] result= s.split("FROM");
System.out.println(result[1]);
于 2013-09-20T12:06:06.503 回答
1

最简洁可靠的方法是通过正则表达式:

String tableName = sql.replaceAll(".*FROM (\\S+).*", "$1");

当表名后面有 WHERE 子句时,这也将起作用。

于 2013-09-20T12:09:08.423 回答
0

采用:String table= queryString.substring(queryString.lastIndexOf(" ")+1);

String#substring()

于 2013-09-20T12:07:15.320 回答
0

如果你的 sql 查询经常变化,你应该使用PreparedStatement而不是创建Statement多次。

Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pst = con.prepareStatement("SELECT COL1, COL2, COL3 FROM ?");
String schemaTable = "<ANY_TEXT>";
p.setString(1, schemaTable);
ResultSet rs = p.executeQuery();

之后,您可以更改schemaTable变量并再次执行p.setString(1, schemaTable); rs = p.executeQuery();以获得新结果。

于 2013-09-20T12:12:20.127 回答