不匹配table_names jdbc程序显示结果和sql显示结果

时间:2013-10-08 10:55:11

标签: oracle jdbc

我的jdbc程序代码

package table;
import java.sql.*;

public class sdfjksjk {

   static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";  
   static final String DB_URL = "jdbc:oracle:thin:@192.168.1.12:1521:aftdb";

   static final String USER = "system";
   static final String PASS = "manager";

   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{

      Class.forName("oracle.jdbc.driver.OracleDriver");


      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);


      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      DatabaseMetaData md = conn.getMetaData(); 
      ResultSet rs = md.
                getTables(null, "SYSTEM", "%", null);
      while (rs.next())
      { 
          System.out.println(rs.getString(3));
          } 

      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){

      se.printStackTrace();
   }catch(Exception e){

      e.printStackTrace();
   }finally{

      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }
   }

}
}

此代码显示231表名,但在我的sql开发人员select table_name from user_tables中显示207表名。我的课程有什么问题?

1 个答案:

答案 0 :(得分:0)

md.getTables的最后一个参数是表类型列表。

您提供值null,其中列出了所有表类型(“TABLE”,“VIEW”以及可能的其他类型)。

在sql developer中,您只看到常规表(而不是视图)。

修改

像这样进行调用以获得常规表:

String regularTables[] = new String[] {"TABLE"};

ResultSet rs = md.
                getTables(null, "SYSTEM", "%", regularTables);