Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Một trình phân tích cú pháp lược đồ MySQL trong Java?

Trả lời câu hỏi của riêng tôi:

Tôi đang sử dụng jsqlparser http://jsqlparser.sourceforge.net/

Điều này phân tích cú pháp các câu lệnh riêng lẻ, không phải nhiều câu lệnh như được tìm thấy trong một lược đồ. Vì vậy, hãy chia lược đồ trên ';'. Nó cũng không thích ký tự '' ', vì vậy chúng cần được loại bỏ. Mã để lấy tên cột cho một bảng cụ thể:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HANDLER FOR NOT FOUND hoạt động như thế nào và cách sử dụng nó là gì?

  2. PHP, MYSQL Autocomplete không hoạt động

  3. Làm cách nào để trừ bằng cách sử dụng SQL trong MYSQL giữa hai giá trị thời gian ngày tháng và truy xuất kết quả trong vài phút hoặc giây?

  4. Làm cách nào để bạn có được tìm kiếm boolean Fulltext của mình để chọn thuật ngữ C ++?

  5. Loại bỏ các bản sao bằng chỉ mục duy nhất