5

我的代码使用 MySql、jdbc 和 java。我希望代码检查是否:

1- 表存在于特定数据库中。2- 列存在于特定数据库的特定表中。

你能告诉我怎么做吗?

4

4 回答 4

11

正确的方法是使用 JDBC MetaData

Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DatabaseMetaData metadata = connection.getMetaData();
ResultSet resultSet;
resultSet = metadata.getTables(null, null, "tablename", null);
if(resultSet.next())
    // Table exists

resultSet = metadata.getColumns(null, null, "tablename", "columnName");
if(resultSet.next())
    // Column exists

要调试您的代码,最好先尝试获取所有表名并将它们打印出来,如下所示:

resultSet = metadata.getTables(null, null, "%", null);
while(resultSet.next())
    System.out.println(resultSet.getString("TABLE_NAME"));

注意!如果没有列出表,则您使用的是旧版本的 MySQL JDBC 驱动程序,存在以下错误http://bugs.mysql.com/bug.php?id=20913您应该升级或使用数据库名称作为第一个参数获取表

于 2012-07-30T21:30:54.673 回答
1

查找表:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = 'db_name' 
AND table_name = 'table_name';

如果存在,则查找该列:

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'table_name' 
AND COLUMN_NAME = 'column_name'
于 2012-07-30T21:28:31.597 回答
0

使用Connection.getMetaData(),并使用返回的对象来获取目录、模式、表和列。

于 2012-07-30T21:26:44.590 回答
0
 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 DatabaseMetaData metadata = connection.getMetaData();
 ResultSet resultSet;
 resultSet = metadata.getTables(null, null, "tablename", null);
 if(resultSet!=null){
   // next() checks if the next table exists ...
      System.out.println("Table exists");
 }
于 2013-01-18T13:25:01.147 回答