Jdbc笔记(三)

本文档详细介绍了如何利用JDBC获取数据库元信息,并构建自定义的JDBC框架。探讨了Apache DBUtils的使用,包括QueryRunner和结果处理器ArrayHandler。接着讨论了事务在实际开发中的控制方法,强调事务应在业务层或更上层进行管理。最后,讲解了ThreadLocal的重要性和如何利用DbUtils处理多表的读写操作,涉及了一对多、多对多和一对一的映射关系实现。
摘要由CSDN通过智能技术生成
一、数据库元信息的获取
数据库的元数据信息:指数据库和表等的定义信息。
元数据:数据库、表、列的定义信息。
Connection.getMetaData()
DataBaseMetaData对象
getURL():返回一个String类对象,代表数据库的URL。
getUserName():返回连接当前数据库管理系统的用户名。
getDatabaseProductName():返回数据库的产品名称。(告诉habuneite方言是什么)
getDatabaseProductVersion():返回数据库的版本号。
getDriverName():返回驱动驱动程序的名称。
getDriverVersion():返回驱动程序的版本号。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
//注意导包是java.sql.*的,不是MySQL的。
//数据库元信息用户编写框架用的
public class DbMetaDataDemo {
    @Test//数据库元信息的获取
    public void test1() throws SQLException{
        Connection conn = DBCPUtil.getConnection();
        //DatabaseMetaData:关于数据库的整体综合信息。
        DatabaseMetaData dmd = conn.getMetaData();
        System.out.println(dmd.getDatabaseProductName());
        conn.close();
    }//打印 MySQL
    @Test//PreparedStatement中的参数元信息:得到占位的个数
    public void test2() throws SQLException{
        Connection conn = DBCPUtil.getConnection();
        PreparedStatement stmt = conn.prepareStatement("???");
        //可用于获取关于 PreparedStatement 对象中每个参数标记的类型和属性信息的对象
        ParameterMetaData pmd = stmt.getParameterMetaData();
        //获取占位符的个数
        int count = pmd.getParameterCount();
        System.out.println(count);//打印3
        stmt.close();conn.close();
    }
    @Test//结果集的元信息:ResultSetMetaData
    public void test3() throws SQLException{
        Connection conn = DBCPUtil.getConnection();
        PreparedStatement stmt = conn.prepareStatement("select * from account where name='aaa'");
        ResultSet rs = stmt.executeQuery();
        ResultSetMetaData rsmd = rs.getMetaData();
        int count = rsmd.getColumnCount();//得到结果集列数
        for(int i=1;i<=count;i++){
            //获取指定列的表目录名称。
            String columnName = rsmd.getCatalogName(i);
            //得到获取指定列的 SQL 类型
            int columnTyep = rsmd.getColumnType(i);
            System.out.println(columnName+":"+columnTyep);
        }//打印day13:4        day13:12        day13:7
        rs.close();stmt.close();conn.close();
    }
}
结果集的元信息:ResultSetMetaData,可以对这个类的每个方法试用一下
 
二、编写自定义的JDBC框架
与具体的东西无关才叫框架(DataSource),尽量降低依赖,先写好模板。
mySQL里面的日期和字符串一样,但其他的数据库不一样
建立核心类DbAssist
public class DbAssist {
    private DataSource dataSource;
    public DbAssist(DataSource dataSource){
        this.dataSource = dataSource;
    }
     // 要能执行增、删、改,都不需要返回值//想要是同一个事务,就必须保证conn相同
    public void update(String sql,Object[] params) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try{
            conn = dataSource.getConnection();
            //创建语句,设置参数
            stmt = conn.prepareStatement(sql);
            //得到sql中的占位符的个数
            ParameterMetaData pmd = stmt.getParameterMetaData();
            int questionCount = pmd.getParameterCount();
            if(questionCount>0){
                if(params==null||params.length!=questionCount){
                    //如果有占位符,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值