JDBC学习笔记

一、概念

Java Database Connectivity Java数据库连接,Java语言操作数据库

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

二、入门步骤

//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接对象
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/girls", "root", "7295wangmeng");
//3.定义sql语句
String sql = "update boys set userCP=300 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();

⭐分析:

1.抽取一个方法注册驱动
2.抽取一个方法获取连接对象
*需求:不想传递参数(麻烦),还得保证工具类的通用性。
*解决:配置文件
—>于是,如何抽取JDBC工具类?

三、详解各个对象

1.DriverManager:驱动管理对象

功能:
1.注册驱动
static void registerDriver(Driver driver):注册与给定的驱动程序Drivemanager
写代码使用:Class.forName(“com.mysql.jdbc.Driver”);
Connection:数据库连接对象
Statement:执行sql的对象
ResultSet:结果集对象
PreparedStatement:执行sql的对象

2.获取数据库连接
url:指定连接的路径
语法:jdbc:mysql://ip地址(域名):端口号
uesr:用户名
password:密码
如果连接的是本机的mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdb:mysql:///数据库名

2.Connection:数据库连接对象

功能:
1.获取执行sql的对象

Statement createStatement() PreparedStatement
prepareStatement(String sql)

2.管理事务

开启事务:void setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()

3.Statement:执行sql的对象

1.boolean execute(String sql):可以执行任意的sql对象
2.int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
//返回值:影响的行数int
3.ResultSet executeQuery(String sql):执行DQL(select)语句

4.ResultSet:结果集对象,封装查询结果

1.boolean next():游标向下移动一行,判断当前行是否是最后一行(是否有读数),如果是,则返回false,如果不是则返回true
2.getXxx(参数):获取数据
Xxx:代表数据类型 如:int getInt()
参数:
1.int 代表列的编号 ,从1开始 如:getString(1)
2.String:代表列名称 getDouble(“userCP”)

5.PreparedStatement:执行sql的对象

⭐sql注入问题:

在拼接sql时,有一些sql的特殊关键字参与关键字的拼接,会造成安全性的问题
①输入用户随便,输入密码为一个恒等式,如:a’ or ‘a’ = 'a
2.sql:select * from user where username = ‘ssr’ and password = ‘a’ or ‘a’ = ‘a’
②解决sql注入问题:使用PreparedStatement对象(表示预编译的sql语句的对象)来解决

静态sql容易产生sql注入问题,预编译sql则不会

③预编译的sql:参数使用?作占位符
④步骤:

1.导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
2.注册驱动
3.获取数据库连接对象 Connection
4.定义sql
【注意:sql的参数使用?作为占位符】
【如:select * from user where username = ? and password = ?】
5.获取执行sql语句的对象 PreparedStatement
【Connection.prepareStatement ( String sql )】
6.给?赋值:使用PreparedStatement中的setXxx(数字,参数),分别对象问号的位置和内容
7. 执行sql,接受返回结果,不需要传递参数
8.处理结果
9.释放资源\

⑤注意:后期都会使用PreparedStatement来完成增删改查的所有操作

1.可以防止sql注入
2.效率更高

四、JDBC控制事务

1.事务

一个包含多个步骤的业务操作。如果这个业务操作呗事务管理,则这多个步骤要么同时成功,要么同时失败

2.操作:

1.开启事务
2.提交事务
3.回滚事务

3.使用Connection对象来管理事务

在执行sql之前开启事务,当所有sql都执行完提交事务,在catch中回滚事务
1)开启事务:setAutoCommit (bollean autocommit):调用该方法设置参数为false,即开启事务
2)提交事务:commit( )
3)回滚事务:rollback()

五、数据库连接池

1.概念

其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

2. 好处

1)节约资源
2)用户访问高效

3.实现

1)标准接口:DataSource javax.sql包下的
①方法:
* 获取连接:getConnetion()
* 归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
2)一般我们不去实现它,有数据库厂商来实现
①C3P0:数据库连接池技术
②Druid:数据库连接池实现技术,由阿里巴巴提供

4.C3P0:数据库连接池技术

1)使用步骤
①导入jar包

mchange-commons-java-0.2.19.jar
c3p0-0.9.5.5.jar

②定义配置文件:
名称:c3p0.properties 或者 c3p0-config.xml
导包时不要忘记导入数据库驱动jar包
路径:直接将文件放在src目录下即可
③创建核心对象:数据库连接池对象 ComboPooledDataSource
(close是将对象归还到连接池中)
④获取连接:getConnection

5.Druid:数据库连接池实现技术

阿里巴巴提供

1)步骤

①导入jar包:druid-1.1.21.jar
②定义配置文件:druid.properties
特点:
a)是properties形式的
b)可以叫任意名称,可以放在任意目录下
③加载配置文件:Properties
④获取数据库连接池对象:通过工厂类来获取-DruidDataSourceFactory
⑤获取连接:getConnection

2)定义工具类

①定义一个类 JDBCUtils
②提供静态代码块加载配置文件,初始化连接池对象
③提供方法
a)获取连接方法:通过数据库连接池获取连接
b)释放资源
c)获取连接池的方法

六、Spring JDBC:JDBC Template

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

步骤:
1.导入jar包
2.创建JDBCTemplate对象。依赖于数据源DataSource
3.调用方法JDBCTemplate的方法来完成CRUD的操作

update():执行增删改语句
queryForMap():查询结果将结果集封装为map集合
queryForList():查询结果,将结果封装为list集合
query():查询结果,将结果封装为JavaBean对象
queryForObject:查询结果,将结果封装为对象

//1.导入jar包
//2.创建JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(DruidUtils.getDataSource());
//3.调用方法
String sql = "UPDATE boys SET userCP=5200 WHERE id=?";
int count = template.update(sql, 5);
System.out.println(count);
//不需要申请连接,也不需要释放资源。JDBCTemplate内部有方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值