java数据库编程:使用元数据分析数据库
databaseMetaData
使用元数据可以分析数据库基本信息,包括版本,数据库名称,或者指定表的主键。


代码实例
package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.DatabaseMetaData ;
import java.sql.ResultSet ;
public class DatabaseMetaDataDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
DatabaseMetaData dmd = null ; // 数据库元数据
ResultSet rs = null ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
dmd = conn.getMetaData() ; // 实例化对象
System.out.println("数据库名称:" + dmd.getDatabaseProductName() ) ;
System.out.println("数据库版本:" + dmd.getDatabaseMajorVersion() + "."//分别得到主版本号和次版本号
+ dmd.getDatabaseMinorVersion()) ;
rs = dmd.getPrimaryKeys(null,null,"user") ; // 取得user表的主键
while(rs.next()){
System.out.println("表类别:" + rs.getString(1)) ;
System.out.println("表模式:" + rs.getString(2)) ;
System.out.println("表名称:" + rs.getString(3)) ;
System.out.println("列名称:" + rs.getString(4)) ;
System.out.println("主键序列号:" + rs.getString(5)) ;
System.out.println("主键名称:" + rs.getString(6)) ;
}
conn.close() ; // 数据库关闭
}
};
运行结果:
Sun Apr 23 12:42:47 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
数据库名称:MySQL
数据库版本:5.7
表类别:sys
表模式:null
表名称:user
列名称:age
主键序列号:1
主键名称:PRIMARY
对于获取主键的方法getPrimaryKeys,返回值是什么有以下说明:
当然DatabaseMetaData还有以下等等一堆方法:
ResultSetMetaData
使用这个接口,可以获取ResultSet对象中列的类型和属性,ResultSetMetadata存储了ResultSet的Meta。可以通过以下方法获取ResultSet的信息。

代码实例:
package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.ResultSetMetaData ;
import java.sql.PreparedStatement ;
public class ResultSetMetaDataDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
ResultSetMetaData rsmd = null ; // 数据库元数据
PreparedStatement pstmt = null ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "SELECT name,age,birthday FROM user" ;
pstmt = conn.prepareStatement(sql) ; // 实例化对象
rsmd = pstmt.getMetaData() ; //注意,这里没有进行pstmt进行语句执行。
System.out.println("一共返回" + rsmd.getColumnCount() + "条数据。") ;
if(rsmd.isAutoIncrement(1) ){
System.out.println(rsmd.getColumnName(1)+"列是自动增长的。") ;
}
conn.close() ; // 数据库关闭
}
};
输出结果:
Sun Apr 23 12:56:59 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
一共返回3条数据。
因为这个表的主键是age,并且没有设置自动增长。
以上操作,一般在数据开发的底层比较经常使用,类似反射机制,取得基本信息,基本开发是不会使用的。
java数据库编程:使用元数据分析数据库的更多相关文章
- Java数据库——使用元数据分析数据库
在JDBC中提供了DatabaseMetaData和ResultSetMetaData接口来分析数据库的元数据. DatabaseMetaData 使用DatabaseMetaData取得数据库的元信 ...
- 吴裕雄--天生自然JAVA数据库编程:使用元数据分析数据库
import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import j ...
- JAVA数据库编程、JAVA XML解析技术
JDBC概述 JDBC是JAVA中提供的数据库编程API curd :数据库增删改 链接字符串:String url = "mysql :/localhost :3306/jdbc/&quo ...
- 七,JOBC数据库编程
七,JOBC数据库编程 七,JOBC数据库编程 一,java数据库编程步骤 1,将数据库驱动包考入lib目录: 2,加载驱动--整个操作数据库程序运行期间只需要加载一次 Class.forName(& ...
- java数据库编程——读写LOB、可滚动和可更新的结果集、元数据
java 数据库编程 1. 读写LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其它数据.在SQL中,二进制大对象称为BLOB,字符型大对象称为CLOB. 要读取LOB,需要 ...
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- Java数据库编程、XML解析技术
数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...
- java 数据库编程 学习笔记 不断更新
最近开始学习java,感觉java的数据库编程需要发个随笔记录一下,话不多说 切入正题. 一.数据库访问技术的简介 应用程序 → 执行SQL语句 →数据库 → 检索数据结果 → 应用程序 ( ...
- JAVA数据库编程(JDBC技术)-入门笔记
本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学 ...
随机推荐
- python 写文件write(string), writelines(list) ,读文件
read()方法用于直接读取字节到字符串中,可以接参数给定最多读取的字节数,如果没有给定,则文件读取到末尾. readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节),然后整行,包 ...
- [Codeforces #211] Tutorial
Link: Codeforces #211 传送门 一套非常简单的题目,但很多细节都是错了一次才能发现啊…… 还是不能养成OJ依赖症,交之前先多想想corner case!!! A: 模拟,要特判0啊 ...
- 【思路】Aizu - 1367 - Rearranging a Sequence
给你一个1~n排好的数组,每次提一个数到最前面,问你最后形成的序列. 就把他的输入顺序倒过来输出即可.没出现过的再按原序输出. #include<cstdio> using namespa ...
- 【Java】【高精度】【递推】UVA - 11375 - Matches
d[i+c[j]]+=d[i](c[j]是拼成j所需的火柴数) d[0]=1: 别忘了不能有前导零,所以当i为零时,不要尝试去拼成零.反而应该在n>=6时,最后给答案加1(单独拼出0). imp ...
- 【tarjan+缩点】POJ1236[IOI1996]-Network of Schools
[题意] 见:http://blog.csdn.net/ascii991/article/details/7466278 [思路] 缩点+tarjan,思路也可以到上面的博客去看.(吐槽:这道题其实我 ...
- 基于socket的udp传输,socketserver模块,进程
基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...
- Hibernate的QBC检索方式
Hibernate的QBC检索方式 一直习惯了Hibernate的HQL查询,一直也觉得挺方便,对于最近项目里出现的QBC(org.hibernate.Criteria接口)也是报着一种看看的心理,因 ...
- Ui Automator Test Through Command
问题描述: 通过adb shell uiautomator runtest 命令,直接运行java测试例. 命令解析: adb shell uiautomator runtest <JARS&g ...
- <摘录>算法策略的总结
策略是面向问题的,算法是面向实现的. 一.不同算法策略特点小结 1.贪心策略 贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法. 贪心策略解决 ...
- MySQL优化之如何了解SQL的执行频率
http://www.jb51.net/article/50180.htm show [session|global] status 可以根据需要加上参数“ session ”或者“ global ” ...
