如何检测Java中给定SQL数据库中是否存在某个表?
答案 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
。
答案 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'