拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何如何JDBC检查数据库表是否存在

如何如何JDBC检查数据库表是否存在

白鹭 - 2021-11-24 574 0 0

1.简介

在本教程中,我们将研究如何使用JDBC和纯SQL检查数据库中是否存在表。

2.使用DatabaseMetaData

JDBC为我们提供了读写数据到数据库的工具。除了存储在表中的实际数据之外,我们还可以读取描述数据库的元数据。为此,我们将使用可以从JDBC连接获得DatabaseMetaData

DatabaseMetaData databaseMetaData = connection.getMetaData();

DatabaseMetaData提供了许多有用的方法,但我们只需要一种方法: getTables让我们用它来打印所有可用的表:

ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[] {"TABLE"});



 while (resultSet.next()) {

 String name = resultSet.getString("TABLE_NAME");

 String schema = resultSet.getString("TABLE_SCHEM");

 System.out.println(name + " on schema " + schema);

 }

因为我们没有提供前三个参数,所以我们获得了所有目录和模式中的所有表。我们还可以将查询范围缩小到例如仅一个模式:

ResultSet resultSet = databaseMetaData.getTables(null, "PUBLIC", null, new String[] {"TABLE"});

3.检查表是否存在DatabaseMetaData

如果我们要检查表是否存在,则不需要遍历结果集。我们只需要检查结果集是否为空。首先创建一个“ EMPLOYEE”表:

connection.createStatement().executeUpdate("create table EMPLOYEE (id int primary key auto_increment, name VARCHAR(255))");

现在,我们可以使用元数据对象来断言刚刚创建的表确实存在:

boolean tableExists(Connection connection, String tableName) throws SQLException {

 DatabaseMetaData meta = connection.getMetaData();

 ResultSet resultSet = meta.getTables(null, null, tableName, new String[] {"TABLE"});



 return resultSet.next();

 }

请注意,尽管SQL不区分大小写,但getTables方法的实现是区分大小写的。即使我们用小写字母定义一个表,它也将以大写形式存储。因此, getTables方法将对大写的表名进行操作,因此我们需要使用“ EMPLOYEE”而不是“ employee”。

4.检查表是否存在SQL

虽然DatabaseMetaData很方便,但我们可能需要使用纯SQL才能实现相同的目标。**为此,我们需要查看模式“ information_schematables**它是SQL-92标准的一部分,并且由大多数主要的数据库引擎实现(Oracle除外)。

让我们查询“ tables ”表并计算获取多少结果。如果表存在,我们期望一个,如果表不存在,我们期望为零:

SELECT count(*) FROM information_schema.tables

 WHERE table_name = 'EMPLOYEE'

 LIMIT 1;

将其与JDBC一起使用是创建一个简单的预准备语句,然后检查结果计数是否不等于零的问题:

static boolean tableExistsSQL(Connection connection, String tableName) throws SQLException {

 PreparedStatement preparedStatement = connection.prepareStatement("SELECT count(*) "

 + "FROM information_schema.tables "

 + "WHERE table_name = ?"

 + "LIMIT 1;");

 preparedStatement.setString(1, tableName);



 ResultSet resultSet = preparedStatement.executeQuery();

 resultSet.next();

 return resultSet.getInt(1) != 0;

 }

5.结论

在本教程中,我们学习了如何在数据库中查找有关表存在的信息。我们同时使用了JDBC的DatabaseMetaData和纯SQL。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *