JDBC

>>JDBC : java Database Connectivity:java访问数据库的解决方案
>>JDBC接口及数据库厂商实现
    <1>驱动管理:DriverManager
    <2>连接接口:Connection、DatabaseMetaData
    <3>语句对象接口:Satement、PreparedStatement、CallableStatement
    <4>结果集接口:ResultSet、ResultSetMetaData
>>>>>>>>>>>>>>>>>>>>>1.JDBC工作过程<<<<<<<<<<<<<<<<<    
>>加载驱动,建立连接、创建语句对象、执行SQL语句、处理结果集、关闭连接
1.驱动类加载:
    <1>oracle: Class.forName("oracle.jdbc.driver.OracleDriver");
    <2>mysql : Class.forName("com.mysql.jdbc.Driver");
2.连接数据库:Connection接口
    --Connection conn = DriverManager.getConnection(
        "jdbc:oracle:thin:@地址:接口:数据库名","username","password");
    ◆注1:Connection只是接口!真正实现是由厂商提供的驱动包完成的。
    ◆注2:事务的控制,使用接口Connection。
3.Statement接口及其子接口PreparedStatement
    --Satement smt = conn.createStatement();
    --PreparedStatement smt = conn.prepareStatement(sql);
    --方法:    
        --smt.execute();
        --smt.executeQuery();
        --smt.executeUpdate();
4.结果集:ResultSet() (迭代器)
    --ResultSet rs = smt.executeQuery();
    --ResultSet对象的最初位置在行首(未指向数据)
    --方法:
        --rs.next() 移动到下一行,没有数据返回NULL
        --rs.get类型(列索引)
        --rs.get类型(列名)
    ◆例:rs.getString("id")

>>>>>>>>>>>>>>>>>>>>>2.连接池:(Apache DBCP连接池)<<<<<<<<<<<<<<<<<
1.直接使用DriverManager的问题
    --他是无节制的创建连接,当并发数过大时,会导致数据库崩溃
2.使用连接池的好处
    --连接池对连接数进行了限制,超过限制就要求用户等待
    ◆例:
    --private static BasicDataSource ds = new BasicDataSource();
    --ds.setDriverClassName(driver);//加载驱动类
    --ds.setUrl(url);//数据库连接
    --ds.setUsername(user);
    --ds.setPassword(pwd);
    --ds.setInitialSize(initSize);//最小连接数
    --ds.setMaxActive(maxSize);//最大连接数
    --Connection conn = ds.getConnection();//创建连接
>>>>>>>>>>>>>>>>>>>>>3.Statement 及 PreparedStatement<<<<<<<<<<<<<<<<<
1.Statement 接口
    --主要用于执行静态SQL语句(内容固定不变)
    --创建方式:connection.createStatement();    
    --执行insert/update/delete 使用:
        statement.executeUpdate(sql)
        --返回影响行数
    --执行select使用
        statement.executeQuery(sql)
        --返回结果集 
    --其他语句用:
        statement.execute(sql)
2.PreparedStatement 接口
    --主要用于执行动态SQL语句,可以防止SQL注入攻击,批处理,效率高
    --提前编译好SQL语句,参数使用?作为占位符,创建preparedStatement对象时
        就对SQL进行了预编译
    --执行SQL语句之前,通过setInt()/setString()等方法对?提供值
    --SQL语句执行的三个命令也不需要参数了

>>>>>>>>>>>>>>>>>>>>>4.结果集:可滚动结果集<<<<<<<<<<<<<<<<<
--ResultSet 只能使用next()方法将指针先后移动,不能反向移动
--可滚动结果集:指针可以在结果集中任意移动
1.可滚动结果集:ResultSetMetaData
    --创建:ResultSetMetaData rsm = rs.getMetaData();
    --可滚动结果集操作指针的常用方法:
        --first();
        --last()
        --beforeFirst()
        --afterLast()
        --relative()
        --next()
        --previous()
        --absolute()
        --isLast()
        --isBeforeFirst()
        --isAfterLast()
2.如果要得到可滚动的结果集ResultSet,可按照下面操作:
    --Statement smt = conn.createStatement(type,concurrency);
    --PreparedStatement(sql,type,concurrency);
    --type 取值:
        --ResultSet.TYPE_FORWARD_ONLY :只能先前移动,默认参数
        --ResultSet.TYPE_SCROLL_INSENSITIVE:
            可滚动,不感知数据变化
        --ResultSet.TYPE_SCROLL_SENSITIVE
            可滚动,感知数据变化
    --concurrency取值:
        --ResultSet.CONCUR_READ_ONLY  只读
        --ResultSet.CONCUR_UPDATABLE  可更新
>>>>>>>>>>>>>>>>>>>>>5.其他<<<<<<<<<<<<<<<<<
1.DAO
    --DAO(Data Access Object) 数据访问对象
    --建立在数据库和业务层之间,封装所有对数据库的操作
    --目的:数据访问逻辑和业务逻辑分开
2.JDBC 支持如下日期:
    --java.sql.Date 年月日
    --java.sql.Time 时分秒
    --java.sql.Timestamp 年月日时分秒
    >>>都继承于:java.Util .Date

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值