JDBC学习笔记

本文介绍了JDBC的基础知识,包括如何注册驱动、获取数据库连接以及使用Statement和PreparedStatement执行SQL语句。还探讨了事务管理和PreparedStatement防止SQL注入的重要性,并提到了数据库连接池的概念及其优势。最后,展示了使用PreparedStatement的示例代码。
摘要由CSDN通过智能技术生成

JDBC:java语言操作所有关系型数据库的一套API

快速入门

导入架包
导入架包

//记得导入架包
public class Test {
    public static void main(String[] args) throws Exception {
        String url="jdbc:mysql://127.0.0.1:3306/itcast";
        String usename="root";
        String password="123456";
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        Connection conn=DriverManager.getConnection(url,usename,password);//返回connection对象
        //3.定义sql语句
        String sql="update emp set age=30 where name='柳岩'";
        //4.获取执行sql的对象Statement
        Statement stmt=conn.createStatement();
        int count=stmt.executeUpdate(sql);//返回影响行数
        System.out.println(count);
        //5.释放资源
        stmt.close();
        conn.close();
    }
}

常用API

DriverManager驱动管理类

1.注册驱动

DriverManager.registerDriver在 Class.forName("com.mysql.jdbc.Driver")静态代码块中//mysql5之后这段代码不写也行

2.获取数据库连接

DriverManager.getConnection(url,usename,password)返回Connection对象
url="jdbc:mysql://ip地址(域名):端口号/数据库名?参数键值对1&参数键值对2...."

注意事项:

1.例如url="jdbc:mysql://127.0.0.1:3306/test"(本机ip,默认端口可以省略,:"jdbc:mysql:///test")
2.配置useSSL=false参数,禁用安全连接方式,解决警告提示,如url="jdbc:mysql://127.0.0.1:3306/test?useSSL=false"

Connection数据库连接对象

1.获取执行sql的对象

普通执行SQL对象:
Statement createStatement()
Statement stmt=conn.createStatement()//conn为建立连接返回的Connection对象
预编译sql的执行sql对象:防止sql注入
PrepareStatement prepareStatement(sql)
执行存储过程对象
CallableStatement prepareCall(sql)

2.管理事务

对比MySQL中的事务管理:
开启事务:begin;或者start transaction;
提交事务:commit;
回滚事务:rollback;
MySQL默认自动提交事务
JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务,false为手动提交,即为开启事务
提交事务:commit
回滚事务:rollback

例如

在sql语句执行之前开启事务
try{
    conn.setAutoCommit(false);//开启事务
    
    //执行sql语句
    
    conn.commit();//没有错误,提交事务
    
}catch(Exception throwables){
    conn.rollback();//出现错误,回滚事务 
}

Statement执行sql语句

int executeUpdate(sql);//执行DML,DDL语句
返回值:int 
(1)DML语句影响行数
(2)DDL语句执行后,执行成功也可能返回0(一般不报异常就执行成功了)

ResultSet executeQuery(sql);//执行DQL语句
返回值:ResultSet结果集对象

ResultSet获取结果数据

获取查询结果数据:
boolean next();(1)将光标(初始在数据行上一行)从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:(1)true有效行,当前行数据有效(2)false无效行,当前行没有数据

*** get***(参数):获取数据
***:数据类型;如:int getInt(参数);String getString(参数);
参数两种:(1)int:列的编号,从1开始  或者(2)String :列的名称

如:

1.注册驱动
2.获取连接

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

4.获取Statement对象
Statement stmt=conn.createStatement();

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

6.处理结果
List<Account> list=new ArrayList<>();//创建集合
while(rs.next()){//光标向下移动一行,且判断当前行是否有数据
    //获取数据;
    //int id=rs.getInt(1);//getInt("id")
    //int name=rs.getString(2);
    Account ac=new Account();//创建对象
    ac.setId(id);
    ac.setName(name);
    list.add(ac);
}

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

PreparedStatement防止sql注入

作用:预编译sql并执行sql语句

(1)获取PrepareStatement对象
//sql语句中的参数值,使用?占位符代替
String sql="select * from user where usename=? and password=?";//防止sql注入
//通过Connection 对象获取,并传入对应的sql语句
PreparedStatement pstmt=conn.prepareStatement(sql);//获取执行sql语句对象时,传入sql语句
(2)设置参数
PreparedStatement对象:set***(参数1,参数2):给?赋值
***:数据类型;setInt(参数1,参数2)
参数:
参数1?的位置编号,从1开始
参数2?的值
(3)执行sql
executeUpdate();/executeQuery();:不需要再传递参数

例如:

//注册驱动
//设置连接

String name="****";
String password="*****";
定义sql
String sql="select * from tb_user where usename=? and password=?";

//获取pstmt对象
PreparedStatement pstmt=conn.prepareStatement(sql);

//设置?的值
pstmt.setString(1,name);
pstmt.setString(2,password);

//执行sql语句
Resultset rs=pstmt.executeQuery();

if(rs.next()){
    //成功
}
else{
    //失败
}

//释放资源
rs.close();
pstmt.close();
conn.close();

数据库连接池

简介:

数据库连接池是个容器负责分配、管理数据库连接
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

好处:

资源重用
提高系统响应速度
避免数据库连接遗漏

数据库连接池实现

标准接口:DateSourse
官方提供的数据库连接池标准接口,由第三方组织实现此接口
功能:获取连接

Connection getConnection()
常见的数据库连接池:DBCP、C3P0、Druid(常用)

配置文件:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chp的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值