2013-09-20 7 views
-2

У меня есть следующая строка: String sql = "SELECT COL1, COL2, COL3 FROM SCHEMA.TABLE"; Теперь мне нужно получить это значение от String: SCHEMA.TABLE, и это значение всегда меняется. А также весь SQL всегда меняется.Получить определенное значение от String

Как бы я мог достичь этого?

Не знаете, как манипулировать различными ценностями? Это значение всегда после FROM и SQL может также иметь другие значения после FROM (ORDER BY, GROUP BY...)

SAMPLE 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

Сначала вам нужно решить, какое слово вы хотите получить, соответствует ли оно определенным правилам (например, всегда последнее слово в строке?), И вы можете писать код, который делает то, что вы хотите. С этой информацией это просто невозможно. – Ozzie

+0

использовать java split function .... ur SCHEMA.TABLE всегда будет после FROM ..... – swan

+0

- это значение всегда после FROM? Не могли бы вы привести несколько примеров и то, что вы ожидаете от своей программы, пожалуйста. – Marc

ответ

1

Наиболее емкий и надежный способ с помощью регулярных выражений:

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

Это также будет работать, когда есть ИНЕКЕ после имени таблицы.

1

Try с substring().

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

дает последнюю часть запроса.

Если по крайней мере FROM есть в каждом запросе

String[] result= s.split("FROM"); 
System.out.println(result[1]); 
+0

Операционный код OP всегда меняется, поэтому он может стать 'SELECT COL1, COL2, COL3 FROM SCHEMA.TABLE t' – anubhava

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();, чтобы получить новые результаты.

Смежные вопросы