JDBC基本操作

准备:

  1. 用的是java8

  2. 导入mysql-connector-java-8.0.12.jar包

  3. 右键jar包找到Add as Library...

  4. 点击Add as Library...即可

DriverManager

  1. 注册驱动

    Class.forName("com.mysql.cj.jdbc.Driver");
  2. 获取数据库连接

    Connection conn = DriverManager.getConnection(url, username, password);
  3. 参数

    1. url:连接路径 语法:jdb:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2..

    2. 示例:jdbc:mysql://127.0.0.1:3306/db1

    3. 细节:

      • 如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对

      • 配置userSSL=false参数,禁用安全连接方式,解决警告提示

      • 有些需要关闭SSL和调时区

        String url = "jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC";
    4. user:用户名

      String username = "用户名";
    5. password:密码

      String password = "密码";

Connection

  1. 获取执行SQL的对象

    • 普通执行SQL对象

      Statement createStatement()
    • 预编译SQL的执行SQL对象:防止SQL注入

      PreparedStatement prepareStatement(sql)
    • 执行存储过程的对象

      CallableStatement prepareCall(sql)
  2. 事物管理

    • MySQL事物管理

      开启事物:BEGIN;/START TRANSACTION;
      提交事物:COMMIT;
      回滚事物:ROLLBACK;
      ​
      MySQL默认自动提交事务
    • JDBC事务管理:Connection接口中定义了3个对应的方法

      开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
      提交事务:commit()
      回滚事务:rollback()

Statement作用:

  1. 执行SQL语句

    int executeUpdate(sql):执行DML、DDL语句
    返回值:(1)DML语句影响的行数(2)DDl语句执行后,执行成功也可能返回0
    ​
    ​
    ResultSet executeQuery(sql):执行DQL语句
    返回值:ResultSet结果集对象

完整代码借鉴

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");


        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);


        //3.定义sql
        String sql = "update db1 set money = 2000 where id = 1";

        //4.获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5.执行sql
        int count = stmt.executeUpdate(sql);

        //6.处理结果
        System.out.println(count);

        //7.释放资源
        stmt.close();
        conn.close();

数据库

ResultSet

  1. 封装了DQL查询语句的结果

    ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
  2. 获取查询结果

    Boolean next():(1)将光标从当前位置向前移动一行  (2)判断前行是否为有效行
    返回值:
        true:有效行,当前行有数据
        false:无效行,当前行没有数据
    xxx  getXxx(参数):获取数据
    xxx:数据类型;如:int getInt(参数);String getString(参数)
    参数:
        int:列的编号,从1开始
        String:列的名称
  3. 使用步骤

    1. 游标向下移动一行,并判断改行是否有数据:next()

    2. 获取数据:getXxx(参数)

      //循环判断游标是否是最后一行末尾
      while(rs.next()){
          //获取数据
          rs.getXxx(参数);
      }

完整代码

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");


        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);


        //3.定义sql
        String sql = "select * from account";

        //4.获取执行sql的对象Statement
        Statement stmt = conn.createStatement();

        //5.执行sql
        ResultSet rs = stmt.executeQuery(sql);

        //创建集合
        List<Account> list = new ArrayList<>();

        //6.处理结果,遍历rs中的所有数据
        //6.1光标向下移动一行,并且判断当前行师傅有数据
        while (rs.next()){
            Account account = new Account();

            //获取数据
            int id = rs.getInt(1);
            String name = rs.getString(2);
            double money = rs.getDouble(3);

            //赋值
            account.setId(id);
            account.setName(name);
            account.setMoney(money);

            //存入集合
            list.add(account);
        }


        System.out.println(list);
        //7.释放资源
        rs.close();
        stmt.close();
        conn.close();

PreparedStatement

  1. 作用:预编译SQL语句并执行:预防SQL注入问题

  2. 获取PreparedStatement对象

    //SQL语句中的参数值,使用?占位符替代
    String sql = "select * from user where username = ? and password = ?";
    ​
    //通过Connection对象获取,并传入对应的sql的语句
    PreparedStatement pstmt = conn.prepareStatement(sql);
  3. 设置参数值

    PreparedStatement对象:setXxx(参数1,参数2):给?赋值
    Xxx:数据类型;如setInt(参数1,参数2)
    参数:
        参数1:?的位置编号,从1开始
        参数2:?的值
  4. 执行SQL

    executeUpdate();/executeQuery();:
  5. PreparedStatement预编译功能开启:useServerPrepStmts=true

  6. 配置MySQL执行日志

    log-output=FILE
    general-log=1
    general_log_file="D;\mysql.log"
    slow-query-log=1
    slow_query_log_file="D:\mysql_slow.log"
    long_query_time=2
  7. PreparedStatement原理:

    1. 在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译

    2. 执行时就不用再进行这些步骤了,速度更快

    3. 如果sql模板一样,则只需要进行一次检查、编译。

数据库连接池实现

  • 标准接口:DataSource

    • 官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口。

    • 功能:获取连接

      Connection getConnection()
  • 常见的数据库连接池:

    • DBCP

    • C3PO

    • Druid (常用!!!)

Driud

  1. 导入jar包druid-1.1.12.jar

  2. 定义配置文件
     

  3. 加载配置文件

    //3.加载配置文件
            Properties prop = new Properties();
            prop.load(new FileInputStream("druid.properties的路径"));
            
            
    //查找路径
    System.out.println(System.getProperty("user.dir"));
  4. 获取数据库连接池对象

    //4.获取连接池对象
            DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
  5. 获取连接

    //5.获取数据库连接 Connection
            Connection connection = dataSource.getConnection();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值