JDBC到了版本3以后加入元数据的功能。JDBC元数据就可以很方便的获取数据库相关的信息。

DatabaseMetaData案例:

package com.what21.jdbc.demo07;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

public class JDBCDemo {

/**

* @return

*/

public static Connection createConnection(){

Connection connection = null;

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo","root","123124");

} catch (Exception e) {

e.printStackTrace();

}

return connection;

}

/**

* 获取最基本的数据库信息

*

* @param connection

* @throws SQLException

*/

public static void showDatabase(Connection connection) throws SQLException {

//获取数据库连接的元数据

DatabaseMetaData meta = connection.getMetaData();

//查询连接的所有Table(如果需要查询视图等,可以在最后的数组中添加VIEW...,依此类推)

ResultSet rsTable = meta.getTables(null, null, null, new String[] { "TABLE" });

//获取到的数据是以ResultSet形式返回

while (rsTable.next()) {

//第一列是Database名称

System.out.print(rsTable.getString(1) + " | ");

//第二列是用户名称(有的表可能没有对应的用户)

System.out.print(rsTable.getString(2) + " | ");

//第三列就是表名称

System.out.println(rsTable.getString(3));

}

}

/**

* 获取一个表的所有主键列的名称列表

*

* @param connection

* @throws SQLException

*/

public static void primaryKeys(Connection connection) throws SQLException {

DatabaseMetaData meta = connection.getMetaData();

//获取制定表的主键列信息

ResultSet rsKey = meta.getPrimaryKeys(null, null, "users");

while (rsKey.next()){

System.out.println(rsKey.getString(4));

}

close(rsKey);

}

/**

* 获取一个表中是外键列的名称列表

*

* @param connection

* @throws SQLException

*/

public static void importedKeys(Connection connection) throws SQLException {

DatabaseMetaData meta = connection.getMetaData();

ResultSet rsKey = meta.getImportedKeys(null, null, "users");

while (rsKey.next()){

System.out.println(rsKey.getString(8));

}

close(rsKey);

}

/**

* 获取一个表中是其他表的外键的列的名称列表

*

* @param connection

* @throws SQLException

*/

public static void exportedKeys(Connection connection) throws SQLException {

DatabaseMetaData meta = connection.getMetaData();

ResultSet rsKey = meta.getExportedKeys(null, null, "users");

while (rsKey.next()){

System.out.println(rsKey.getString(4));

}

close(rsKey);

}

/**

* @param connection

*/

public static void close(Connection connection){

if(connection!=null){

try {

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

connection=null;

}

}

/**

* @param rs

*/

public static void close(ResultSet rs){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

rs=null;

}

}

/**

* @param args

*/

public static void main(String[] args) {

Connection connection = createConnection();

try {

// 获取最基本的数据库信息

showDatabase(connection);

// 获取一个表的所有主键列的名称列表

primaryKeys(connection);

// 获取一个表中是外键列的名称列表

importedKeys(connection);

// 获取一个表中是其他表的外键的列的名称列表

exportedKeys(connection);

} catch (SQLException e) {

e.printStackTrace();

}

close(connection);

}

}

ParameterMetaData案例:

package com.what21.jdbc.demo07;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ParameterMetaData;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class JDBCDemo2 {

/**

* @return

*/

public static Connection createConnection(){

Connection connection = null;

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo","root","123124");

} catch (Exception e) {

e.printStackTrace();

}

return connection;

}

/**

* @param connection

* @throws SQLException

*/

public static void insert(Connection connection)throws SQLException {

String sql = "insert into users(name,email,phone,mobile) value(?,?,?,?)";

PreparedStatement pstat = connection.prepareStatement(sql);

pstat.setString(1, "_name");

pstat.setString(2, "_email");

pstat.setString(3, "_phone");

pstat.setString(4, "_mobile");

ParameterMetaData meta= pstat.getParameterMetaData();

System.out.println("参数个数: " + meta.getParameterCount());

// 获取预编译语句的参数个数

int cols = meta.getParameterCount();

for (int i = 1; i <= cols; i++) {

System.out.print("java数据类型: " + meta.getParameterClassName(i) + " | ");

System.out.print("sql数据类型: " + meta.getParameterTypeName(i));

System.out.println();

}

pstat.execute();

close(pstat);

}

/**

* @param connection

*/

public static void close(Connection connection){

if(connection!=null){

try {

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

connection=null;

}

}

/**

* @param stat

*/

public static void close(Statement stat){

if(stat!=null){

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

stat=null;

}

}

/**

* @param rs

*/

public static void close(ResultSet rs){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

rs=null;

}

}

/**

* @param args

*/

public static void main(String[] args) {

Connection connection = createConnection();

try {

insert(connection);

} catch (SQLException e) {

e.printStackTrace();

}

close(connection);

}

}

ResultSetMetaData案例:

package com.what21.jdbc.demo07;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

public class JDBCDemo3 {

/**

* @return

*/

public static Connection createConnection(){

Connection connection = null;

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo","root","123124");

} catch (Exception e) {

e.printStackTrace();

}

return connection;

}

/**

* @param connection

* @throws SQLException

*/

public static void select(Connection connection)throws SQLException {

Statement stat = connection.createStatement();

String sql = "select * from users";

ResultSet rs = stat.executeQuery(sql);

ResultSetMetaData meta = rs.getMetaData();

int cols = meta.getColumnCount(); // 获取查询结果的列数

for (int i = 1; i <= cols; i++) {

System.out.print("名称:" + meta.getColumnName(i) + " | ");

System.out.print("java类型名称:" + meta.getColumnClassName(i) + " | ");

System.out.print("sql类型名称:" + meta.getColumnTypeName(i) + " | ");

System.out.println("显示需要的最大长度" +meta.getColumnDisplaySize(i));

}

while(rs.next()){

System.out.print("id=" + rs.getInt(1));

System.out.print(",name=" + rs.getString(2));

System.out.print(",email=" + rs.getString(3));

System.out.print(",phone=" + rs.getString(4));

System.out.println(",mobile=" + rs.getString(5));

}

close(rs);

close(stat);

}

/**

* @param connection

*/

public static void close(Connection connection){

if(connection!=null){

try {

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

connection=null;

}

}

/**

* @param stat

*/

public static void close(Statement stat){

if(stat!=null){

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

stat=null;

}

}

/**

* @param rs

*/

public static void close(ResultSet rs){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

rs=null;

}

}

/**

* @param args

*/

public static void main(String[] args) {

Connection connection = createConnection();

try {

select(connection);

} catch (SQLException e) {

e.printStackTrace();

}

close(connection);

}

}

java jdbc元数据_JDBC元数据详解相关推荐

  1. java jdbc 回滚_java_详解Java的JDBC API中事务的提交和回滚,如果JDBC连接是在自动提交模式 - phpStudy...

    详解Java的JDBC API中事务的提交和回滚 如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库. 这可能是对简单的应用程序,但有三个原因,你可能想关 ...

  2. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  3. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

  4. Java开发常见面试题详解(JVM)_2

    Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...

  5. Java包(package)详解

    Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...

  6. java中set和ge什么么意思,java的Collection和Map详解

    java的Collection和Map详解 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文 ...

  7. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  8. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  9. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  10. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

最新文章

  1. ATS 5.3.0中按域名生成日志配置文件log_hosts.config解读
  2. linux配置选项大全,Linux下的十项实用“sudo”配置选项
  3. Linux信号量之内核信号量
  4. 如何使用async和await这对组合设计统一的取Access Token的函数
  5. 通过system调用Am命令执行动作
  6. 关于计算机应用基础问题,《计算机应用基础》习题及问题详解
  7. java类加载过程_java类的加载过程
  8. Objective-C 类和对象
  9. Spring组合注解和元注解
  10. 我在谷歌大脑工作的 18 个月中,是怎样研究强化学习的?
  11. 主流的Web应用程序平台
  12. 全概率公式和贝叶斯公式的应用 (概统1)
  13. vbox win10 分辨率_win10如何更改分辨率?
  14. 计算机的组策略在什么地方,WINDOWS的常用组策略
  15. 计算机win7如何加快开机速度,Win7系统如何提高开机速度?提高开机速度的三种方法步骤...
  16. VScode运行时提示找不到应用程序
  17. 轻型载货汽车(离合器及传动轴设计)
  18. xiunobbs 4 mysql_轻论坛程序 - Xiuno BBS 4.0
  19. 父类引用指向子类对象,为什么会调用的是子类中重新的方法
  20. HTML5、CSS3进阶——字体图标、平面转换

热门文章

  1. eclipse如何设置断点断点处运行快捷键
  2. 进程间通讯:实现基于多进程的文件拷贝
  3. TRUNCATE TABLE command not allowed within multi-statement transaction
  4. 10.11 cocoapods安装
  5. python alembic which comes from SQLalchemy
  6. PHP-dede学习:common.ini.php文件
  7. 从哪查找当前程序所有可用的环境变量?
  8. BigDecimal 加减乘除计算
  9. MyBatis源码阅读(三) --- 配置信息的解析以及SqlSessionFactory构建过程
  10. 【Hoxton.SR1版本】Spring Cloud Stream消息驱动