responder a mi propia pregunta:
Am usando jsqlparser http://jsqlparser.sourceforge.net/
Este analiza las declaraciones individuales, no por múltiples declaraciones tales como que se encuentran en un esquema. Así que divide el esquema en ';'. Tampoco le gusta el carácter '' ', por lo que deben eliminarse. Código para obtener los nombres de columna de una tabla en particular:
public class BUDataColumnsFinder {
public static String[] readSql(String schema) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(schema)));
String mysql = "";
String line;
while ((line = br.readLine()) != null) {
mysql = mysql + line;
}
br.close();
mysql = mysql.replaceAll("`", "");
return mysql.split(";");
}
public static List<String> getColumnNames(String tableName, String schemaFile) throws JSQLParserException, IOException {
CCJSqlParserManager pm = new CCJSqlParserManager();
List<String> columnNames = new ArrayList<String>();
String[] sqlStatements = readSql(schemaFile);
for (String sqlStatement : sqlStatements) {
Statement statement = pm.parse(new StringReader(sqlStatement));
if (statement instanceof CreateTable) {
CreateTable create = (CreateTable) statement;
String name = create.getTable().getName();
if (name.equalsIgnoreCase(tableName)) {
List<ColumnDefinition> columns = create.getColumnDefinitions();
for (ColumnDefinition def : columns) {
columnNames.add(def.getColumnName());
}
break;
}
}
}
return columnNames;
}
public static void main(String[] args) throws Exception {
String schemaFile = "/home/john/config/bu-schema.sql";
String tableName = "records";
List<String> columnNames = BUDataColumnsFinder.getColumnNames(tableName, schemaFile);
for (String name : columnNames) {
System.out.println("name: " + name);
}
}
}
Dependiendo de lo que se necesita porque no puede haber una manera de hacerlo en forma bastante sencilla. Entonces, ¿cuál será la aplicación de esto? De lo contrario tienen un vistazo a http://stackoverflow.com/questions/660609/sql-parser-library-for-java – bobah
@bobah - Sí bien http://stackoverflow.com/questions/660609/sql-parser- library-for-java tiene la respuesta: jsqlparser. gracias –