元数据与jdbc框架
来源:互联网 发布:java如何编译运行 编辑:程序博客网 时间:2024/05/07 05:39
元数据- DataBaseMetaData
元数据:数据库、表、列的定义信息。
Connection.getDatabaseMetaData()
DataBaseMetaData对象
getURL():返回一个String类对象,代表数据库的URL。
getUserName():返回连接当前数据库管理系统的用户名。
getDatabaseProductName():返回数据库的产品名称。
getDatabaseProductVersion():返回数据库的版本号。
getDriverName():返回驱动驱动程序的名称。
getDriverVersion():返回驱动程序的版本号。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
private static Connection conn;
public static void main(String[] args){
try {
DatabaseMetaData meta =(DatabaseMetaData) conn.C0p3Demo.getMetaData();
System.out.println(data.getDatabaseProductName()+"----"+data.getDatabaseProductVersion()+
"-----"+data.getURL());
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
C3p0Demo1.closeDB(conn, null, null);
}
}
结果:
MySQL----5.1.44-community-----jdbc:mysql://localhost:3306/javaweb
元数据- ParameterMetaData
PreparedStatement . getParameterMetaData()
获得代表PreparedStatement元数据的ParameterMetaData对象。
Select * from user where name=? And password=?
ParameterMetaData对象
getParameterCount()
获得指定参数的个数
getParameterType(int param)
获得指定参数的sql类型
事例:
private static Connection conn;
private static PreparedStatement ps;
public static void main(String[] args){
try {
conn=C3p0Demo1.getConnection();
String sql = "select * from admin where name= ? and password = ?";
ps = conn.prepareStatement(sql);
ParameterMetaData pmd = ps.getParameterMetaData();//返回的是参数的元数据;
System.out.println(pmd.getParameterCount());//参数多少
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
C3p0Demo1.closeDB(conn, null, null);
}
}
结果:2
元数据- ResultSetMetaData
ResultSet. getMetaData()
获得代表ResultSet对象元数据的ResultSetMetaData对象。
ResultSetMetaData对象
getColumnCount()
返回resultset对象的列数
getColumnName(int column)
获得指定列的名称
getColumnTypeName(int column)
获得指定列的类型
事例:
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
public static void main(String[] args){
try {
conn=C3p0Demo1.getConnection();
String sql = "select * from admin";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData rsm=rs.getMetaData();
System.out.println(rsm.getColumnCount());
for(int i=1;i<4;i++){
System.out.println(rsm.getColumnName(i));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
C3p0Demo1.closeDB(conn, null, null);
}
}
使用元数据简化JDBC代码
操作:
所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。
实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。
package com.csdn.tool;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3p0Demo1 { private static ComboPooledDataSource ds=null; static{ ds = new ComboPooledDataSource(); try { ds = new ComboPooledDataSource("mysql");/*ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/javaweb");ds.setUser("root");ds.setPassword("root");ds.setInitialPoolSize(10);ds.setMaxPoolSize(40);ds.setMinPoolSize(5);*/} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} } public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void closeDB(Connection con,Statement st,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(st!=null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void update(String sql,Object[] params){ Connection conn = null; PreparedStatement ps = null; try { conn = C3p0Demo1.getConnection(); ps = conn.prepareStatement(sql); for(int i=0;i<params.length;i++){ ps.setObject(i+1, params[i]); } ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ C3p0Demo1.closeDB(conn, ps, null); } } public static Object query(String sql,Object[] params,ResultSetHandler rh){ Connection conn = null; PreparedStatement ps = null; ResultSet rs =null; try {conn = C3p0Demo1.getConnection();ps = conn.prepareStatement(sql);for(int i=0;i<params.length;i++){ps.setObject(i+1, params[i]);}rs = ps.executeQuery();return rh.handler(rs);} catch (SQLException e) {// TODO Auto-generated catch blockthrow new RuntimeException();}finally{C3p0Demo1.closeDB(conn, ps, rs);} } }package com.csdn.tools;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import org.junit.Test;import com.csdn.bean.Users;import com.csdn.tool.BeanHandler;import com.csdn.tool.C3p0Demo1;public class Demo2 { @Testpublic void update(){String sql="update admin set name=?,password=? where id =?";Object[] params = {"qq","123",10};C3p0Demo1.update(sql, params);} @Test public void insert(){String sql="insert into admin(id,name,password) values(?,?,?)";Object[] params = {13,"123","123"};C3p0Demo1.update(sql, params);} @Test public void delete(){String sql="delete from admin where id=13";Object[] params = {13,"123","123"};C3p0Demo1.update(sql, params);} @Test public void find(){String sql="select id,name,password from admin where id=?";Object[] params = {3};Users user =(Users)C3p0Demo1.query(sql, params, new BeanHandler(Users.class));System.out.println(user.getId()+"--"+user.getName()+"--"+user.getPassword());}}package com.csdn.tool;import java.sql.ResultSet;/* * * 结果集的处理 * */public interface ResultSetHandler { public Object handler(ResultSet rs);}//bean文件package com.csdn.bean;public class Users { private int id; private String name; private String password; public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;} }package com.csdn.tool;import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.ResultSetMetaData;public class BeanHandler implements ResultSetHandler{private Class clazz;public BeanHandler(Class clazz){this.clazz=clazz;}@Overridepublic Object handler(ResultSet rs) {//把结果集封装到bean里;try{if(!rs.next()){return null;}Object bean = clazz.newInstance();//实例化一个bean对象ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); for(int i=0;i<count;i++){String columnName = rsmd.getColumnName(i+1);//得到结果集的每一列的字段名Object obj =rs.getObject(columnName);Field f = bean.getClass().getDeclaredField(columnName);//反射bean上与列名相对应的属性f.setAccessible(true);f.set(bean, obj); } return bean;}catch(Exception e){ throw new RuntimeException();}}}
- 元数据与jdbc框架
- 连接池,元数据与jdbc框架
- JDBC元数据和DbUtils框架
- jdbc学习:操作元数据,以及ORM框架基础
- JDBC ---- 元数据
- 【JDBC】day02_PreparedStatement_元数据
- JDBC之元数据
- JDBC基础-元数据
- JDBC MetaData (元数据)
- JDBC-ResultSet之滚动结果集-光标与元数据
- 元数据 --- 如何编写JDBC框架--DBUTILS框架
- JDBC 获取元数据DatabaseMetaData
- JDBC之元数据分析
- JDBC(五) JDBC元数据
- 元数据与从元数据
- JDBC元数据信息篇一
- 使用 元数据简化JDBC代码
- 使用元数据简化jdbc代码
- 程序员面试题精选100题(42)-旋转数组的最小元素
- Java乔晓松-编写JDBC框架优化CRUD操作
- 关于DBMS_SCHEDULER job日志级别LOGGING_LEVEL
- chrome浏览器改变背景颜色
- 数据结构类型值线性表篇
- 元数据与jdbc框架
- 类图
- 在Eclipse中搭建Python开发环境
- 三色球
- Xcode 中设置部分文件ARC支持
- 强大的企业工作平台—今目标
- 从文本文档中导入数据库数据、从数据库中导出数据到文本文档
- git查看某个文件的修改历史
- UVA 10305