zoukankan      html  css  js  c++  java
  • JDBC操作

    JDBC

    三个问题?

    1.什么是JDBC?

    • jdbc:Java Database Connectivity
    • 一套在java语言中操作关系型数据库的标准。

    2.为什么要学习、使用JDBC?

    为什么要在代码中操作数据库?

    如何在代码中操作数据库?

    • 依赖于数据库厂商所提供的接口。 接口:一套使用该数据库的说明书。
    • Oracle Mysql SqlServer DB2 sqlite access mongodb
    • 程序员在使用某种数据库之前,需要先学习
    • 该数据库的操作方法(接口)。
    • 2008年 Oracle 学习Oracle的接口 编码
    • 改搭Mysql集群 大批量修改原代码
    • 2009年 Mysql 学习Mysql的接口 编码
    • 2010年 SqlServer 学习SqlServer的接口 编码

    能否存在一套统一的标准(规范),用来操作各种
    不同的数据库?

    • 1.ODBC 开放式的数据库连接

    微软提出ODBC
    微软把所有数据库的接口全部集中起来,
    然后对其中的内容进行封装。
    再对外提供一套统一的操作方式。
    表现出来的效果不是特别理想。

    • 2.JDBC

    java语言
    詹姆斯·高斯林 --java之父
    SUN公司定制了一套标准,
    但是并没有给出具体的实现。
    由各大数据库厂商自行编写驱动程序。
    程序员要使用各大数据库的驱动程序,
    需要引入对应的JAR包,然后按照jdbc api
    中所定义的标准去操作即可。

     标准:java.sql.*;

    Driver 核心接口
    所有的驱动类都必须实现这个接口。
    DriverManager 驱动管理类

    • 所有注册到内存中的合法驱动类都会被这个类所管理,可以通过驱动管理列
    • 获取和每一个数据的连接。 Connection 代表和数据库的连接负责数据库中的事务管理

    Statement 用来执行SQL命令
    PreparedStatement
    CallableStatement
    ResultSet 代表查询语句的结果集

    3.如何学习JDBC?

    学习JDBC api
    api:一套预定义好的函数,用来实现某种特定功能。
    一些类和方法 连接和操作数据库
    JDBC api分为两个版本:

    1. 企业版
    • 用来告诉数据库厂商如何按照标准制定
    • 自己的驱动程序。驱动程序开发指南。

             2.程序员版

    • 教给程序员如何使用JDBC操作数据库。
    • java.sql.*;


    JDBC编程六大步骤:

    • 1)注册驱动

    三种方式:

    • a)使用反射机制加载驱动类对象

    //1.把指定类加载到内存中
    //2.获取该类的镜像对象
    Class.forName(String className);
    参数:驱动类的全限类名(全包名+类名)
    推荐使用。
    反射机制可以把代码写灵活。

    • b)直接实例化驱动类对象

    全限类名:oracle.jdbc.driver.OracleDriver
    Driver driver = new OracleDriver();
    //接口类的引用指向实现类对象

    • c)使用系统参数

    Properties是一种比较小型的、特殊的Map集合
    只能用来存放String类型的键值对。
    常用于做配置文件。
    在系统参数中添加如下参数:
    jdbc.drivers=oracle.jdbc.driver.OracleDriver
    System.setProperty(String key,String value);

    唯一的目的:把驱动类加载到内存中。

    • 2)获取和数据库的连接(Connection对象)

    两种方式:

    • a)DriverManager.getConnection(url,user,password);

    url:统一资源定位符
    jdbc:oracle:thin:@127.0.0.1:1521:XE
    jdbc:oracle:thin:@localhost:1521:XE
    user:登录数据库时所使用的账号
    password:登录数据库时所使用的密码

    • b)driver.connect(url,info);

    driver是一个驱动类对象。
    必须和注册驱动的方式二连用。
    Properties:一种特殊的保存键值对的数据结构。
    key和value必须都是String字符串。
    常用于做配置文件
    info中需要包含两组键值对(用来指定账号和密码):
    "user","账号"
    "password","密码"
    .properties

    • 3)创建执行SQL命令的statement对象
    • Statement
    • 执行异构SQL命令效率较高
    • 不需要进行预编译
    • PreparedStatement
    • 执行同构的SQL命令效率较高
    • 需要进行预编译
    • CallableStatement
    • 执行PL/SQL命令。

    异构:
    select id,last_name from s_emp;
    delete from s_dept;

    同构:
    insert into s_student values(1,'tom',22);
    insert into s_student values(2,'jack'23);
    insert into s_student values(3,'lucy',24);

    预编译:
    预先提供一个SQL模板,用于后续动态地向模板中
    传入不同的值。
    ?:先行占位,后面再用具体的值代替掉问号
    insert into s_student values(?,?,?);

    • 4)编写SQL命令、执行SQL命令

    三种方法:都可以执行任何SQL命令。
    boolean execute();
    如果结果为true则代表有结果集,
    如果为false则代表没有结果集。
    int executeUpdate();
    返回值代表有多少条数据受到了影响。
    适用于DML语句。
    ResulSet executeQuery();
    适用于select查询语句。

    • 5)处理结果集(只针对select查询语句)
    • 6)释放资源

    原则:后开的先关 先开的后关

    4.JDBC事务管理机制

    • Connection对象充当事务管理者。 默认处理机制:自动提交事务
    • 每次执行完毕DML语句之后,
    • JDBC都会自动向数据库发送一条提交事务的命令。
    • 设置手动提交事务:
    • conn.setAutoCommit(boolean flag);
    • flag为true代表设置为自动提交,
    • flag为false代表设置为手动提交事务。
    • 提交事务:
    • 1)conn.commit();
    • 2)st.execute("commit");
    • 5.jdbc的批处理
    • 批处理:批量发送和执行sql命令
    • 使用于大批量的执行sql命令


    执行一条sql命令的过程:

    • 1 在客户端编写sql命令
    • 2客户端和服务器端创建链接
    • 3.发送sql命令到服务器段
    • 4服务器端执行sql命令
    • 客户端和数据库服务器使用tcp协议经行链接

    tcp:在经行数据传输之前要先穿件链接——“”三次握手

    //将某条sql命令添加到批处理空间
    addBatch(String sql);


    //执行批处理
    //将批处理空间中的sql命令一次性打包发送给数据库执行
    executeBatch();


    JDBC中批量执行SQL命令的效率影响因素
    1)是否使用批处理
    2)是否自动提交事物;
    3 执行sql命令的对象
    Statement -- 执行易购的sql命令效率较高
    preparedStatement --执行同构sql命令效率较高

    执行效率测试:
    向 s_teacher表中插入50000条数据
    1 使用Statement、不适用批处理、事务自动提交
    2 使用PreparedStatement使用批处理

    实体 :一类具有相同特点的事物抽象出来的集合
    实体在数据库中以数据库表的形式体现。
    实体在java中以pojo类的形式体现。

    pojo类:
    不继承任何父类,也不行实现任何借口。
    所有有的成员变量都要是私有的。
    给出对应的

    package com.briup.jdbc;

    import java.sql.*;
    import java.util.Properties;

    import oracle.jdbc.driver.OracleDriver;

    public class JDBCTest {

    //快捷生成main方法:
    // main --> alt + / --> Enter
    public static void main(String[] args) {

    //JDBC编程六大步骤
    try {
    //第一步)注册驱动
    //方式一:使用反射机制
    //String className =
    // "oracle.jdbc.driver.OracleDriver";
    //Class.forName(className);

    //方式二:实例化驱动类对象
    //接口类的引用指向实现类对象
    Driver driver =
    new OracleDriver();

    //方式三:使用系统参数
    //获取到包含所有系统参数的Properties
    /*Properties pro =
    System.getProperties();

    //查看pro中的所有参数
    pro.list(System.out);

    //添加信息
    pro.setProperty("jdbc.drivers",
    "oracle.jdbc.driver.OracleDriver");*/
    //System.setProperty("jdbc.drivers",
    // "oracle.jdbc.driver.OracleDriver");


    //第二步)获取和数据库的连接(Connection)
    //方式一:使用驱动管理类静态方法
    //String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
    //String user = "briup";
    //String password = "oracle";
    //Connection conn = DriverManager.getConnection(
    // url, user, password);

    //检查是否成功创建了连接?
    //System.out.println(conn);

    //方式二:使用driver对象调用connect()方法
    String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
    Properties info = new Properties();
    info.setProperty("user", "briup");
    info.setProperty("password", "oracle");
    Connection conn =
    driver.connect(url, info);
    System.out.println(conn);

    //第三步)创建执行SQL命令的statement对象
    //1.Statement
    Statement st = conn.createStatement();

    //第四步)执行SQL命令
    //编写SQL命令
    String sql = "insert into s_emp(id,last_name)"
    +" values(1001,'tom')";

    //执行
    st.execute(sql);
    System.out.println("插入成功!");

    //第六步)关闭资源
    st.close();
    conn.close();




    } catch (Exception e) {
    e.printStackTrace();
    }




    }


    }

  • 相关阅读:
    装饰器
    目录和文件操作
    网络通信过程
    epoll并发
    laravel(包含lumen)框架中的跨域函数实例
    windows使用nginx
    nginx反向代理配置 其实很简单
    前端html页面使用marked点亮你的代码
    PHPWAMP开启SSL,PHPWAMP配置ssl证书
    php接收并存储base64位字符串图片
  • 原文地址:https://www.cnblogs.com/wq-9/p/10182970.html
Copyright © 2011-2022 走看看