java jdbc元数据_JDBC元数据详解
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元数据详解相关推荐
- java jdbc 回滚_java_详解Java的JDBC API中事务的提交和回滚,如果JDBC连接是在自动提交模式 - phpStudy...
详解Java的JDBC API中事务的提交和回滚 如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库. 这可能是对简单的应用程序,但有三个原因,你可能想关 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- JVM调优系列--Java命令选项(参数)--大全/详解/常用
原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...
- Java开发常见面试题详解(JVM)_2
Java开发常见面试题详解(JVM)_2 JVM 问题 详解 JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots link 你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认 ...
- Java包(package)详解
Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...
- java中set和ge什么么意思,java的Collection和Map详解
java的Collection和Map详解 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文 ...
- Java中的static关键字详解
** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...
- java中的进制输出转换_Java I/O : Java中的进制详解
作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...
- 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
最新文章
- ATS 5.3.0中按域名生成日志配置文件log_hosts.config解读
- linux配置选项大全,Linux下的十项实用“sudo”配置选项
- Linux信号量之内核信号量
- 如何使用async和await这对组合设计统一的取Access Token的函数
- 通过system调用Am命令执行动作
- 关于计算机应用基础问题,《计算机应用基础》习题及问题详解
- java类加载过程_java类的加载过程
- Objective-C 类和对象
- Spring组合注解和元注解
- 我在谷歌大脑工作的 18 个月中,是怎样研究强化学习的?
- 主流的Web应用程序平台
- 全概率公式和贝叶斯公式的应用 (概统1)
- vbox win10 分辨率_win10如何更改分辨率?
- 计算机的组策略在什么地方,WINDOWS的常用组策略
- 计算机win7如何加快开机速度,Win7系统如何提高开机速度?提高开机速度的三种方法步骤...
- VScode运行时提示找不到应用程序
- 轻型载货汽车(离合器及传动轴设计)
- xiunobbs 4 mysql_轻论坛程序 - Xiuno BBS 4.0
- 父类引用指向子类对象,为什么会调用的是子类中重新的方法
- HTML5、CSS3进阶——字体图标、平面转换
热门文章
- eclipse如何设置断点断点处运行快捷键
- 进程间通讯:实现基于多进程的文件拷贝
- TRUNCATE TABLE command not allowed within multi-statement transaction
- 10.11 cocoapods安装
- python alembic which comes from SQLalchemy
- PHP-dede学习:common.ini.php文件
- 从哪查找当前程序所有可用的环境变量?
- BigDecimal 加减乘除计算
- MyBatis源码阅读(三) --- 配置信息的解析以及SqlSessionFactory构建过程
- 【Hoxton.SR1版本】Spring Cloud Stream消息驱动