Tôi thực sự không tìm thấy bất kỳ giải pháp nào được trình bày ở đây để hoàn thành đầy đủ vì vậy tôi sẽ thêm của riêng mình. Không có gì mới ở đây. Bạn có thể ghép chúng lại với nhau từ các giải pháp được trình bày khác cùng với các nhận xét khác nhau.
Có ít nhất hai điều bạn sẽ phải chắc chắn rằng:
Hãy chắc chắn rằng bạn vượt qua các tên bảng vào getTables()
method, chứ không phải đi qua một giá trị null. Trong trường hợp đầu tiên bạn để máy chủ cơ sở dữ liệu lọc kết quả cho bạn, trong lần thứ hai bạn yêu cầu danh sách tất cả bảng từ máy chủ và sau đó lọc danh sách tại địa phương. Trước đây là nhanh hơn nhiều nếu bạn chỉ tìm kiếm một bảng đơn .
Đảm bảo kiểm tra tên bảng từ resultset bằng kết quả trùng khớp là . Lý do là số getTables()
khớp với mẫu trên truy vấn cho bảng và ký tự _
là ký tự đại diện trong SQL. Giả sử bạn đang kiểm tra sự tồn tại của một bảng có tên là EMPLOYEE_SALARY
. Sau đó, bạn sẽ nhận được một trận đấu trên EMPLOYEESSALARY
quá mà không phải là những gì bạn muốn.
Ồ, và nhớ đóng những bộ kết quả đó. Kể từ Java 7, bạn sẽ muốn sử dụng một try-with-resources statement cho điều đó.
Dưới đây là một giải pháp hoàn chỉnh:
public static boolean tableExist(Connection conn, String tableName) throws SQLException {
boolean tExists = false;
try (ResultSet rs = conn.getMetaData().getTables(null, null, tableName, null)) {
while (rs.next()) {
String tName = rs.getString("TABLE_NAME");
if (tName != null && tName.equals(tableName)) {
tExists = true;
break;
}
}
}
return tExists;
}
Bạn có thể muốn xem xét những gì bạn vượt qua như types
tham số (tham số thứ 4) trên getTables()
cuộc gọi của bạn. Thông thường tôi sẽ rời khỏi số null
vì bạn không muốn giới hạn bản thân. VIEW là tốt như một bảng, phải không?Những ngày này nhiều cơ sở dữ liệu cho phép bạn cập nhật thông qua VIEW để hạn chế bản thân đối với chỉ loại TABLE trong hầu hết các trường hợp không phải là cách để đi. YMMV.
bản sao có thể có của [Làm thế nào tôi có thể phát hiện sự tồn tại của bảng SQL trong Java?] (Http://stackoverflow.com/questions/927807/how-can-i-detect-a-sql-tables-existence -in-java) – finnw
Hãy cụ thể hơn trong câu hỏi của bạn. –