mysql 别名 metadata_获取数据库元数据:DatabaseMetaData与ParameterMetaData与ResultSetMetaData...

(1)Meta-Data:关于数据的数据,在此是有关数据库和数据库表等数据库对象的信息;

通过Connection的getMetaData()方法获得包含数据库元数据的DatabaseMetaData对象,然后在此对象上调用相关的方法获得对应的信息;

(2)DatabaseMetaData meta = connection.getMetaData();

通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。

ParameterMetaData pmd =

preparedStatement.getParameterMetaData();

通过 ParameterMetaData可以获得参数信息。

(3)ResultSetMetaData meta = rs.getMetaData();

通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等。

可以将ResultSet放入Map(key:列名 value:列值)。

用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping)

1)让SQL语句中列别名和要读入的对象属性名一样;

2)通过ResultSetMetaData获得结果列数和列别名;

3)通过反射将对象的所有setXxx方法找到;

4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的xxx于列别名相等);

5)由上一步找到的方法和列别名对应关系进行赋值

Method.invoke(obj,

rs.getObject(columnAliasName));

代码如下所示:

package com.mysql;

import java.sql.Connection;

import java.sql.ParameterMetaData;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

public class Select {

public void select(int key){

Connection conn = null;

PreparedStatement ps =

null;

ResultSet rs = null;

String sql ="select

v_name,v_pass,v_sex from t_user where id = ? ";

try {

conn =

Tooles.getConnection();

java.sql.DatabaseMetaData

dm = conn.getMetaData();

ps =

conn.prepareStatement(sql);

ps.setInt(1,

key);

rs =

ps.executeQuery();

ParameterMetaData

pm = ps.getParameterMetaData();

ResultSetMetaData

rsm = rs.getMetaData();

while(rs.next()){

System.out.println(rs.getString(1)

+ rs.getString(2)+rs.getString(3));

}

System.out.println("**************************************");

System.out.println(dm.doesMaxRowSizeIncludeBlobs());

System.out.println(dm.getDriverName());

System.out.println(dm.getDriverVersion());

System.out.println(dm.getURL());

System.out.println(dm.getUserName());

System.out.println("****************************************");

System.out.println(pm.getParameterCount());

System.out.println("****************************************");

System.out.println(rsm.getColumnCount());

System.out.println(rsm.getCatalogName(1));

System.out.println(rsm.getColumnClassName(1));

System.out.println(rsm.getColumnDisplaySize(1));

} catch (SQLException e)

{

e.printStackTrace();

}finally{

Tooles.free(rs,

ps, conn);

}

}

public static void main(String[] args) {

new Select().select(10);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值