黑马day12 数据库之元数据

来源:互联网 发布:映射端口怎么设置 编辑:程序博客网 时间:2024/05/16 23:37

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

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 moneyString columnName = metaData.getColumnName(1);System.out.println(columnName);//获取列的名字的类型如id的类型是int name 的类型是varchar money的类型是doubleString 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

1 0
原创粉丝点击