如何在Java中检测SQL表的存在?

时间:2009-05-29 19:48:19

标签: java sql database

如何检测Java中给定SQL数据库中是否存在某个表?

10 个答案:

答案 0 :(得分:37)

您可以使用DatabaseMetaData.getTables()获取有关现有表格的信息。

此方法透明地工作,并且独立于数据库引擎。我认为它在幕后查询信息模式表。

修改

这是an example that prints all existing table names

DatabaseMetaData md = connection.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
  System.out.println(rs.getString(3));
}

答案 1 :(得分:13)

使用java.sql.DatabaseMetaData.getTables(null, null, YOUR_TABLE, null)。如果该表存在,您将获得一个包含一条记录的ResultSet

请参阅DatabaseMetaData.getTables

答案 2 :(得分:1)

这不是特定于语言的问题,而是特定于数据库的问题。您将在数据库中查询该特定对象是否存在的元数据。

例如在SQL Server中:

SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table]')
   AND type in (N'U')

答案 3 :(得分:1)

编写查询将查询将列出表的表/视图的查询(这取决于数据库供应商)。从Java中调用它。

谷歌搜索information_schema.tables将会有很大帮助。

答案 4 :(得分:1)

为什么不查看它是否在sysobjects中(对于SQL Server)?

SELECT [name] FROM [sysobjects] WHERE type = 'U' AND [name] = 'TableName'

答案 5 :(得分:1)

有一个JDBC功能,独立于数据库供应商 - 请参阅[java.sql.DatabaseMetaData#getTables()] [1]

您可以通过调用java.sql.Connection#getMetaData()

来获取DatabaseMetaData实例

[1]:http://java.sun.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,java.lang.String,java.lang.String,java.lang.String [])

答案 6 :(得分:1)

对于所有符合ANSI标准的数据库: (mySQL,SQL Server 2005/2008,Oracle,PostgreSQL,SQLLite,也许还有其他人)

select 1 from information_schema.tables where table_name = @tableName

答案 7 :(得分:1)

这是jdbc:derby对我有用的东西:

//Create Staff table if it does not exist yet
String tableName = "STAFF";
boolean exists = conn.getMetaData().getTables(null, null, tableName, null).next();
if(!exists){
    s = conn.createStatement();
    s.execute("create table staff(lastname varchar(30), firstname varchar(30), position varchar(20),salary double,age int)");
    System.out.println("Created table " + tableName);
}

请注意,tableName必须全部大写。

答案 8 :(得分:0)

根据数据库,你可以做(​​MySQL)

SHOW TABLES

或(Oracle)

SELECT * FROM user_objects WHERE object_type = 'TABLE'

或SQL Server的另一件事。循环查看MySQL的结果或进一步过滤Oracle。

答案 9 :(得分:0)

对于MS Access:

Select Count(*) From MSysObjects 
Where type=1 And name='your_table_name_here'