java解析表字段_从SQL / HQL Java解析表和列名
小編典典
您可以使用 TableNamesFinder 來(lái)遍歷所有列。正如您在結(jié)果列表中看到的那樣, TableNamesFinder 不會(huì)遍歷 Columns的 所有出現(xiàn),因?yàn)樗皇潜匦璧摹R虼?#xff0c;這里也必須完成遍歷實(shí)現(xiàn),而我沒有。
您可以使用 JSqlParser AST-節(jié)點(diǎn)功能 來(lái)獲取所有列。對(duì)于特定的產(chǎn)品,JSqlParser為解析樹生成節(jié)點(diǎn)。 列 就是其中之一。
為了完成實(shí)現(xiàn),必須收集所有列并使該列表與眾不同(大小寫,表等)。
String sql = "SELECT * FROM ( ( SELECT TBL.ID AS rRowId, TBL.NAME AS name, TBL.DESCRIPTION as description, TBL.TYPE AS type, TBL1.SHORT_NAME AS shortName FROM ROLE_TBL TBL WHERE ( TBL.TYPE = 'CORE' OR TBL1.SHORT_NAME = 'TNG' AND TBL.IS_DELETED <> 1 ) ) MINUS ( SELECT TBL.ID AS rRowId, TBL.NAME AS name, TBL.DESCRIPTION as description, TBL.TYPE AS type, TBL3.SHORT_NAME AS shortName,TBL3.NAME AS tenantName FROM ROLE_TBL TBL INNER JOIN TYPE_ROLE_TBL TBL1 ON TBL.ID=TBL1.ROLE_FK LEFT OUTER JOIN TNT_TBL TBL3 ON TBL3.ID = TBL.TENANT_FK LEFT OUTER JOIN USER_TBL TBL4 ON TBL4.ID = TBL1.USER_FK WHERE ( TBL4.ID =771100 AND TBL.IS_DELETED <> 1 ) ) ) ORDER BY name ASC";
System.out.println("using TableNamesFinder to get column names");
Statement statement = CCJSqlParserUtil.parse(sql);
Select selectStatement = (Select) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder() {
@Override
public void visit(Column tableColumn) {
System.out.println(tableColumn);
}
};
tablesNamesFinder.getTableList(selectStatement);
System.out.println("-------------------------------------------");
System.out.println("using ast nodes to get column names");
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sql);
node.jjtAccept(new CCJSqlParserDefaultVisitor() {
@Override
public Object visit(SimpleNode node, Object data) {
if (node.getId() == CCJSqlParserTreeConstants.JJTCOLUMN) {
System.out.println(node.jjtGetValue());
return super.visit(node, data);
} else {
return super.visit(node, data);
}
}
}, null);
必須記住,JSqlParser只是一個(gè)解析器。因此,如果不像(table.column)中那樣指定列表名稱,就不可能獲得列表名稱。為了實(shí)現(xiàn)此目的,數(shù)據(jù)庫(kù)模式必須可用。如果您查看以下內(nèi)容,這將變得清楚:
select a from table1, table2
這是有效的SQL。
2020-11-01
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java解析表字段_从SQL / HQL Java解析表和列名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不会再有了!李彦宏:中国基本不会再出一个
- 下一篇: java web 手机验证_Java 手