数据库——元数据(数据库元数据、参数元数据、结果集元数据)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_39531549/article/details/82795993
今日推荐