现在的位置: 首页 > 综合 > 正文

JAVA 获取数据库中表的结构

2018年05月19日 ⁄ 综合 ⁄ 共 2733字 ⁄ 字号 评论关闭

网上的方法:

	private Connection connection;
	private Statement statement;

	public void initConnection(String driverClass, String dbUrl, String username, String password) throws Exception {
		Class.forName(driverClass);
		this.connection = DriverManager.getConnection(dbUrl, username, password);
		this.statement = this.connection.createStatement();
	}

	public ResultSetMetaData getMetaDataFromTable(String tableName) throws Exception {
		String sql = "SELECT * FROM " + tableName.toUpperCase() + " WHERE 1 != 1";
		ResultSet rs = this.statement.executeQuery(sql);
		return rs.getMetaData();
	}

	public void displayMetaData(ResultSetMetaData metaData) throws Exception {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < metaData.getColumnCount(); i++) {
			sb.append("\n");
			sb.append(metaData.getTableName(i + 1));
			sb.append(".");
			sb.append(metaData.getColumnName(i + 1));
			sb.append("|");
			sb.append(metaData.getColumnType(i + 1));
			sb.append("|");
			sb.append(metaData.getColumnTypeName(i + 1));
			sb.append("|");
			sb.append(metaData.getColumnDisplaySize(i + 1));
			sb.append("|");
		}
		System.out.println(sb.toString());
	}

我的方法,有点小问题就是表中无数据时无法得到结构

import java.sql.*;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

public class TestDatabaseTableName{

 public static void main(String[] args) throws Exception {
  // 驱动
  String driver = "com.mysql.jdbc.Driver";
  // 数据库连接
  String url = "jdbc:mysql://localhost:4828/xfhex_oa";
  // 用户名
  String user = "root";
  // 数据库密码
  String password = "123";
  // 加载驱动
  Class.forName(driver);
  // 获取链接
  Connection connection = DriverManager
    .getConnection(url, user, password);
  // 创建查询声明
  PreparedStatement preparedStatement = connection
    .prepareStatement("from xfhex_user");
  // 获取结果
  ResultSet resultSet = preparedStatement.executeQuery();
  // 获取各个列的信息
  ResultSetMetaData metaData = resultSet.getMetaData();
  // 一条数据保存在一个Hashtable 将所有Hashtable存放到list
  List<Hashtable<String, Object>> rows = new ArrayList<Hashtable<String, Object>>();
  while (resultSet.next()) {
   Hashtable<String, Object> row = new Hashtable<String, Object>();
   for (int i = 1; i <= metaData.getColumnCount(); i++) {
    // 打印列名
    System.out.println(metaData.getColumnName(i));
    row.put(metaData.getColumnName(i), resultSet.getObject(i));
   }
   rows.add(row);
  }
  resultSet.close();
  preparedStatement.close();
  connection.close();
 }

}

注意:
ResultSetMetaData 对象可以用于查找 ResultSet 中的列的类型和特性。
方法索引
getCatalogName(int)
获得列的表的目录名。
getColumnCount()
获得 ResultSet 中的列数。
getColumnDisplaySize(int)
获得列的正常的最大字符宽度。
getColumnLabel(int)
获得打印输出和显示的建议列标题。
getColumnName(int)
获得列名。
getColumnType(int)
获得一个列的 SQL 类型。
getColumnTypeName(int)
获得一个列的数据源特定的类型名。
getPrecision(int)
获得一个列的十进制数字的位数。
getScale(int)
获得一个列的十进制小数点右面数字的位数。
getSchemaName(int)
获得一个列的表的模式。
getTableName(int)
获得列的表名。
isAutoIncrement(int)
列是否自动计数,因此它是只读的。
isCaseSensitive(int)
列是否区分大小写。
isCurrency(int)
列是否是通用的。
isDefinitelyWritable(int)
对列的写操作是否一定成功。
isNullable(int)
在该列中是否可以放一个 NULL 值。
isReadOnly(int)
列是否是不可写的。
isSearchable(int)
该列是否是可以查询的。
isSigned(int)
该列是否是有符号数。
isWritable(int)
对该列的写操作是否会成功。

 

抱歉!评论已关闭.