2008-09-26 34 views
13

Tôi không chắc liệu điều này có tồn tại hay không, vì vậy tôi nghĩ rằng tôi sẽ khai thác sự khôn ngoan của người khác ..Bất kỳ thư viện Java nào có xác nhận cú pháp SQL không?

Tôi đã tự hỏi liệu có bất kỳ thư viện Java nào có thể được sử dụng để xác thực truy vấn SQL không cú pháp. Tôi biết rằng có rất nhiều sai lệch so với thông số SQL chung, vì vậy nó có lẽ sẽ chỉ hoạt động chống lại một cái gì đó như SQL: 2006, nhưng điều đó chắc chắn sẽ đủ.

Mục tiêu của tôi là sử dụng mục đích này cho mục đích thử nghiệm đơn vị mà không cần thực hiện hành động chống lại DB. Tôi biết nó sử dụng hạn chế, nhưng nó vẫn sẽ hữu ích.

Cảm ơn!

+0

Bạn có cần xác thực SQL của nhà cung cấp cụ thể hoặc tiêu chuẩn ANSI SQL không? Tất cả các nhà cung cấp SQL DBMS chính xuất phát đáng kể từ tiêu chuẩn bằng cách mở rộng và triển khai nó cùng một lúc. – Constantin

+0

câu hỏi này không mang tính xây dựng như thế nào ?? – rtcarlson

+0

@awied Bạn đã bao giờ tìm thấy một giải pháp tốt cho điều này? – mdewit

Trả lời

4

Tôi không nghĩ rằng có những thư viện như vậy. Cú pháp SQL có quá nhiều dẫn xuất.

Một giải pháp có thể là sử dụng các phần của DBMS thuần Java nguồn mở như SmallSQL. Trong dự án này, bạn có thể tạo một thể hiện của SQLParser. Các tài liệu tham khảo cần thiết để kết nối có thể được gỡ bỏ rất dễ dàng.

+0

Bạn có cơ hội là nhà phát triển SmallSQL không? – Constantin

+0

Vâng, tôi là một trong những nhà phát triển. – Horcrux7

+0

@ Horcrux7: Tôi đã tải xuống SmallSQL ngay bây giờ. Dường như không dễ dàng loại bỏ tham chiếu SSConnection. Có vẻ như SQLParser xác thực cú pháp SQL bằng cách kiểm tra đối với lược đồ cơ sở dữ liệu thực tế. (ví dụ: phương thức SQLParser.from() cố kết nối với cơ sở dữ liệu). –

1

Bạn có thể trích xuất mã phân tích ra từ HSQL, là java và mã nguồn mở.

4

Có lẽ bạn có thể sử dụng Antlr, nó có một số SQL grammarsJava library, cũng như các plugin cho các IDE Java khác nhau.

Hoặc theo thông báo, hãy sử dụng trình phân tích cú pháp các tiện ích SQL nguồn mở như SQuirreL SQL Client.

2

SQL4J là trình phân tích cú pháp SQL được viết bằng Java.

http://www.cs.toronto.edu/~jglu/sql4j/index.htm

+1

Đó là một liên kết bị hỏng. Tôi đã tìm thấy một dự án Google Code bằng cùng tên nhưng không có wiki hoặc tải xuống. –

2

Hãy thử JSQL parser.

Ngoài việc xác thực, bạn có được đại diện có ý nghĩa của truy vấn.
Điều này cho phép bạn, ví dụ: chỉ chấp nhận các lệnh "nhất định"; thao tác
truy vấn "prettify" nó, v.v.

2

Với JOOQ bạn sẽ không bao giờ mắc lỗi trong SQL. Trình biên dịch Java sẽ giải quyết vấn đề đó.

+0

Nếu bạn đang sử dụng JOOQ chỉ làm trình tạo truy vấn - có bất kỳ cơ chế Jooq nào để xác thực SQL đã tạo (ví dụ như trong một bài kiểm tra Junit) không? – hovanessyan

+0

@hovanessyan Không cần phải xác nhận chúng, tôi tin, bởi vì JOOQ phát ra SQL hợp lệ. –

+0

JOOQ cho phép bạn tự viết các câu lệnh SQL, vì vậy nếu bạn bỏ lỡ dấu phẩy hoặc dấu ngoặc hoặc smth, SQL sẽ không hợp lệ. JOOQ phát ra SQL hợp lệ nếu bạn đang sử dụng các lớp mô hình được tạo ra - tôi chỉ sử dụng nó như là SQL Builder và không dựa vào việc tạo mô hình - vì vậy có thể tạo ra các SQL không hợp lệ. – hovanessyan

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