酷符网java, 数据库 > 正文

java读取数据库表的列名

2011-03-25 16:36codeif.com

我们写开发文档,不想一个一个字段的复制粘贴,我们能不能使用java把每列的列名,数据类型,长度之类的信息读出,这里我们以读取MySQL数据库为例
参考文章:

http://www.java2s.com/CN/Code/Java/Database-SQL-JDBC/UseDatabaseMetaDatatogettablecolumnnames.htm

代码如下:

package com.codeif;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class ColumnNameTest {

    private static String driver = null;
    private static String url = null;
    private static String user = null;
    private static String password = null;

    static { // 把读取文件放到静态初始化块,每次执行只加载一次即可,减少读取文件的次数
        Properties pro = new Properties();
        try {
            pro.load(ColumnNameTest.class
                    .getResourceAsStream("jdbc.properties")); // 从文件中取内容
            // 获取信息
            driver = pro.getProperty("jdbc.driver");
            url = pro.getProperty("jdbc.url");
            user = pro.getProperty("jdbc.username");
            password = pro.getProperty("jdbc.password");
        } catch (Exception e1) {
            // e1.printStackTrace();
            throw new RuntimeException(e1);
        }
    }

    public static Connection getConnection() {
        // 一下信息放到了文件 jdbc.properties,便于切换数据库
        Connection conn = null;
        try {
            Class.forName(driver); // 步骤一
            conn = DriverManager.getConnection(url, user, password);// 步骤二
        } catch (Exception e) {
            // e.printStackTrace();
            throw new RuntimeException(e);
        }
        return conn;
    }

    public static void close(ResultSet rs, Statement stmt, Connection conn) { // 步骤六
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

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

        Connection conn = getConnection();
        DatabaseMetaData metadata = conn.getMetaData();
        ResultSet rs = metadata.getColumns(null, null, "tableName", null);
        while (rs.next()) {
            String name = rs.getString("COLUMN_NAME");
            String type = rs.getString("TYPE_NAME");
            int size = rs.getInt("COLUMN_SIZE");

            System.out.println("Column name: [" + name + "]; type: [" + type
                    + "]; size: [" + size + "]");
        }
        close(rs, null, conn);
    }

}

类的相同目录下放一个jdbc.properties文件,内容如下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

相关文章

新浪微博 | 淘段子 | 我的博客 | 淘宝店铺 | jnan.org | RSS
Copyright © 2009 - 2011 酷符网