`
路过人间puff
  • 浏览: 3590 次
社区版块
存档分类
最新评论

java获取数据库的列名,类型等信息

 
阅读更多
    当你使用和学习JDK的时候,可以查看并学习它所提供给你的两个ResultSetMetaDataDataBaseMetaData类的源码并很好的了解它们的实现原理和思路,JDBC中提供有两种源数据,一种是数据库源数据,另一种是ResultSet源数据。这些源数据就是描述存储用户数据的容器的数据结构。其中ResultSetMetaData类完成了查询结果信息和结果中的列的各种信息。下面我就以ResultSetMetaData为例,简单的罗列它的使用方法以及它内部的方法的使用。
首先,建立一张表并起名为users,表结构描述如下:
 
字段描述          字段名称        是否为空      是否主键
用户编号            id         Not Null       P
用户名称          userName     Not Null
用户密码          password     Not Null

你也可以通过DLL执行下面脚本:(本人使用Mysql)  
 
CREATE TABLE `users` (
  `id` varchar(32) NOT NULL,
  `userName` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk; 

然后向该表中插入几条数据。
最后,新建一个测试类名为TestDemo.java,源代码如下:
package com.wanglihu.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class TestDemo {
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/struts2Demo";
			String user = "root";
			String pass = "123456";
			conn = DriverManager.getConnection(url, user, pass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static void main(String[] args) {
		Connection conn = getConnection();
		String sql = "select * from users";
		PreparedStatement stmt;
		try {
			stmt = conn.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery(sql);
			ResultSetMetaData data = rs.getMetaData();
			while (rs.next()) {
				for (int i = 1; i <= data.getColumnCount(); i++) {
					// 获得所有列的数目及实际列数
					int columnCount = data.getColumnCount();
					// 获得指定列的列名
					String columnName = data.getColumnName(i);
					// 获得指定列的列值
					String columnValue = rs.getString(i);
					// 获得指定列的数据类型
					int columnType = data.getColumnType(i);
					// 获得指定列的数据类型名
					String columnTypeName = data.getColumnTypeName(i);
					// 所在的Catalog名字
					String catalogName = data.getCatalogName(i);
					// 对应数据类型的类
					String columnClassName = data.getColumnClassName(i);
					// 在数据库中类型的最大字符个数
					int columnDisplaySize = data.getColumnDisplaySize(i);
					// 默认的列的标题
					String columnLabel = data.getColumnLabel(i);
					// 获得列的模式
					String schemaName = data.getSchemaName(i);
					// 某列类型的精确度(类型的长度)
					int precision = data.getPrecision(i);
					// 小数点后的位数
					int scale = data.getScale(i);
					// 获取某列对应的表名
					String tableName = data.getTableName(i);
					// 是否自动递增
					boolean isAutoInctement = data.isAutoIncrement(i);
					// 在数据库中是否为货币型
					boolean isCurrency = data.isCurrency(i);
					// 是否为空
					int isNullable = data.isNullable(i);
					// 是否为只读
					boolean isReadOnly = data.isReadOnly(i);
					// 能否出现在where中
					boolean isSearchable = data.isSearchable(i);
					System.out.println(columnCount);
					System.out.println("获得列" + i + "的字段名称:" + columnName);
					System.out.println("获得列" + i + "的字段值:" + columnValue);
					System.out.println("获得列" + i + "的类型,返回SqlType中的编号:"
							+ columnType);
					System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);
					System.out.println("获得列" + i + "所在的Catalog名字:"
							+ catalogName);
					System.out.println("获得列" + i + "对应数据类型的类:"
							+ columnClassName);
					System.out.println("获得列" + i + "在数据库中类型的最大字符个数:"
							+ columnDisplaySize);
					System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);
					System.out.println("获得列" + i + "的模式:" + schemaName);
					System.out
							.println("获得列" + i + "类型的精确度(类型的长度):" + precision);
					System.out.println("获得列" + i + "小数点后的位数:" + scale);
					System.out.println("获得列" + i + "对应的表名:" + tableName);
					System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);
					System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
					System.out.println("获得列" + i + "是否为空:" + isNullable);
					System.out.println("获得列" + i + "是否为只读:" + isReadOnly);
					System.out.println("获得列" + i + "能否出现在where中:"
							+ isSearchable);
				}
			}
		} catch (SQLException e) {
			System.out.println("数据库连接失败");
		}
	}
}
分享到:
评论

相关推荐

    java如何获得数据库表中各字段的字段名

    java如何获得数据库表中各字段的字段名

    java获取mysql数据库表的属性

    本代码是通过java连接mysql数据库,然后获取当前数据库的所有表,以及所有表的属性(包括列名,列类型等)

    获取数据库表的主键列名工具

    两个功能: &lt;br&gt;1、获取数据库的connection 2、获取数据库表的主键PK的列名

    Java使用表格显示查询结果.rar

    super("显示数据库查询结果"); //调用父类构造函数  String[] columnNames={"用户名","年龄","性别","Email"}; //列名  Object[][] rowData=new Object[5][4]; //表格数据  try {   Class.forName(...

    计算机程序设计(Java)-教案--单元十--数据库编程技术.docx.docx

    工程描述 :・利用本章将要学习的Java数据库编程技术,编程开发一个"学生信息管理小工具"; 教学方法 :・问题导引法:通过给学生提出实际编程中出现的问题来引入教学内容,使学生在主动分析、讨论和解决问题的过程中...

    mysql-connector-java-5.1.32.zip

    获取数据库连接 Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8", "root", "root"); /** * statement : 声明 */ ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和数据库应用。全书分5篇24章,共计603个实例和603个经验技巧。每个实例都...

    Java POI合并Excel根据标题取任意列

    不管是poi还是jxl都无法根据列名取数据,简单的合并Excel,如果每个Excel里每列不一定是按顺序来的,或者么些列有缺失,就不好办了,这个合并方式,是依照JDBC读取数据库的方式,把Excel看成是一个数据库表,返回List&lt;Map&lt;&gt;&gt;...

    玩转模板--自动代码生成工程

    自动从数据库中获取表名/表注释/列名/列注释/列类型等等相关信息 示例:由角色表生成domain对象 模版: package $!{package}.domain; import java.util.Date; /** * $!system * @author $!author * @...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...

    Android-app-using-SQLite:使用SQLite数据库存储和检索数据的Android应用。 您现在还可以在Android和可穿戴设备上获取数据更新的通知

    Android应用程序使用SQLite ... 更新可以在DatabaseHelper.java中找到的数据库版本 public DatabaseHelper(Context context) { super( context, DATABASE_NAME, null, 2 ); } 在这里,整数2表示版本。 添

    MyJots-JPA:MyJots 服务的 JPA 库

    JPA 类JPA 类是使用 NetBeans 8“数据库表中的实体”向导设置以下选项生成的: 生成的 NamedQuery 注释JAXB 注释关联获取:默认 (LAZY) 集合类型: java.util.List 使用列名作为关系底层数据库持久化单元配置为以 ...

    YouWebUtils:常用web开发工具集

    YouWebUtils 这是一个“自用”的Web...表处理:表存在/从表中获取所有列名 类名处理:转换类名为符合阿里巴巴手册对应的表名格式 sql脚本执行 Dom4j封装处理 快速xml文件读取 Log4j2封装处理 分主次地融合多个具有log4j

    Hibernate注释大全收藏

    • 属性的类型为 java.sql.Clob or java.sql.Blob, 则映射到 @Lob 对应的类型。 映射主键属性 @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是...

    Oracle 10g 开发与管理

    本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 目录 第一讲 Oacle关系数据库 ...

Global site tag (gtag.js) - Google Analytics