java 读取所有指定数据库所有表名

本文详细介绍了如何使用Java代码获取数据库中的表名、表字段信息及字段注释,包括利用DatabaseMetaData接口进行数据库查询的基本操作,以及通过SQL语句获取所有表名的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/***
 *  2014-07-21日:
 *  oracle数据库, 表结构查询 ,字段信息查询,字段注释查询 
 *  表字段查询 all_tab_columns
 *  表字段注释查询 all_col_comments
 *  @author 王华荣
 * 
 */
public class OracleTable {
    private static final String DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";
    private static final String DATABASE_URL = "jdbc:oracle:thin:@192.168.1.10:1521:orcl";
    private static final String DATABASE_USER = "dev";
    private static final String DATABASE_PASSWORD = "dev";
    private static Connection con = null;
     
    public static Connection getConnection() {
        try {
            Class.forName(DRIVER_CLASS);
            con=DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
            return con;
        } catch (Exception ex) {
            System.out.println("2:"+ex.getMessage());
        }
        return con;
    }
     
    /***
     * 打印test
     * @throws SQLException
     */
    public static void sysoutStrTablePdmCloumns(String Table,String Owner) throws SQLException{
        getConnection();
         
        List<HashMap<String,String>> columns = new ArrayList<HashMap<String,String>>();
         
        try{
            Statement stmt = con.createStatement();
             
            String sql=
             "select "+
             "         comments as \"Name\","+
             "         a.column_name \"Code\","+
             "         a.DATA_TYPE as \"DataType\","+
             "         b.comments as \"Comment\","+
             "         decode(c.column_name,null,'FALSE','TRUE') as \"Primary\","+
             "         decode(a.NULLABLE,'N','TRUE','Y','FALSE','') as \"Mandatory\","+
             "         '' \"sequence\""+
             "   from "+
             "       all_tab_columns a, "+
             "       all_col_comments b,"+
             "       ("+
             "        select a.constraint_name, a.column_name"+
             "          from user_cons_columns a, user_constraints b"+
             "         where a.constraint_name = b.constraint_name"+
             "               and b.constraint_type = 'P'"+
             "               and a.table_name = '"+Table+"'"+
             "       ) c"+
             "   where "+
             "     a.Table_Name=b.table_Name "+
             "     and a.column_name=b.column_name"+
             "     and a.Table_Name='"+Table+"'"+
             "     and a.owner=b.owner "+
             "     and a.owner='"+Owner+"'"+
             "     and a.COLUMN_NAME = c.column_name(+)" +
             "  order by a.COLUMN_ID";
            System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()){
                HashMap<String,String> map = new HashMap<String,String>();
                map.put("Name", rs.getString("Name"));
                map.put("Code", rs.getString("Code"));
                map.put("DataType", rs.getString("DataType"));
                map.put("Comment", rs.getString("Comment"));
                map.put("Primary", rs.getString("Primary"));
                map.put("Mandatory", rs.getString("Mandatory"));
                columns.add(map);
            }
        }
        catch (SQLException e){
            e.printStackTrace();
        }finally{
            con.close();
        }
    }
    public static void main(String[] args) throws SQLException{
         
        sysoutStrTablePdmCloumns("CT_INFO_CONTRACT_BORROW","DEV");
         
         
    }
     
}
复制代码

test

复制代码
java获取数据库里表的名字

博客分类: java
 
一.Java方法 
// 得到当前数据库下所有的表名 
Java代码  收藏代码
public void getTableNameByCon(Connection con) {  
   try {  
   DatabaseMetaData meta = con.getMetaData();  
   ResultSet rs = meta.getTables(null, null, null,  
     new String[] { "TABLE" });  
   while (rs.next()) {  
     System.out.println("表名:" + rs.getString(3));  
     System.out.println("表所属用户名:" + rs.getString(2));  
     System.out.println("------------------------------");  
   }  
   con.close();  
   } catch (Exception e) {  
   try {  
     con.close();  
   } catch (SQLException e1) {  
     // TODO Auto-generated catch block  
     e1.printStackTrace();  
   }  
   // TODO Auto-generated catch block  
   e.printStackTrace();  
   }  
}  
二.通过sql语句得到数据库里所有的表名 
--MySQL数据库 
Java代码  收藏代码
show tables;  
--Oracle数据库(当前登录用户下的表) 
Java代码  收藏代码
select uo.object_name from user_objects uo where uo.object_type = 'TABLE';  
--sql server 2000/2005数据库 
Java代码  收藏代码
select name from sysobjects  
--sybase数据库 
Java代码  收藏代码
select name from sysobjects where type='U';  
--DB2数据库  

Java代码  收藏代码
select tabname from syscat.tables where tabschema = current schema ;//   
获取当前模式下面的所有用户表 

转自:http://hi.baidu.com/rybwxn/blog/item/1a59502a75a7de25d52af1cc.html 
复制代码

test

 

复制代码
首先是DatabaseMetaData接口:

public static void main(String[] args) {   
           
        //这里没有指定数据库   
        String url = "jdbc:mysql://127.0.0.1:3306/";   
        String user = "root";   
        String pass = "";   
        try {   
  
            Class.forName("com.mysql.jdbc.Driver").newInstance();   
            Connection conn = DriverManager.getConnection(url, user, pass);   
            DatabaseMetaData metadata = conn.getMetaData();   
            System.out.println("数据库已知的用户: "+ metadata.getUserName());   
            System.out.println("数据库的系统函数的逗号分隔列表: "+ metadata.getSystemFunctions());   
            System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ metadata.getTimeDateFunctions());   
            System.out.println("数据库的字符串函数的逗号分隔列表: "+ metadata.getStringFunctions());   
            System.out.println("数据库供应商用于 'schema' 的首选术语: "+ metadata.getSchemaTerm());   
            System.out.println("数据库URL: " + metadata.getURL());   
            System.out.println("是否允许只读:" + metadata.isReadOnly());   
            System.out.println("数据库的产品名称:" + metadata.getDatabaseProductName());   
            System.out.println("数据库的版本:" + metadata.getDatabaseProductVersion());   
            System.out.println("驱动程序的名称:" + metadata.getDriverName());   
            System.out.println("驱动程序的版本:" + metadata.getDriverVersion());   
               
            System.out.println();   
            System.out.println("数据库中使用的表类型");   
            ResultSet rs = metadata.getTableTypes();   
            while (rs.next()) {   
                System.out.println(rs.getString(1));   
            }   
            rs.close();   
               
            System.out.println();   
            /**  
             * 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名  
             * 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了  
             * 第二个参数是模式名称的模式,但是输出也是什么都没有。谁知道告诉我一声  
             */  
            System.out.println("获取指定的数据库的所有表的类型");   
            ResultSet rs1 = metadata.getTables("ssi2bbs", null, null, null);   
            while (rs1.next()) {   
                System.out.println();   
                System.out.println("数据库名:"+ rs1.getString(1));   
                System.out.println("表名: "+rs1.getString(3));   
                System.out.println("类型: "+rs1.getString(4));   
            }   
            rs1.close();   
               
            System.out.println();   
            System.out.println("获取指定的数据库的表的主键");   
            //获取指定的数据库的表的主键,第二个参数也是模式名称的模式,使用null了   
            ResultSet rs2 = metadata.getPrimaryKeys("mysql", null, "db");   
            while (rs2.next()) {   
                System.out.println("主键名称: "+ rs2.getString(4));   
            }   
            rs2.close();   
               
            System.out.println();   
            System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:");   
            ResultSet rs3 = metadata.getIndexInfo("ssi2bbs", null, "user", false, true);   
            while (rs3.next()) {   
                System.out.println("数据库名: "+ rs3.getString(1));   
                System.out.println("表模式: "+ rs3.getString(2));   
                System.out.println("表名称: "+ rs3.getString(3));   
                System.out.println("索引值是否可以不唯一: "+ rs3.getString(4));   
                System.out.println("索引类别: "+ rs3.getString(5));   
                System.out.println("索引名称: "+ rs3.getString(6));   
                System.out.println("索引类型: "+ rs3.getString(7));   
                System.out.println("索引中的列序列号: "+ rs3.getString(8));   
                System.out.println("列名称: "+ rs3.getString(9));   
                System.out.println("列排序序列: "+ rs3.getString(10));   
                System.out.println("TYPE为 tableIndexStatistic时它是表中的行数否则它是索引中唯一值的数量: "+ rs3.getString(11));   
                System.out.println("TYPE为 tableIndexStatisic时它是用于表的页数否则它是用于当前索引的页数: "+ rs3.getString(12));   
                System.out.println("过滤器条件: "+ rs3.getString(13));   
            }   
            rs3.close();   
               
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }  
 ResultSetMetaData接口, 用于获取关于ResultSet 对象中列的类型和属性信息的对象。下面的代码是把一个表的列信息打印了出来。当然了,这只是一部分。详细的参考JAVA JDK。

public static void main(String[] args) {   
        try {   
            Class.forName("com.mysql.jdbc.Driver").newInstance();   
            Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ssi2bbs","root","");   
            PreparedStatement ps = conn.prepareStatement("select * from bbs");   
            ResultSet rs = ps.executeQuery();   
            ResultSetMetaData rsme = rs.getMetaData();   
               
            int columnCount = rsme.getColumnCount();   
            System.out.println("ResultSet对象中的列数"+ columnCount);   
            for (int i = 1; i < columnCount ; i++) {   
                System.out.println();   
                System.out.println("列名称: "+ rsme.getColumnName(i));   
                System.out.println("列类型(DB): " + rsme.getColumnTypeName(i));   
                System.out.println("长度: "+ rsme.getPrecision(i) );   
                System.out.println("是否自动编号: "+ rsme.isAutoIncrement(i));   
                System.out.println("是否可以为空: "+ rsme.isNullable(i));   
                System.out.println("是否可以写入: "+ rsme.isReadOnly(i));   
            }   
               
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
           
    }  
复制代码
Java中,要获取数据库的所有、列和属性(字段),通常需要通过JDBC(Java Database Connectivity)驱动程序连接到数据库并执行特定的SQL查询。这里是一个基本的步骤示例: 1. **设置环境**: 首先,确保已添加数据库驱动(如MySQL的`ojdbc8.jar`或PostgreSQL的`postgresql-42.x-jdbc.jar`)到项目类路径,并配置数据库连接信息(URL、用户和密码)。 2. **创建连接**: 使用`DriverManager.getConnection()`方法建立连接。 ```java import java.sql.*; public class Main { private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USER = "username"; private static final String PASS = "password"; public static void main(String[] args) { try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS)) { // 更进一步的操作... } catch (SQLException e) { e.printStackTrace(); } } } ``` 3. **查询**: 使用`DatabaseMetaData`类来获取数据库元数据,包括。这涉及调用`getTables()`方法。 ```java Statement stmt = conn.createStatement(); DatabaseMetaData metaData = conn.getMetaData(); try (ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"})) { while (tables.next()) { System.out.println("Table Name: " + tables.getString("TABLE_NAME")); } } catch (SQLException e) { e.printStackTrace(); } ``` 4. **查询列**: 对于每个,你可以再次使用`DatabaseMetaData`获取列信息,例如`getColumnColumns()`。 5. **查询属性或字段**: 获取列之后,可以使用`ResultSet`迭代每一行,获取具体的列、数据类型等属性。 ```java String tableName = tables.getString("TABLE_NAME"); String query = "SELECT * FROM " + tableName; Statement tableStmt = conn.createStatement(); ResultSet columns = tableStmt.executeQuery(query); while (columns.next()) { String columnName = columns.getString("COLUMN_NAME"); int dataType = columns.getInt("DATA_TYPE"); System.out.printf("Column Name: %s, Data Type: %d\n", columnName, dataType); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值