JDBC

1.JDBC简介

JDBC= Java DataBase Connectivity,java数据库连接。
可用于执行SQL语句的Java API,JDBC提供了一种基准,据此可以构建更加高级的的工具和接口。

JDBC的唯一作用:与数据库交互。

已经包含在了JDK之中。

JDBC API是执行SQL语句的工具,JDBC允许对不同的平台,不同的数据库采用相同的编程接口来执行SQL语句。

3.JDBC的增强

目标:
1)预编译sql处理(防止sql注入)
2)批处理
3)插入数据
4)事物
5)JDBC综合练习

预编译SQL处理

JDBC驱动包

|--Statement 执行SQL命令
|--CallableStatement 执行存储过程
|--PreparedStatement 预编译SQL语句执行
使用预编译SQL语句的命令对象,好处:
1)避免了频繁SQL拼接(可以使用占位符)
2)可以防止sql注入

Statement不能防止SQL注入,connection的prepareStatement(sql)就可以防止sql注入

        // 创建stmt对象
        //stmt = connection.createStatement();

        // 使用pstmt对象
        pstmt = connection.prepareStatement(sql);

        // 执行查询
        set = pstmt.executeQuery();

存储过程:

DELIMITER $$
    CREATE PROCEDURE proc_login()
BEGIN
SELECT * FROM admin;
END $$

eg:

// 创建执行过程的stmt对象
        CallableStatement cstmt = con.prepareCall("CALL proc_login");

事务编程

事务:
事务指的是逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。

事务的特征(ACID):
原子性,是一个最小的逻辑操作单元。
持久性,事物一旦提交成功,对数据的更改会反映到数据库中。
隔离性,事物与事物之间是隔离的。
一致性,事物必须使数据库从一个一致性状态变换到另外一个一致性状态。

案例:

注意:创建一个connection的时候,会自动开启一个隐式事物。

注意:Navicat中如何修改已经建好的MySQL表的编码格式

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

需求:张三给李四转账
设计:账户表
技术:
|-- Connection
    void setAutoCommit(boolean autoCommit);设置事物是否自动提交。 如果设置为false,表示手动提交事物。手动提交事务。
    void commit();  手动提交事务。
    void rollback();  回滚(出现异常的时候,所有已经执行成功的代码需要回退到事务开始之前的状态。)
    savepoint setSavepoint(String name)  
代码:

// 1.转账,没有使用事务
public void trans() {

    String sql_zs = "UPDATE account SET money=money-100 WHERE accountName='zhangsan';";
    String sql_ls = "UPDATE account SET money=money+100 WHERE accountName='李四';";

    try {

        System.out.println("0");
        /* 第一次执行SQL */
        con = JdbcUtil.getConnection();  // 开启隐式事物
        con.setAutoCommit(false);        // 设置手动提交
        pstmt = con.prepareStatement(sql_zs);
        pstmt.executeUpdate();

        System.out.println("a");

        /* 第二次执行SQL */
            pstmt = con.prepareStatement(sql_ls);
            pstmt.executeUpdate();

            System.out.println("b");
        } catch (Exception e) {
            e.printStackTrace();

            try {
                con.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }

        }finally {

            try {
                con.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            JdbcUtil.closeAll(con, pstmt, null);
        }
    }

综合案例:

需求分析:
登录,注册,注销
登录成功
显示所有员工
设计:
数据库设计:
Admin:存放所有的登录用户
Employee"存放所有的员工信息
系统设计:
a. 系统结构
分层:基于mvc模式的分层
b.项目用到的共用组件,类(JdbcUtil)

图片.png

基于MVC的分层。

分析 -- 设计 -- 编码

4.JDBC优化

BeanUtils 需要拷贝jar包

图片.png

BeanUtils组件,它依赖其他的jar包:
1) logging
2)日志

注意:一般缺少日志jar文件报这个错

图片.png

BeanUtils的使用:

BeanUtils.copyProperty(admin, "userName", "jack");
BeanUtils.setProperty(admin, "age", 10); // 注意,这个值也可以是字符串“10”,会自动转为需要的类型。对于基本类型的拷贝(赋值),会自动进行类型转换。

这2个方法是一模一样的。作用是设置属性值。属性名一定是字符串的。

Map对象populate到对象中去:

    /**
     * map数据拷贝到对象中
     */
    Admin adminMap = new Admin();


    Map<String, Object> map = new HashMap<String, Object>();
    map.put("userName", "jack1");
    map.put("age", 20);
    /**
     * 注意:map 中的key要与javaBean的睡醒名称一致
     */
    BeanUtils.populate(adminMap, map);

注意:BeanUtils不能自动转日期类型。
BeanUtils.copyProperty(admin, "birth", "1990-09-09");

5.元数据

1)简介

元数据:DataBaseMetaData

元数据:数据库,表,列的定义信息。

Connnection.getDatabaseMetaData()

DataBaseMetaData对象:

  • 在jdbc中获取数据库的定义,例如:数据库,表,列的定义信息。
  • 在jdbc中可以使用:数据库元数据,参数元数据,结果集元数据。

DatabaseMetaData使用:
http://blog.csdn.net/anxinliu2011/article/details/7560511

图片.png

获取参数元素:

    Connection con = JdbcUtil.getConnection();
    // 获取数据库元数据
    DatabaseMetaData metaData = con.getMetaData();

    String sql = "SELECT * FROM dept where deptId = ? and deptName = ?";

    PreparedStatement pstmt = con.prepareStatement(sql);
    // 参数元数据
    ParameterMetaData p_metaDate = pstmt.getParameterMetaData();

关于Dao操作的抽取

Dao操作通用的步骤:

1)获取连接
2)创建stmt

  1. 执行sql
    a. 更新
    b. 查询
    4)关闭/异常

只有第3)步骤不一样,其他都是一样的。
所以想创建一个通用的dao:
a.更新
String sql = "select * from admin";
String sql = "select * from admin where id=? and pwd = ?";
public void update(String sql, ); //
b.查询

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • JDBC概述 在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库、JDO技术、第三方O/R工具,如...
    usopp阅读 3,526评论 3 75
  • 一、JDBC简介 1、JDBC基础 JDBC(Java Database Connectivity)是一个独立于特...
    慕凌峰阅读 1,206评论 2 32
  • 预编译sql处理(防止sql注入) Statement : 执行SQL命令CallableStatement : ...
    奋斗的老王阅读 1,141评论 2 52
  • JDBC简介 SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。JDBC...
    奋斗的老王阅读 1,504评论 0 51
  • 上一章4.秦总来了 5. “请问哪位是杨先生?” 听到问话,杨二狗和王若智同时回过头来,看到身后站着一个四十岁上下...
    1019d835891a阅读 295评论 1 2