我有各種 sql 請求。例如
SELECT COUNT(project_id) AS 'count', project.name AS 'projects' FROM test
JOIN project ON project_id = project.id
或者
SELECT count(*) AS 'browsers' FROM `test`
我想接收''中的單詞。例如“計數”、“專案”、“瀏覽器”。因此,我想從表中獲取列的名稱。但是我該怎么做,我不明白。到目前為止,我只是寫了
String[] str = sqlRequest.split("FROM");
但是接下來我能寫什么,我不知道。告訴我如何從這些括號中獲取單詞?
uj5u.com熱心網友回復:
不要使用字串拆分、替換等來執行此操作。在某些時候,它會失敗。
您應該決議 sql 陳述句。與JsqlParser類似的示例
public class Main {
public static void main(String[] args) throws JSQLParserException {
Select stmt = (Select) CCJSqlParserUtil.parse(
"SELECT COUNT(project_id) AS 'count', project.name AS 'projects' FROM test\n"
"JOIN project ON project_id = project.id ");
for (SelectItem selectItem : ((PlainSelect) stmt.getSelectBody()).getSelectItems()) {
selectItem.accept(new SelectItemVisitorAdapter() {
@Override
public void visit(SelectExpressionItem item) {
System.err.println(item.getAlias().getName());
}
});
}
}
}
輸出:
'count'
'projects'
uj5u.com熱心網友回復:
你可以這樣做:
String query = "SELECT COUNT(project_id) AS 'count', project.name AS 'projects' FROM test JOIN project ON project_id = project.id";
LinkedList<String> queryColumns = new LinkedList<>();
String[] test = query.replace("SELECT", "").split("FROM")[0].split(","); //You have a string from which you need to extract single names, taking care of aliases.
for(String s : test) {
int aliasIndex = s.indexOf("AS");
String column;
if(aliasIndex != -1) {
//if there is an alias
column = s.substring(aliasIndex 2).replace("'","").strip();
} else {
//if there isn't an alias
column = s.replace("'","").strip();
}
queryColumns.add(column);
}
我假設別名以大寫字母表示為“AS”,如果它也可以是小寫字母,則很容易更改和調整代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/360172.html
