0
点赞
收藏
分享

微信扫一扫

JDBC和数据库连接池

柠檬果然酸 2022-04-21 阅读 174

1.jdbc快速入门

且导入mysql包时一定要 Add as Library选择
在这里插入图片描述

package com.itheima;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接 如果是本地数据库且端口号为3306 则可以省略
        //String url="jdbc:mysql://127.0.0.1:3306/dbl";
        String url="jdbc:mysql:///dbl?useSSL=false";
        String username="root";
        String pssward="1234";
        Connection conn= DriverManager.getConnection(url,username,pssward);

        //3.定义SQL
        String sql1="update emp set salary=7000 where id=1001";
        String sql2="update emp set salary=6000 where id=1002";
        //4.获取执行sql对象的对象Statement
        Statement stmt= conn.createStatement();

        //5.执行sql
        try {
            //开启事务
            conn.setAutoCommit(false);

            int count1= stmt.executeUpdate(sql1);
            System.out.println(count1);
            int w=3/0;
            int count2= stmt.executeUpdate(sql2);
            System.out.println(count2);
            //提交事务
            conn.commit();
        } catch (Exception throwables) {
            //回滚事务
            conn.rollback();
        }
        //6.处理结果

        //7.关闭资源
        stmt.close();
        conn.close();
    }
}


2.JDBC API详解

    1.DriverManager

  • 1.MySQL 5之后的驱动包,可以省略注册驱动的步骤--------Class.forName(“com.mysql.jdbc.Driver”);
  • url : 连接路径

  • user :用户名

  • poassword :密码


    2.Connection

Connection(数据库连接对象)作用:

  • 获取执行 SQL 的对象 ------------------------- Statement stmt= conn.createStatement();
  • 管理事务----- //开启事务conn.setAutoCommit(false);----提交事务conn.commit();–回滚事务conn.rollback();

    3.Statement

Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。

  • 执行DDL、DML语句
    在这里插入图片描述
  • 执行DQL语句
    在这里插入图片描述

    4.ResultSet

封装了SQL查询语句的结果。
而执行了DQL语句后就会返回该对象,对应执行DQL语句的方法如下:

那么我们就需要从 ResultSet 对象中获取我们想要的数据。ResultSet 对象提供了操作查询结果数据的方法,如下:

package com.itheima;

import com.itheima.pojo.Account;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class Result_demo1 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接 如果是本地数据库且端口号为3306 则可以省略
        //String url="jdbc:mysql://127.0.0.1:3306/dbl";
        String url="jdbc:mysql:///dbl?useSSL=false";
        String username="root";
        String pssward="1234";
        Connection conn= DriverManager.getConnection(url,username,pssward);

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

        Statement stm = conn.createStatement();

        ResultSet res = stm.executeQuery(sql1);
        Account ac=new Account();
        List<Account> list=new ArrayList<>();
        while(res.next()){
            int i=res.getInt(1);
            String name =res.getString(2);
            Double monkey =res.getDouble(3);
            ac.setId(i);
            ac.setMonkey(monkey);
            ac.setName(name);
            list.add(ac);
        }
        System.out.println(list);
        res.close();
        stm.close();
        conn.close();


    }
}

    5.PreparedStatement

SQL注入问题’ or ‘1’ ='1

PreparedStatement对象.

上面的sql语句中参数使用 ? 进行占位,在之前之前肯定要设置这些 ? 的值。

执行SQL语句

package com.itheima;

import com.itheima.pojo.Account;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class Result_demo1 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接 如果是本地数据库且端口号为3306 则可以省略
        //String url="jdbc:mysql://127.0.0.1:3306/dbl";
        String url="jdbc:mysql:///dbl?useSSL=false";
        String username="root";
        String pssward="1234";
        Connection conn= DriverManager.getConnection(url,username,pssward);

        //3.定义SQL
        String sql1="select * from emp where id=? and job_id=?";

        int id=1001;
        int job_id=4;

        PreparedStatement pstm = conn.prepareStatement(sql1);

        pstm.setInt(1,id);
        pstm.setInt(2,job_id);

        ResultSet rs = pstm.executeQuery();

        while(rs.next()){
            String is=rs.getString(2);
            int id1=rs.getInt(1);
            int id2=rs.getInt(3);
            System.out.println(is);
            System.out.println(id1);
            System.out.println(id2);
        }
        rs.close();
        pstm.close();
        conn.close();


    }
}

PreparedStatement原理:
1.PreparedStatement 好处:

  • 预编译SQL,性能更高
  • 防止SQL注入:将敏感字符进行转义
    在这里插入图片描述
  • 开启预编译功能
    在代码中编写url时需要加上以下参数。而我们之前根本就没有开启预编译功能,只是解决了SQL注入漏洞.

3.数据库连池

    1.数据库连接池介绍

数据库连接池是一个容器,不需要创建连接对象,直接从连接池中进行取,用完之后进行归还。
1.好处:

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏 ------当有人一直占用后就会进行取回

在这里插入图片描述
2.常见的数据库连接池:

  • DBCP
  • C3P0
  • Druid
    我们现在使用更多的是Druid,它的性能比其他两个会好一些。

3.Druid(德鲁伊):

  • Druid连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一

    2.Druid数据库连接池

举报

相关推荐

0 条评论