5.08到5.12总结

JDBC

jdbc api

DriverManager 作用:负责管理JDBC驱动

Connection 作用:负责数据库的连接,担任数据的传输

Statement 作用:负责执行sql语句

Resu'l'tSet 作用:负责封装查询的结果,即结果集

jdbc 入门

1.导入JDBC的jar包

项目下创建一个lib的目录,选择jar右击选择Add as Library

2.加载驱动包

Class.forName(驱动名称);

[mysq]: com.mysql.jdbc.Driver

[sqlServer]:com.microsoft.sqlserver.jdbc.SQLServerDriver

[oracle]:oracle.jdbc.driver.OracleDriver

3.连接数据库

Connection con = DriverManager.getConnection(url,username,password);

例如:

url:jdbc:mysql://127.0.0.1:3306/demo?

useUnicode=true&characterEncoding=utf8&useSSL=false

4.获取Statement对象接口

Statement stm = con.createStatement();

5.执行sql语句

boolean execute(String sql): 返回是否返回结果集

ResultSet executeQuery(String sql):返回结果集

int executeUpdate(String sql):返回受影响的函数

addBatch(String sql):批量数据添加

6.连接数据库的字符串

MySql

URL: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=false driverClassName: com.mysql.jdbc.Driver

SQLServer

URL: jdbc:sqlserver://localhost:1433;DataBase=mydb driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

Oracle

URL: jdbc:oracle:thin:@localhost:1521:shop driverClassName:oracle.jdbc.driver.OracleDriver

PreparedStatement对象

注意:Statement执行sql语句,可能操作sql注入,sql不安全

执行原理:

1.先预编译SQL语句

String sql = "INSERT INTO emp VALUES (?,?,?,?,?,?,?,?)";

PreparedStatement pstm = con.prepareStatement(sql);

2.向SQL语句中注入SQL的参数值。

后续注入的任何SQL的参数内容无论你释放有类似与SQL的语句,都会认为时SQL参数值,而不认为是SQL语句的一部分。

方法: setObject(int paramIndex,Object paramValues)

           pstm.setObject(1,7676);
           pstm.setObject(2,"TOMSON");
           pstm.setObject(3,"CLERK");
           pstm.setObject(4,7902);
           pstm.setObject(5,"1980-12-17");
           pstm.setObject(6,1500);
           pstm.setObject(7,200);
           pstm.setObject(8,10);

CallableStatement对象

注意:原理与PreparedStatement类似,都是先预编译,后注入参数值,再执行。

应用:CallableStatement一般应用于存储过程的执行。

注入:setObject(String paramName,Object paramValues)

事务管理

1.概念

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

注意:每一条sql语句默认构成一条单独的事务,默认开始,默认提交

2.事务特点

•原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

•一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

•隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环 境下运行。

•持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

3.事务的定义

开启事务:BEGIN | START TRANSACTION

事务提交:commit

事务回滚:ROLLBACK

例如: BEGIN;(开启事务) UPDATE user set money = money - 500 WHERE uid = 1; UPDATE user set money = money + 500 WHERE uid = 2; ROLLBACK;(事务回滚) COMMIT;(提交事务)

JDBC优化

1.使用工具类,减少繁琐的代码量

import org.apache.commons.dbutils.QueryRunner;
private QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());

qr.query(String sql,ResultSetHandler<T> rsh,Object...params);

sql:预加载的sql语句

ResultSetHandler<T> rsh:结果集,例:BeanList'Handler<>(.class) 和 BeanHandler<888>(888.class)

Object...params:填充占位符所需要的元素集合

2.将一些相同的代码或方法进行封装,提高代码的复用性,便于修改

3.使用数据库连接池代替,以前的getConnection()

c3p0-config.xml连接池代替以前的连接

c3p0-config.xml文件必须再src目录下保存

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--默认配置-->
    <default-config>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
        <property name="maxStatements">200</property>
    </default-config>
​
    <!--配置连接池mysql-->
    <named-config name="mysql">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/soso?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
        <property name="maxStatements">200</property>
    </named-config>
​

private static ComboPooledDataSource cpds = new ComboPooledDataSource("mysql");
public static DataSource getDataSource(){
        return cpds;
    }
    调用getDataSource()方法返回连接池对象,即可分配一个连接

开发模型MV

M:model

(javaBean:数据封装类型)

(dao:负责与数据库交互)编写sql语句

(service:负责业务处理)对查询出来的用户信息做业务处理,事务处理

V:view

视图是用户看到并与之交互的界面,在视图中其实没有真正的处理发生,只是作为一种输出数据并允许用户操纵的方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值