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,并且没有设置自动增长。

以上操作,一般在数据开发的底层比较经常使用,类似反射机制,取得基本信息,基本开发是不会使用的。

最新文章

  1. Extjs MVC开发模式详解
  2. C# 字典 Dictionary 转 JSON 格式遍历
  3. QT学习第2天
  4. 说说Web API数据格式化——Json
  5. java获取时间戳的方法
  6. MVC中Linq to sql创建数据模型
  7. MYSQL远程登录权限设置
  8. oracle ref游标
  9. QT QSqlQuery QSqlQueryModel
  10. VMware网络选项分析
  11. chrome浏览器默认样式覆盖input背景
  12. PIN的经验和技巧
  13. CefSharp使用入门
  14. memcache的基本操作
  15. webpack.optimize.UglifyJsPlugin配置说明
  16. [CocoaPods]pod安装与pod更新
  17. (网页)angularjs中的验证input输入框只能输入数字和小数点
  18. Linux 命令之mv
  19. powerdesigner16.5 破解
  20. jenkins 添加节点问题

热门文章

  1. BZOJ 1982 [Spoj 2021]Moving Pebbles(博弈论)
  2. SOCKET类型定义及应用
  3. Largest Smallest Cyclic Shift
  4. Linux系统/etc/sysconfig目录下没有iptables文件
  5. Inno Setup入门(十九)——Inno Setup类参考(5)
  6. express结合jade模板渲染HTML
  7. Unity 加密解密
  8. JavaScript -- 清除缓存
  9. HDU 4886 TIANKENG’s restaurant(Ⅱ) hash+dfs
  10. python中在ubuntu中安装虚拟环境及环境配置