码迷,mamicode.com
首页 > 数据库 > 详细

黑马day12 数据库之元数据

时间:2015-07-02 17:40:03      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:元数据

声明:下面的案例在数据库为:

create database day12;

use day12;

create table account(

id int primary key auto_increment,

name varchar(30),

money double

);

使用的c3p0数据库

配置文件:c3p0-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/day12?generateSimpleParameterMetadata=true</property>
    <property name="user">root</property>
    <property name="password">169500</property>
  </default-config>
</c3p0-config>

  

1.介绍Connection的getMetaData()方法

案例:

package com.itheima.matadata;

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

import org.apache.commons.dbutils.DbUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionMataData {
	public static void main(String[] args) {
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		ComboPooledDataSource source=new ComboPooledDataSource();
		try {
			con=source.getConnection();
			DatabaseMetaData metaDate = con.getMetaData();//换取元数据,主要是获取数据库配置信息
			String driverName = metaDate.getDriverName();//驱动名
			String url = metaDate.getURL();//url地址
			String userName = metaDate.getUserName();//用户名
			System.out.println(driverName);
			System.out.println(url);
			System.out.println(userName);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DbUtils.closeQuietly(con, ps, rs);

		}
	}
}
运行结果:

MySQL-AB JDBC Driver
jdbc:mysql://localhost:3306/day12?generateSimpleParameterMetadata=true
root@localhost
2.介绍ParepareStatement的getParameterMetaData()方法

案例:

package com.itheima.matadata;

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

import org.apache.commons.dbutils.DbUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class PrepareStatementMedaData {
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		ComboPooledDataSource source = new ComboPooledDataSource();
		try{
			conn = source.getConnection();
			ps = conn.prepareStatement("select * from account where name=? and money=?");
			//--获取参数元数据
			ParameterMetaData metaData = ps.getParameterMetaData();
			//----参数的个数
			int count = metaData.getParameterCount();
			System.out.println(count);
			//----获取参数的类型
			String type = metaData.getParameterTypeName(1);
			System.out.println(type);
			String type2 = metaData.getParameterTypeName(2);
			System.out.println(type2);
			
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			DbUtils.closeQuietly(conn, ps, rs);
		}
	}
}
其中最重要的是获取参数的个数,,,主要是给框架师使用的,在我的文章的后面自己定义自己的QueryRunner中的update()方法中使用到了。

运行结果:

2      :说明有两个问号
VARCHAR :目前不管什么类型都是varchar,mysql没有这个功能.?generateSimpleParameterMetadata=true见c3p0-config.xml的配置文件中的配置
VARCHAR

3.介绍ResultSet中的getMetaData

案例:

package com.itheima.matadata;

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

import org.apache.commons.dbutils.DbUtils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ResultMetaData {
	public static void main(String[] args) {
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		ComboPooledDataSource source=new ComboPooledDataSource();
		try {
			con=source.getConnection();
			ps=con.prepareStatement("select * from account ");
			rs=ps.executeQuery();
			ResultSetMetaData metaData = rs.getMetaData();
			int count = metaData.getColumnCount();
			System.out.println(count);
			//列的名字比如id name money
			String columnName = metaData.getColumnName(1);
			System.out.println(columnName);
			//获取列的名字的类型如id的类型是int name 的类型是varchar money的类型是double
			String columnTypeName = metaData.getColumnTypeName(2);
			System.out.println(columnTypeName);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DbUtils.closeQuietly(con, ps, rs);
		}
	}
}
int count = metaData.getColumnCount();  这个表一共几列
String columnName = metaData.getColumnName(1); 获取第几列的名字如id name money
String columnTypeName = metaData.getColumnTypeName(2);获取第几列的名字的类型 id的类型是 int 等

运行结果:

3
id
VARCHAR

版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马day12 数据库之元数据

标签:元数据

原文地址:http://blog.csdn.net/u014010769/article/details/46727219

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!