0
点赞
收藏
分享

微信扫一扫

JDBC和数据库连接池

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

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 条评论