我需要检查我的java程序中的数据库中是否存在具有特定“tablename”的表。
数据库可能是不同类型的,即。 MS SQL Server,Oracle,DB2。我有一个数据库的连接对象。是否有一种方法可以适用于所有类型的数据库? 我可能必须扩展java程序以支持更多的数据库类型,因此对所有数据库类型的单一方法将非常有用。
我正在使用的代码。这似乎对SQL Server数据库正常工作,但在Oracle或DB2中找不到该表
DatabaseMetaData meta = conn.getMetaData();
ResultSet res = meta.getTables(null, null, "TABLE_NAME", null);
if(!res.next()){
//table does not exist.
} else{
//table exists.
}
答案 0 :(得分:3)
您可以使用DatabaseMetaData.getTables()过程在数据库中搜索具有特定模式的表。如果您搜索确切的名称,您将获得一个空的ResultSet
或ResultSet
,其中只有一行告诉您该表存在。
无论表是由当前用户还是其他用户拥有,这都适用于Oracle数据库。
import java.sql.*;
import oracle.jdbc.*;
public class TableExists
{
public static String exists(String tableName)
throws SQLException
{
Connection conn = new OracleDriver().defaultConnection();
DatabaseMetaData meta = conn.getMetaData();
ResultSet res = meta.getTables(null, null, tableName, null);
if(!res.next()){
return "Nope";
} else{
return "Yup";
}
}
}
答案 1 :(得分:2)
您可以尝试getTables()
的{{1}}方法。
答案 2 :(得分:1)
非常简单:
SELECT
1
FROM
TABLE
;
如果它抛出异常,则该表不存在(或其他错误)。 否则:
http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,java.lang.String,java.lang.String,java.lang.String [])