sql >> データベース >  >> RDS >> Mysql

JavaのMySQLスキーマパーサー?

    私自身の質問に答える:

    jsqlparser http://jsqlparser.sourceforge.net/ を使用しています

    これは、スキーマにあるような複数のステートメントではなく、個々のステートメントを解析します。したがって、スキーマを';'で分割します。また、「 `」文字が好きではないので、これらを取り除く必要があります。特定のテーブルの列名を取得するコード:

    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);
        }
    
    }
    
    }
    


    1. x分ごとに自動的に削除するにはどうすればよいですか?

    2. 行内の標準偏差を選択するにはどうすればよいですか? (SQLの場合-またはR :)

    3. OracleのTO_CHAR(datetime)関数

    4. MariaDBでのSHOWCHARACTERSETのしくみ