2016-05-16 21 views
7

Tôi vừa bắt đầu khám phá JSqlparser. Theo sự hiểu biết của tôi, tôi đã sửa đổi TablesNamesFinder để trích xuất các cột và bảng và làm việc tốt nhưng một vấn đề rất nhỏ.JSqlParser - Lấy tên bảng từ Cột

@Override 
public void visit(Column col) { 
    Column c = col; 
    String cname = c.getFullyQualifiedName(); 
    Table t = c.getTable(); 
    System.out.println(t.getName()); 
} 

Bảng này in sẽ không, đối với hầu hết các trường hợp nó in vô cho rất ít trường hợp nó in bí danh của bảng nhưng không phải bàn. Có điều gì tôi quên không?

Phần còn lại của lần

@Override 
public void visit(SelectExpressionItem exp){ 
    exp.getExpression().accept(this); 
}   

@Override 
public void visit(Table tableName) { 
    // System.out.println(tableName.getFullyQualifiedName()); 
} 

@Override 
public void visit(Select select) { 
    select.getSelectBody().accept(this); 
} 

Trả lời

6

Trước hết sourcecode của bạn là đúng. Bạn phải ghi nhớ:

JSqlParser là chỉ một trình phân tích cú pháp. Vì vậy, nếu bạn làm điều gì đó như

select col1 from table1 

Các phân tích cú pháp tạo ra đối tượng Cột không biết tablename của nó. Đây chỉ là trường hợp nếu bạn viết nó đủ điều kiện:

select table1.col1 from table1 

Hành vi tương tự xảy ra với bí danh. JSqlParser không mở rộng định nghĩa bí danh.

Tại sao? Nếu bạn nhìn vào ví dụ này, mà là một SQL đúng:

select col1 from table1, table2 

nó trở nên rõ ràng, rằng tính bảng các cột thuộc về cần giản đồ cơ sở dữ liệu riêng của mình.

+0

và đối với các hàm tổng hợp như tổng (col1 * col2), tôi có thể bắt các hàm này trong hàm Truy cập, có cách nào tốt hơn không? Tôi có thể có thêm thông tin về tên của các phần bạn đã đưa ra để truy vấn không. Giống như: Chọn (col1, col2, col3,) ở đây col1, col2, col3 là cơ thể được chọn. Tôi có thể có wiki không? – Waleed

+0

Tôi không chắc chắn, ý của bạn là gì? Bạn có nghĩa là bối cảnh? Giống như cột nào trong đó xây dựng (ví dụ: chức năng nào)? Ngữ cảnh có thể lấy được từ cây phân tích cú pháp. Sử dụng khách truy cập như bạn đã làm là ok. – wumpz

Các vấn đề liên quan