十三、元数据操作

一、什么是元数据
其实就是对数据库、表、列的定义信息的封装.

二、DataBaseMetaData
【数据库的元数据】
Connection.getMetaData():返回DataBaseMetaData 对象
getURL() :返回一个 String 类对象,代表数据库的 URL
getUserName() :返回连接当前数据库管理系统的用户名。
getDatabaseProductName() :返回数据库的产品名称。
getDatabaseProductVersion() :返回数据库的版本号。
getDriverName() :返回驱动驱动程序的名称。
getDriverVersion() :返回驱动程序的版本号。
isReadOnly() :返回一个 boolean 值,指示数据库是否只允许读操作


三、ParameterMetaData
Sql 语句的元数据】
PreparedStatement.getParameterMetaData() :返回ParameterMetaData 对象。
getParameterCount() :获得指定参数的个数
getParameterType(int param) :获得指定参数的 sql 类型(驱动可能不支持)


四、ResultSetMetaData
【结果集的元数据】
ResultSet.getMetaData() :返回 ResultSetMetaData 对象。
ResultSetMetaData.getColumnCount() :返回 resultset 对象的 列数
getColumnName(int column) :获得指 定列的名称
getColumnTypeName(int column) :获得指 定列的类型 java.sql.Types


五、使用演示

项目结构

demo1

package demo1;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

import utils.JdbcUtils;

public class DatabaseMetaDataDemo {

	public static void main(String[] args) {
		//1.通过c3p0连接池获得连接
		Connection conn = JdbcUtils.getConnection();
		//2.拿到DatabaseMetaData对象
		try {
			DatabaseMetaData data = conn.getMetaData();
			
			//测试1:获取url -->jdbc:mysql:///mydb1
			System.out.println(data.getURL());
			
			//测试2:获取当前连接数据库的用户名 -->root@localhost
			System.out.println(data.getUserName());
			
			//测试3:获取当前数据库的名称 -->MySQL
			System.out.println(data.getDatabaseProductName());
			
			//测试4:获取当前数据库的版本信息 -->5.5.49
			System.out.println(data.getDatabaseProductVersion());
			
			//测试5:获取驱动的名称 -->MySQL Connector Java
			System.out.println(data.getDriverName());
			
			//测试6:获取驱动的版本 -->ysql-connector-java-5.1.39 ( Revision: 3289a357af6d09ecc1a10fd3c26e95183e5790ad )
			System.out.println(data.getDriverVersion());
			
			//测试7:是否是只读的 -->false
			System.out.println(data.isReadOnly());
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JdbcUtils.release(null, null, conn);
		}
		
	}

}

demo2

package demo2;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import utils.JdbcUtils;

public class ParameterMetaDataDemo {

	public static void main(String[] args) {
		// 1.通过cp30获取连接对象
		Connection conn = JdbcUtils.getConnection();

		PreparedStatement stmt = null;

		try {
			// 2.得到PreparedStatement对象
			stmt = conn.prepareStatement("update account set money = ? where id= ?");

			// 3.得到ParameterMetaData元数据
			ParameterMetaData data = stmt.getParameterMetaData();

			// 测试:获得占位符的个数
			System.out.println(data.getParameterCount());
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(null, stmt, conn);
		}

	}

}

demo3

package demo3;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import utils.JdbcUtils;

public class ResultSetMetaDataDemo {

	public static void main(String[] args) {
		// 1.通过cp30获取连接对象
		Connection conn = JdbcUtils.getConnection();
		PreparedStatement stmt = null;
		ResultSet rs = null;
		// 2.得到PreparedStatement对象
		try {
			stmt = conn.prepareStatement("select * from account");
			// 3.拿到结果集
			rs = stmt.executeQuery();

			// 4.通过结果集拿到结果集的元数据
			ResultSetMetaData data = rs.getMetaData();

			// 测试:获得列的个数
			System.out.println("count=" + data.getColumnCount());

			// 测试:获得所有的列名和具体的类型
			for (int i = 0; i < data.getColumnCount(); i++) {
				// 得到列名
				System.out.println("name=" + data.getColumnName(i + 1));

				// 获得列名具体的类型 值
				System.out.println("type=" + data.getColumnType(i + 1));

				// 得到具体列的类型
				System.out.println("typeName=" + data.getColumnTypeName(i + 1));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.release(rs, stmt, conn);
		}

	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值