如何通过Java检查oracle中是否存在具有给定名称的表?

时间:2011-03-12 07:20:36

标签: java

我有csv文件,我想将该数据导入oracle数据库。 但在此之前我想要检查表'xyz'是否存在于数据库中。

我想通过java来实现..谁知道如何通过java做到这一点?

4 个答案:

答案 0 :(得分:5)

您可以使用可用的元数据:

DatabaseMetaData meta = con.getMetaData();
  ResultSet res = meta.getTables(null, null, null, 
     new String[] {"TABLE"});
  while (res.next()) {
     System.out.println(
        "   "+res.getString("TABLE_CAT") 
       + ", "+res.getString("TABLE_SCHEM")
       + ", "+res.getString("TABLE_NAME")
       + ", "+res.getString("TABLE_TYPE")
       + ", "+res.getString("REMARKS")); 
  }

有关详细信息,请参阅here

答案 1 :(得分:2)

维基百科在getting at oracle metadata上有一些很好的信息。

 SELECT
 COUNT(1)
 FROM
 ALL_TABLES
 WHERE
 TABLE_NAME = 'NAME_OF_TABLE'

将NAME_OF_TABLE替换为您的表名,如果您得到1的结果,则表示您拥有该表。

答案 2 :(得分:2)

您可以运行虚拟SQL,如:

select from * 'xyz' where 1 = 2

如果您没有收到“ORA-00942表或视图不存在”等任何异常,则表格存在。

或者您选择优雅的方式:

select * from USER_OBJECTS where OBJECT_TYPE = 'TABLE' and OBJECT_NAME = 'xyz';

答案 3 :(得分:1)

public class Main 
{

  public static void main(String[] args) throws Exception 
  {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//server.local:1521/prod", "scott", "tiger");
    conn.setAutoCommit(false);
    DatabaseMetaData dbmd = conn.getMetaData();
    ResultSet rset = dbmd.getTables("", "SCOTT", "EMP", null);
    while (rs.next()) 
    {
      System.out.println(rs.getString(3));
      //OR use whatever progmatically you want to do if table exist
    }  
    stmt.close();
  }
}