版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39531549/article/details/82795993
一、元数据
1、数据库的元数据
*元数据:数据库、或者数据库表,表中的字段的一些信息,比如数据库名称,驱动,表中的主键的名称。
*作用:主要完成一些通用型比较高得代码,一般都是使用在框架里面
*在数据库里面,有三类元数据
-第一类:数据库元数据.
--如何获取数据库的元数据
通过connection.getMetaData()得到数据库元数据DatabaseMetaData对象
*DatabaseMetaData对象方法
-getDriverClassName():获取数据库驱动名称
-getURL():获取连接数据库的地址
-getUserName():获取连接数据库的用户名
-getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types):获取数据库表的描述
-getPrimaryKeys(String catalog,String schema,String table):获取表中主键的描述
-第二类: 参数元数据
--如何获取参数元数据
通过preparedStatement.getParameterMetaData()获取参数元数据ParameterMetaData
*ParameterMetaData方法
-getParameterCount():得到参数的数量******
-getparameterTypeName(int param):得到指定位置参数的类型
--该方法存在的问题:
在mysql数据库里面,对参数元数据的支持不是很好想要让mysql数据库支持参数元数据,需要设置一下即使添加了?generateSimpleParameterMetadata=true,对参数元数据的支持也不是很好,无论什么类型得到的都是varchar
-第三类:结果集元数据
--如何得到结果集元数据
通过preparedStatement方法getMetaData得到结果集元数据ResultSetMetaData
*ResultSetMetaData里面的方法:
-getColumnCount():得到结果集里面列的数量
-getColumnName(int column):得到结果集指定列名称
-getColumnTypeName(int column):获得指定列的类型
二、代码演示
package com.ayit.review;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.SQLError;
/**
* 元数据的复习
* @author XiaYuJia
*/
public class review {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
// 创建ComboPooledDataSource对象,用户获取数据源
ComboPooledDataSource ds = new ComboPooledDataSource();
// 获取连接Connection
connection = ds.getConnection();
// 数据库元数据
DatabaseMetaData metaData = connection.getMetaData();
System.out
.println("==========================================================");
// 获取数据库参数
String driverName = metaData.getDriverName();
String url = metaData.getURL();
String userName = metaData.getUserName();
System.out.println("DName:" + driverName + " url:" + url + " userName:" + userName);
ResultSet pkey = metaData.getPrimaryKeys(null, null, "account");
ResultSet tables = metaData.getTables(null, null, "account", new String[] { "TABLE" });
while (tables.next()) {
System.out.println(tables.getString("TABLE_NAME"));
}
while (pkey.next()) {
System.out.println("name:" + pkey.getString(1));
}
// 编写sql语句
String sql = "select * from account where id = ?";
// 预编译
pst = connection.prepareStatement(sql);
System.out
.println("==========================================================");
// 参数元数据
ParameterMetaData pmd = pst.getParameterMetaData();
int parameterCount = pmd.getParameterCount();
String parameterTypeName = pmd.getParameterTypeName(1);
System.out.println("count:" + parameterCount+ " parameterTypeName:" + parameterTypeName);
System.out
.println("==========================================================");
// 结果集元数据
ResultSetMetaData rmd = pst.getMetaData();
int columnCount = rmd.getColumnCount();
String columnName = rmd.getColumnName(1);
String columnTypeName = rmd.getColumnTypeName(1);
System.out.println("Count:" + columnCount + " columnName:"+ columnName + " columnTypeName:" + columnTypeName);
pst.setInt(1, 2);
rs = pst.executeQuery();
// 遍历结果集
while (rs.next()) {
String string = rs.getString(1);
String string2 = rs.getString(2);
int int1 = rs.getInt(3);
System.out.println(string + ":" + string2 + int1);
}
} catch (SQLException e) {
// 释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
rs = null;
}
if (pst != null) {
try {
pst.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
pst = null;
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e1) {
e.printStackTrace();
}
connection = null;
}
e.printStackTrace();
}
}
}