我有这样的字符串:String sql = "SELECT COL1, COL2, COL3 FROM SCHEMA.TABLE";
现在我需要从String: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`
答案 0 :(得分:1)
尝试使用substring()
。
String result= queryString.substring(queryString.lastIndexOf(" ")+1);
给出了查询的最后一部分。
如果每个查询都有至少FROM
String[] result= s.split("FROM");
System.out.println(result[1]);
答案 1 :(得分:1)
最简洁可靠的方法是通过正则表达式:
String tableName = sql.replaceAll(".*FROM (\\S+).*", "$1");
当表名后面有WHERE子句时,这也会起作用。
答案 2 :(得分:0)
使用:String table= queryString.substring(queryString.lastIndexOf(" ")+1);
答案 3 :(得分: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();
即可获得新结果。