返回

JDBC:核心技术

JDBC 概述

JDBC 六步操作

  1. 注册驱动

    确定连接数据库的品牌

  2. 获取链接

    JVM的进程和数据库进程之间的连接

    进程之间的通讯属于 重量级 通讯

    使用完成之后一定要及时管关闭连接

  3. 获取数据库操作对象

    获取执行SQL语句的对象

  4. 执行SQL语句

    执行SQL语句 DQL DML

  5. 处理查询结果集

    当第四步执行的是SELECT语句时,才执行第五步

    否则直接执行第六步

  6. 释放资源

    使用完成后关闭资源

JDBC - 注册驱动

Driver driver = new com.mysql.jdbc.Driver(); //连接MySQL
Driver driver = new oracle.jdbc.driver.OracleDriver(); //连接Oracle
//上面语句根据数据库选择
DriverManger.registDriver(driver);

//或者(推荐)
Class.forName(com.mysql.jdbc.Driver);

点我 - 详细了解JDBC注册驱动的原理

JDBC - 获取连接

String url = "jdbc:mysql://IP地址:端口号/表名";
String url = "jdbc:oracle:thin:@IP地址:端口号:表名"
//上面语句根据数据库选择
String user = "root";
String password = "密码";
Connection conn = DriverManager.getConnection(url,user,password);
getConnection(String url,Properties info);

试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。

会抛出异常SQLException

连接失败或超时报错:

CommunicationsException:Communications link failure

JDBC - 获取数据库操作对象

Statement stmt = conn.createStatement();

Statement 专门执行SQL语句

createStatement();

创建一个 Statement 对象来将 SQL 语句发送到数据库。不带参数的 SQL 语句通常使用 Statement 对象执行。如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。

会抛出异常SQLException

JDBC - 执行SQL语句

执行不返回内容的SQL语句

String sql = "SQL语句";
int count = stat.executeUpdate(sql);
  //返回int型语句,数值是一共影响了几行数据
System.out.println("本次执行影响了"+ count +"条语句")
executeUpdate(String sql);

执行给定的SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句(SQL DDL)

会抛出异常SQLException

执行带返回内容的SQL语句

String sql = "SQL查询语句";
ResultSet rs = stat.executeQuery();
executeQuery(String sql);

执行给定的SQL语句,该语句返回单个ResultSet对象,返回值永远不能为null

会抛出异常SQLException

JDBC - 处理查询结果集

while(rs.next()){
  String 
}
next()

将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false

会抛出异常SQLException

JDBC - 释放资源

try{

}catch(SQLException e){
  e.printStackTrace();
}finally{ 
  //为了保证资源一定被释放,在`finally`语句快中关闭资源
  try{
    //关闭ResultSet
    if(rs != null){
      close.rs();
    }
  }catch(SQLExecption e){
    e.printStackTrace();
  }
  try{
    //关闭Statement
    if(stat != null){
      close.stat();
    }
  }catch(SQLExecption e){
    e.printStackTrace();
  }
  try{
    //关闭Connection
    if(conn != null){
      close.conn();
    }
  }catch(SQLExecption e){
    e.printStackTrace();
  }
  
  
}

要遵循从小到大依次关闭

分别对其trycatch的原因是防止在关闭中间连接时出错,影响后边连接的关闭

comments powered by Disqus