JDBC

JDBC基本概念

  • 概念:Java Database Connectivity Java数据库连接

  • JDBC本质: 其实是官方(sun公司)定义的一套操作所有关系型数据的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这一套接口(JDBC)编程,真正执行的代码时驱动jar包中的实现类。
    JDBC

快速入门

  1. 导入驱动jar包
    1. 复制相应的jar包到项目的lib目录下;
    2. 右键 -->Add as Library
  2. 注册驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
  3. 获取数据库的连接对象 Connection
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","username","password");
  4. 定义sql
    String sql = "update account set balance = 500 where id = 1";
  5. 获取执行sql语句的对象 Statement
    Statement stmt = conn.createStatement();
  6. 执行sql,接受返回结果
    int count = stmt.executeUpdate(sql);
  7. 处理结果
    System.out.println(count);
  8. 释放资源
    stmt.close();
    conn.close();

对JDBC中各个接口和类详解

  1. DriverManager:驱动管理对象
    • 功能:
      1. 注册驱动:告诉程序用哪一个数据库驱动jar包
        static void registerDriver(Driver driver):注册与给定的驱动程序DiverManager。
        写代码使用:Class.forName(“com.mysql.cj.jdbc.Manager”);是因为原码里面存在静态代码块
        注意: mysql5之后可以省略这一个步骤。

      2. 获取数据库连接

        1. 方法:static Connection getConnection(String url ,String user, String password)
        2. 参数:
          url:指定连接的路径jdbc:mysql://ip地址:端口号/数据库名称(如果是本机的mysql服务器,并且默认端口是3306,则可以简写为:jdbc:mysql:///数据库名)
          user:用户名
          password:密码
  2. Connection:数据库连接对象
    1. 功能:
      1. 获取执行sql的对象
        • Statement createStatement (String sql)
        • PreparedStatement preparedDatatement(String sql)
      2. 管理事物
        • 开启事务:void setAutoCommit(boolean autoConmmit),调用该方法设置参数为false,即开启事物
        • 提交事务:commit()
        • 回滚事务:rollback()
  3. Statement:执行sql的对象
    • boolean execute(String sql): 可以执行任意的sql
    • int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句;
      返回值:影响的行数,可以判断DML是否成功,大于0则成功执行
    • ResultSet executeQuery(String sql):执行DQL语句
  4. ResultSet:结果集对象,封装查询结果
    • next():游标向下移动一行
    • getXXX(参数):获取数据
      • XXX:代表数据类型
      • 参数:
        int:代表列的编号,从1开始,如:getString(1)
        String:代表列名称。如:getDouble(“name”)
      • 注意:
        使用步骤:
        1. 游标向下移动一行
        2. 判断是否有数据
        3. 获取数据
  5. PreparedStatement:执行sql的对象
    1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题。
  6. 解决SQL注入问题:使用PreparedStatement对象
  7. 预编译SQL:参数使用?作为占位符
  8. 步骤:
    1. 导入驱动包
    2. 注册驱动
    3. 获取数据库连接对象
    4. 定义sql
      注意:使用?作为占位符。
    5. 获取执行sql语句的对象 PreparedStatement Connection.preparedStatement(String sql)
    6. 给?赋值
      1. 方法:setXXX(参数1,参数2)
        • 参数1:?的位置编号,从1开始
        • 参数2:?的值
    7. 执行sql,接受返回结果,不需要传递sql语句
    8. 处理结果
    9. 释放资源
抽取JDBC工具类:JDBCUtils
  • 目的:简化书写
  • 分析:
    1. 注册驱动抽取
    2. 抽取一个方法获取连接对象
      • 需求:不想传递参数,还得保证工具类的通透性。
      • 解决:配置文件
        jdbc.properties
        url =
        user =
        password =
    3. 抽取一个方法释放资源
  • 代码实现:
public class JDBCUtils {
       private static String url;
       private static String user;
       private static String password;
       private static String driver;
       /**
        * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
        */
       static{
           //读取资源文件,获取值。
   
           try {
               //1. 创建Properties集合类。
               Properties pro = new Properties();
   
               //获取src路径下的文件的方式--->ClassLoader 类加载器
               ClassLoader classLoader = JDBCUtils.class.getClassLoader();
               URL res  = classLoader.getResource("jdbc.properties");
               String path = res.getPath();
               System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
               //2. 加载文件
              // pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
               pro.load(new FileReader(path));
   
               //3. 获取数据,赋值
               url = pro.getProperty("url");
               user = pro.getProperty("user");
               password = pro.getProperty("password");
               driver = pro.getProperty("driver");
               //4. 注册驱动
               Class.forName(driver);
           } catch (IOException e) {
               e.printStackTrace();
           } catch (ClassNotFoundException e) {
               e.printStackTrace();
           }
       }
   
   
       /**
        * 获取连接
        * @return 连接对象
        */
       public static Connection getConnection() throws SQLException {
   
           return DriverManager.getConnection(url, user, password);
       }
   
       /**
        * 释放资源
        * @param stmt
        * @param conn
        */
       public static void close(Statement stmt,Connection conn){
           if( stmt != null){
               try {
                   stmt.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
   
           if( conn != null){
               try {
                   conn.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   
   
       /**
        * 释放资源
        * @param stmt
        * @param conn
        */
       public static void close(ResultSet rs,Statement stmt, Connection conn){
           if( rs != null){
               try {
                   rs.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
   
           if( stmt != null){
               try {
                   stmt.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
   
           if( conn != null){
               try {
                   conn.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   
   }
JDBC控制事物
  1. 事物:一个包含多个步骤的业务操作。如果这个业务操作被事物管理,则这多个步骤要么同时成功,要么同时失败。
  2. 操作:
    1. 开启事务
    2. 提交事务
    3. 回滚事务
  3. 使用Connection对象来管理事务
    • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事物
    • 提交事务:commit()
    • 回滚事务:rollback()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值