从String获取特定值

时间:2013-09-20 12:03:24

标签: java string

我有这样的字符串: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`

4 个答案:

答案 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);

请参阅String#substring()

答案 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();即可获得新结果。