ResultSet tables= dmb.getTables("", "", null, null);
用在mysql中可以查出改数据库下的所有用户的表。而在Oracle中却是所有系统表
ResultSet tables= dmb.getTables("CRM", "dbo", null, null);
这语法在sqlserver中却把视图和表一起查出来了,虽然没有系统表哪位大侠能告诉我这玩意怎么用啊 ~~~~~泪奔~~~~~~~~~~

解决方案 »

  1.   

    ResultSet getTables(String catalog,
                        String schemaPattern,
                        String tableNamePattern,
                        String[] types)
                        throws SQLException
    catalog指的是数据库
    schemaPattern是数据库的用户
    tableNamePattern是表名
    types指的是table、view等
      

  2.   

    ResultSet对象中的getTables方法参数有 getTables(String catalog,string schemapattern,String tablenamepattern,Strin[] type) 返回一个ResultSet对象,每行为一个表的描述,每行的类型和意义如下: TABLE_CAT:String 类型,表的目录,可能为null; catalog 字符串,目录名,""(空串)可以检索没有目录的表,null表示忽略目录; schemapattern字符串,为大纲名称的匹配模式,""可以检索没有大纲的表 tablenamepattern字符串,为表名匹配模式; type字符串,为需要检索的表类型列表,null 表示返回所有类型; 源代码
    Java代码 
    public class TestGettable {   
      
        /**  
         * @param args  
         * @throws Exception  
         */  
        public static void main(String[] args) throws Exception {   
            // TODO Auto-generated method stub   
            String url = "jdbc:oracle:thin:@192.168.0.184:1521:orcl";   
            String[] types = { "TABLE" };// 数组变量types   
            String tt, tp;   
            Class.forName("oracle.jdbc.driver.OracleDriver");   
            Connection con = DriverManager.getConnection(url, "icd", "icd");   
            System.out.println("ok!连接成功!!!!!");   
            DatabaseMetaData dmd = con.getMetaData();   
            // 获取表的相关信息(包括用户建立的表和系统表)   
            ResultSet rs = dmd.getTables(null, null, null, types);   
            /*  
             *  // 获取表,视图相关信息(包括用户建立的表和系统表,以及所有视图)  
             *   
             * ResultSet rs=dmd.getTables(null,null,null,null);  
             *   
             */  
      
            while (rs.next()) {   
                tt = rs.getString("TABLE_NAME");   
                tp = rs.getString("TABLE_TYPE");   
                System.out.println(" 表的名称 " + tt + "   表的类型 " + tp);   
            }   
            // 关闭连接   
            con.close();   
      
        }   
      
    }  
    看看能明白么】
      

  3.   

    不要泪奔先! 
    首先jdbc这个层面有的只是一个规范(从程序层面来说就一个接口),具体每个数据库如何实现这个规范,就不是jdbc自己的事情的,而是每个具体数据库的事情了。对于jdbc的同一个方法,不同数据库实现结果不一样也是情理之中的事了。你可以做一个自己抽象的类定义一个getTable方法,然后针对每个数据库给出不同实现类去覆盖getTable方法。象hibernate这么伟大的框架都对不同数据库做了dialect处理,所以你也可加一层处理,去包装不同数据库的差异。
      

  4.   

    ResultSet对象中的getTables方法参数有  getTables(String catalog,string schemapattern,String tablenamepattern,Strin[] type)  返回一个ResultSet对象,每行为一个表的描述,每行的类型和意义如下:  TABLE_CAT:String 类型,表的目录,可能为null;  catalog 字符串,目录名,""(空串)可以检索没有目录的表,null表示忽略目录;  schemapattern字符串,为大纲名称的匹配模式,""可以检索没有大纲的表  tablenamepattern字符串,为表名匹配模式;  type字符串,为需要检索的表类型列表,null 表示返回所有类型;  源代码
    Java代码  
    public class TestGettable {   
       
      /**   
      * @param args   
      * @throws Exception   
      */   
      public static void main(String[] args) throws Exception {   
      // TODO Auto-generated method stub   
      String url = "jdbc:oracle:thin:@192.168.0.184:1521:orcl";   
      String[] types = { "TABLE" };// 数组变量types   
      String tt, tp;   
      Class.forName("oracle.jdbc.driver.OracleDriver");   
      Connection con = DriverManager.getConnection(url, "icd", "icd");   
      System.out.println("ok!连接成功!!!!!");   
      DatabaseMetaData dmd = con.getMetaData();   
      // 获取表的相关信息(包括用户建立的表和系统表)   
      ResultSet rs = dmd.getTables(null, null, null, types);   
      /*   
      * // 获取表,视图相关信息(包括用户建立的表和系统表,以及所有视图)   
      *   
      * ResultSet rs=dmd.getTables(null,null,null,null);   
      *   
      */   
       
      while (rs.next()) {   
      tt = rs.getString("TABLE_NAME");   
      tp = rs.getString("TABLE_TYPE");   
      System.out.println(" 表的名称 " + tt + " 表的类型 " + tp);   
      }   
      // 关闭连接   
      con.close();   
       
      }   
       
    }   
    看看能明白么】