一、元数据(数据库的元数据, 请求参数的元数据,结果集的元数据)
1. 什么叫做元数据?
所谓的元数据就是可以通过我们的特定对象获取我们对象运行时候的一些信息 这个就叫做元数据
2.元数据能能干啥?
我们学习的这三个元数据无非就是为了最后能够在JDBC的基础上对我们的DAO进行基础的封装;你可以写一个持久层的框架, 这个框架中要编写通用的处理的话,那么也需要使用到我们的元数据。
3.数据库的元数据
//获取数据库的连接
Connection conn=JdbcUtils.getConnetion();
//使用到数据库的元数据了
DatabaseMetaData metaData=conn.getMetaData();
//获取数据库的一些信息
String proName=metaData.getDatabaseProductName();
String proVersion=metaData.getDatabaseProductVersion();
String proURL=metaData.getURL();
String userName=metaData.getUserName();
String driverVersion=metaData.getDriverVersion();
4.请求参数的元数据
PreparedStatement state=conn.prepareStatement(sql);
//获取请求参数的元数据
ParameterMetaData metaData=state.getParameterMetaData();
//可以直接获取我里面一共有几个参数
int count=metaData.getParameterCount();
5.结果集的元数据
//紧接着执行我们的更新语句
ResultSet set=state.executeQuery();
//就可以获取结果集的元数据了
ResultSetMetaData metaData=set.getMetaData();
int count=metaData.getColumnCount();
String columnName=metaData.getColumnName(1);
String colName=metaData.getColumnLabel(1);
System.out.println("查询回来数据的列:"+count);
System.out.println("第一列的列名:"+columnName);
System.out.println("第一列的列名:"+colName);
增删改共用的方法:
public int update(String sql,Object... parames) throws Exception{
//获取连接
Connection conn=getConnection();
//创建我们操作数据库的对象
PreparedStatement state=conn.prepareStatement(sql);
//获取请求参数的元数据
ParameterMetaData metaData=state.getParameterMetaData();
//获取我们sql中占位符的个数
int count=metaData.getParameterCount();
if(count!=parames.length){
throw new RuntimeException("参数传递有误...");
}
for (int i = 0; i <count; i++) {
state.setObject(i+1,parames[i]);
}
//执行SQL语句
int result=state.executeUpdate();
//关闭资源
close();
return result;
}
二、 beanutils组件
beanutils组件是用来干嘛的?
简单的说beanutils组件是用来进行简化javabean(实体对象)操作的
beanutils如何来进行使用呢?
1>:导包
commons-beanutils-1.8.3.jar 这个是beanutils的核心功能包
commons-logging-1.1.3.jar 这个beanutils运行的时候所需要依赖的包 (日志相关的包)
2>:创建JAVA实体对象
3>:常用的API
//将uName这个属性的值赋值成小波波(前提是 对象里面必须得有这个属性 没有的话空谈)
//BeanUtils.copyProperty(user,"uName","小波波");
//就是将后面这个对象对应的属性值 赋予给前面的这个对象
//BeanUtils.copyProperties(user2, user);
//将后面这个对象赋值一份赋予给前面的对象
//user2=(User) BeanUtils.cloneBean(user);
//将map集合中的键和值赋值到前面的对象里面 前提是前面的对象比不得有这个属性
BeanUtils.populate(user2,maps);
beanutils的注意事项:
日期格式转换器的问题
1>:自定义日期格式转换器
ConvertUtils.register(new Converter() {
*//**
* 第一个参数:就是我们要转换成的最终对象
* 第二个参数:要转换的值
*//*
@Override
public Object convert(Class clazz, Object value) {
//先将value转换成String
String value1=(String) value;
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
try {
return format.parse(value1);
} catch (ParseException e) {
return null;
}
}
},Date.class);
2>:使用系统自带的日期格式转换器
ConvertUtils.register(new DateLocaleConverter(),Date.class); 这种知识支持 yyyy-MM-dd这种格式
3>:定义一个支持多种格式的日期格式转换器
class DateConverter implements Converter{
//定义一个Dataformat的数组将我们需要转换的格式丢进去
DateFormat[] formats={
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy年MM月dd日")
};
@Override
public Object convert(Class clazz, Object value) {
if(clazz!=Date.class){
return null;
}
//将转换的数据弄成字符串的格式
String val=(String) value;
if(val.equals("")){
return null;
}
//遍历提前定义好的每一种数据格式
for (int i = 0; i <formats.length; i++) {
try {
return formats[i].parse(val);
} catch (ParseException e) {
continue;
}
}
return null;
}
}