jdbc链接数据库名,获取表名、字段名和数据

本文以MySQL为例,介绍如何通过jdbc连接获取数据库名、表名、字段名及数据。在缺乏具体数据库名称的情况下,作者发现使用'database'可以获取库名。文中提供了一段实现此功能的代码。

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

这里以mysql 为例,最近项目需要外部异表数据源的载入,需要自动获取连接数据的库名,数据表名,字段名和数据。现在做个笔记。

想获取库里面的数据表名,字段名和数据,网上也有很多,怎么写看个人爱好。
获取该连接的库名,由于没有什么资料,我查了也没有结果,主要是接受的字符串不知道是什么,只是一个地址。通过反复试验,用detabase居然可以显示了。
如果只是查询库名的话,url地址可以不用写哪个库 url = “jdbc:mysql://127.0.0.1:3306


        String sql1 = "SHOW DATABASES";
        ResultSet resultSouceSet = statement  
                .executeQuery(sql1);  
        while(resultSouceSet.next()){
            System.out.println(resultSouceSet.getString("database"));

            System.out.println();  

        }  

直接上整套代码:

package ;


import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.HashMap;
import java.util.Properties;
/**
 * 查询库中的表 以及表结构数据
 * @author Administrator
 *
 */
public class ConnTest {

    public static void main(String[] args) throws Exception {  

        String driver = "com.mysql.jdbc.Driver";  
        String url = "jdbc:mysql://127.0.0.1:3306/demo";  
        String user = "root";  
        String password = "root";  

        Class.forName(driver);  
        Connection conn = DriverManager.getConnection(url, user, password);  
        if (!conn.isClosed())  
            System.out.println("Succeeded connecting to the Database!");  
        else  
            System.err.println("connect filed");  
        // 获取所有表名  
        Statement statement = conn.createStatement();  

        //获取该连接下所有的库名
        String sql1 = "SHOW DATABASES";
        ResultSet resultSouceSet = statement  
                .executeQuery(sql1);  
        while(resultSouceSet.next()){
            System.out.println(resultSouceSet.getString("database"));

            System.out.println();  

        }  


        getTables(conn);  

        ResultSet resultSet = statement  
                .executeQuery("select * from table1");  
        //        // 获取列名  
        ResultSetMetaData metaData = resultSet.getMetaData();  
        for (int i = 0; i < metaData.getColumnCount(); i++) {  
            // resultSet数据下标从1开始  
            String columnName = metaData.getColumnName(i + 1);  
            int type = metaData.getColumnType(i + 1);  
            if (Types.INTEGER == type) {  
                // int  
            } else if (Types.VARCHAR == type) {  
                // String  
            }  
            System.out.print(columnName + "\t");  
        }  
        System.out.println();  
                // 获取数据  
                while (resultSet.next()) {  
                    for (int i = 0; i < metaData.getColumnCount(); i++) {  
                        // resultSet数据下标从1开始  
                        System.out.print(resultSet.getString(i + 1) + "\t");  
                    }  
                    System.out.println();  

                }  
        statement.close();  
        conn.close();  

    }  

    public static String convertDatabaseCharsetType(String in, String type) {  
        String dbUser;  
        if (in != null) {  
            if (type.equals("oracle")) {  
                dbUser = in.toUpperCase();  
            } else if (type.equals("postgresql")) {  
                dbUser = "public";  
            } else if (type.equals("mysql")) {  
                dbUser = null;  
            } else if (type.equals("mssqlserver")) {  
                dbUser = null;  
            } else if (type.equals("db2")) {  
                dbUser = in.toUpperCase();  
            } else {  
                dbUser = in;  
            }  
        } else {  
            dbUser = "public";  
        }  
        return dbUser;  
    }  

    private static void getTables(Connection conn) throws SQLException {  
        DatabaseMetaData dbMetData = conn.getMetaData();  
        // mysql convertDatabaseCharsetType null  
        ResultSet rs = dbMetData.getTables(null,  
                convertDatabaseCharsetType("root", "mysql"), null,  
                new String[] { "TABLE", "VIEW" });  

        while (rs.next()) {  
            if (rs.getString(4) != null  
                    && (rs.getString(4).equalsIgnoreCase("TABLE") || rs  
                            .getString(4).equalsIgnoreCase("VIEW"))) {  
                String tableName = rs.getString(3).toLowerCase();  
                System.out.print("tableName: "+tableName + "\t");  
                // 根据表名提前表里面信息:  
                ResultSet colRet = dbMetData.getColumns(null, "%", tableName,  
                        "%");  
                System.out.println();  
                while (colRet.next()) {  
                    String columnName = colRet.getString("COLUMN_NAME");  
                    String columnType = colRet.getString("TYPE_NAME");  
                    int datasize = colRet.getInt("COLUMN_SIZE");  
                    int digits = colRet.getInt("DECIMAL_DIGITS");  
                    int nullable = colRet.getInt("NULLABLE");  
                    System.out.println(columnName + " " + columnType + " "+  
                            datasize + " " + digits + " " + nullable);  
                }  

            }  
        }  
        System.out.println();  

        //         resultSet数据下标从1开始 
        ResultSet tableRet =  conn.getMetaData().getTables(null, null, "%", new String[] { "TABLE" });  
        while (tableRet.next()) {  
            System.out.print(tableRet.getString(3) + "\t");  
        }  
        System.out.println();  

    }  

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值