JDBC

1.早年间有个ODBC,基于C语言的接口

  1.和数据交互
  2.查看结构,数据,和信息
  3.链接数据库的一个标准

2.jdbc:Java版本的ODBC

  jdbc的开发源于在jdk定义了一系列的接口用于开发:jdbc API {应用开发人员,驱动开发人员}

  每一个数据库的驱动,都是对jdbc规范的不同实现

  jdbc规范出来了一系列接口,数据库驱动的开发人员实现了这些接口,应用开发人员调用的是实现接口的方法

  不同版本的驱动对应不同版本的jdk

  驱动中最关键的就是对java.sql.sqlDrive接口的实现(类)

  Java原生api中只是定义了接口(方法),而数据库厂商实现了这些接口方法,我们使用的就是这些接口实现类的方法

3.jdbc的驱动有四种实现类型
  jdkapi中的一部分
   |
  jdbc规范 接口
  有不同的实现方式
  不同的驱动类型(4种)
  1.jdbc->odbc桥
  2.nativeApi(数据库提供的接口,但是需要数据库厂商提供的接口)
  3.jdbcNet(通过网络服务器)
  4.本地协议,基于socket【常用的】

4.小结下内容

  Java application
    |
  jdbc server manager(jdbc驱动管理者)【JavaApi中的辅助类,可以用,可以不用】
    |
  jar包中对接口的实现(四种实现类型)

URI唯一表示
URL唯一表示且定位

5.jdbc的开发过程  

  注册驱动实际上,只要加载到驱动类,这个类中的静态代码就会自动的向DriverManager驱动管理器加载驱动

  所以说有三种基本的方式用来注册驱动:
  1.Class.forName(str);
  2.Driver driver=new oracle.jdbc.driver.OracleDriver();
  3.System.setProperty("jdbc.drivers", "oracle.jdbc.driver.OracleDriver");
  -Djdbc.drivers=oracle.jdbc.driver.OracleDriver//第三种方式的变形,采用虚拟机传参的方式

  1. 注册一个驱动【加载驱动类(为了注册驱动)】
    Class.forName(str);
  2. 建立到数据库的连接
    Connection conn=DriverManager.getConnection();
  3. 创建一个声明
    conn.createStatement();//处理普通的SQL语句

    conn.prepareCall(String sqlStr);//处理存储过程

    conn.prepareStatement(String sqlStr);//处理同构的SQL语句

  4. 执行SQL

    execute();DML,DDL(动态执行SQL语句时常用),有结果集需要处理返回true,没有结果集返回false,存储过程的执行可用

    executeQuery();DQL

    executeUpdata();DML

    executeBatch(); 执行批处理

  5. 处理结果
    ResultSet rs = stmt.executeQuery(sql);
    // 处理结果集(select)
    while (rs.next()) {
      int id=rs.getInt(1);//通过序列号(从1开始)
      String name=rs.getString("name");//通过列名
      int age=rs.getInt(3);
      System.out.println(id+name+age);
    }
  6. 关闭JDBC对象
    // 关闭资源
    if (stmt != null)
      stmt.close();
    if (conn != null)
      conn.close();
    if(rs!=null) {
      rs.close();
    }

6.Statement 父接口:执行SQL语句,每次给Statement 一个SQL语句,Statement会把SQL语句带给数据库

7.preparedstatement 子接口:预处理同构的SQL语句

eg:

  insert into t_user(id,name,salary) values(?,?,?)
  把这个有占位符的同构的SQL语句,发给数据库,以后每次替换?的值就可以了

8.CallableStatement 针对于存储过程

eg:

  CallableStatement cstm =connection.prepareCall(sqlString);

  CallabeStatement cstm = null;
  try{

    cstm = connection.prepareCall( “ {call return_student(?, ?)} ” );
    cstm.setString(1, “ 8613034 ” );
    cstm.registerOutParameter(2, Types.REAL);
    cstm.execute();
    float gpa = cstm.getFloat(2);

  }catch(SQLException e){

  }

注:oracle.jdbc.OracleDriver继承了oracle.jdbc.driver.OracleDriver

有的jar包不用加载驱动(自动默认加载)ojdbc5
有的jar包需要加载驱动(手动加载)ojdbc14

9.executeBatch();批处理:
  String sql1 = "insert into s_student(id,name,age) values(2,'tom',20)";
  String sql2 = "delete from s_student where id<3";
  stmt.addBatch(sql1);
  stmt.addBatch(sql2);
  int[] executeBatch = stmt.executeBatch();

  String sql = "insert into s_student(id,name,age) values(?,?,?)";
  ps = conn.prepareStatement(sql);
  // 执行SQL语句
  for (int i = 3; i < 10; i++) {
    ps.setInt(1, i);
    ps.setString(2, "tom");
    ps.setInt(3, 20);
    ps.addBatch();
  }
  ps.executeBatch();

10.日期处理

statement插入日期

sysdate
  sysdate-365
to_date('字符串','指定的日期格式')
  to_date('01-11-19','dd-mm-yy')
默认的日期格式
  '05-3月-16'

stmt处理日期
  SimpleDateFormat sdf=new SimpleDateFormat('dd-mm-yy');
  String str= sdf.format(date);

ps处理日期
  Date date=new Date();
  long time=date.getTime();
  ps.setInt(1,1);
  ps.setString(2,"tom1");
  ps.setDate(3,new java.sql.Date(time));

时间戳time:long数字

11.事务:
  设为手动提交事务:
  conn.setAutoCommit(false);
  {.........}
  conn.commit();
  closs方法会帮助我们提交事务

  如果有异常:
  在try-catch中
  conn.rollback();

12.版本控制:
  管理开发过程中用到的各种资料,软件,文档,代码
  保存/追踪历史版本的记录

 

原文地址:https://www.cnblogs.com/Magic-Li/p/12783072.html