2010-08-20 42 views
6

Có ai biết về trình phân tích câu lệnh SQL, trong Java, cho phép có một biểu diễn Object của truy vấn SQL hay không, cho phép sửa đổi biểu diễn này và tạo lại câu lệnh SQL đã cập nhật?Phân tích cú pháp và sửa đổi các câu lệnh SQL trong Java

Kính trọng, Christophe

+3

Ra khỏi tò mò: tại sao bạn lại muốn làm điều này? Chúng tôi có thể đề nghị lựa chọn thay thế. –

+0

Tôi hỗ trợ câu hỏi @Peter Tillemans. Có thể có một cách để tạo biểu diễn cây đối tượng trước khi bàn tay, làm bất cứ điều gì bạn muốn và chỉ dịch nó thành SQL như là một xuất khẩu cuối cùng để thực hiện. – helios

+0

Tôi đang làm việc ở cấp trình điều khiển JDBC (và tôi muốn) để nắm bắt các câu lệnh SQL được gửi bởi ứng dụng của tôi nhưng tôi muốn viết lại các câu lệnh này một phần (sửa đổi một số tên bảng). – Christophe

Trả lời

2

tôi sẽ nghĩ rằng ANTLR sẽ có thể làm được điều này.

+0

Tôi nghĩ vậy, nhưng tôi đang tìm kiếm một giải pháp đơn giản hơn. Với ANTLR, tôi vẫn cần tự tạo trình phân tích cú pháp và thực sự, tôi không tìm thấy thông tin nếu ngữ pháp SQL ANSI tương thích với ANTLR v3. Bạn không chắc chắn rằng bạn có thể cập nhật mô hình và tạo lại chuỗi SQL. – Christophe

+0

Tôi không quen thuộc với ANTLR. Tôi chắc rằng bạn có thể cập nhật mô hình. Việc tái tạo chuỗi SQL nên ở bước đi và in đơn giản nhất, và ANTLR có một thứ gọi là "các mẫu chuỗi" để trợ giúp. Có, bạn có thể phải làm một số công việc để có được kết quả của bạn nếu bạn sử dụng ANTLR. Bạn nên hỏi tại trang ANTLR. –

+1

Một số phản hồi trễ ... ANTLR chắc chắn là giải pháp cho điều đó. Tôi đã sử dụng ngữ pháp SQL cùng với ANTLR v2. Tôi đã sửa đổi ngữ pháp để ghi lại các thẻ giữ bảng "ASTNode" và thay đổi giá trị của chúng. – Christophe

0

Có thể bạn có thể xem JSqlParser.

+0

Tôi thấy rằng một là tốt. Nó không phải là rất rõ ràng nếu bạn có thể thay đổi mô hình SQL và lấy lại SQL viết lại. Có thể toString() sẽ thực hiện công việc. – Christophe

0

Đây là một demo use Java SQL Parser làm điều gì đó như thế này:

Input SQL:

SELECT A as A_Alias, B AS B_Alias FROM TABLE_X 

Nếu bạn cần phải loại bỏ cột thứ hai “B AS B_Alias” từ danh sách lựa chọn, chỉ cần làm một cái gì đó như thế này :

columns.removeResultColumn(1); // 0 is the first column 

sau đó bạn sẽ nhận được SQL này mới (, đã được gỡ bỏ tự động):

SELECT A as A_Alias FROM TABLE_X 

demo này cũng minh họa làm thế nào để thay thế một cột, Thêm tiêu chí (mệnh đề where), Thêm Sắp xếp theo khoản và vv

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