jdbc笔记

1.JDBC基础
2.快速入门
3.对JDBC中各个接口和类详解
##JDBC
*概念:Java DataBase Connectivity java数据库连接,java语言操作数据库
*JDBC本质:其实就是官方(sun)公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
在这里插入图片描述

2、快速入门:
*步骤:
1.导入驱动jar包
1.复制mysql-connection-5.1.37-bin.jar到创建好的libs项目目录下面
2.右键libs---->Add As library正真的把jar包加载进来

2.注册驱动
3.获取数据库连接对象 Connection
4.定义sql语句
5.获取执行sql语句的对象 statement
6.执行sql,接受返回结果
7.处理结果
8.释放资源
3.详解各个对象:
1.DriverManager:驱动管理对象
*功能:
1.注册驱动:就是面向对象编程里面告诉程序该运行哪个程序包

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {}
static {
try {
     DriverManager.registerDriver(new Driver());
   } catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
   }}}

在这里插入图片描述

我们在代码上面看的是 写的Class.forName(“com.mysql.jdbc.Driver”)
其实在这个类对应的函数里面也是有相同的方法叫做
static void registerDriver(Driver driver):注册与给定的驱动程序DriverManager
写代码使用的是Class.forName(“com.mysql.jdbc.Driver”) 执行这个类,类里面 有静态代码块自动执行(按两下shift键搜索Driver查看源码)
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException(“Can’t register driver!”);
}}}

我们可以看到这个jar包已经包含了这个驱动加载,如果我们没有写注册驱动,他也会自动加载驱动(也就是说Mysql5之后的版本驱动的jar包可以省略注册驱动的步骤。
2.获取数据库连接对象
方法:

public static Connection getConnection(String url,
                                       String user,
                                       String password)

参数:
*url:指定连接的路径
*语法:jdbc:mysql://ip地址(域名):端口号/数据库名
*例子:jdbc:mysql://localhost:3306/db3
*细节:如果连接的是本机mysql服务器且端口号为3306,可以省略为 jdbc:mysql:///数据库连接名
2.Connection:数据库连接对象
1.功能:
1.1获取执行sql的对象
*Statement createStatement()
*PreparedStatement prepareStatement(String sql)
2.管理事务:
*开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
*提交事务:commit();
*回滚事务:rollback();
3.Statement:执行sql的对象
1.执行sql
1.1 boolean execute(String sql):可以执行任意的sql ,不常用(因为他多用于处理相对复杂的sql语句)了解即可
1.2 int executeUpdate(String sql)执行DML(insert update delete) DDL(create alert drop)语句
*返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功
2.练习:
DML(data manipulation language)数据操纵语言:
DDL(data definition language)数据库定义语言:
在这里插入图片描述

4.ResultSet:结果集对象,封装查询结果的
*next() 游标向下移动一行

  • getXXX(参数)获取数据
    *XXX代表数据类型 如:int getInt(); String getString();
    $参数:
    1.int:代表列的编号,从1开始 如:getString(1);
    2.String代表的是列的名称,如:getDouble(“balance”);
    在这里插入图片描述

在这里插入图片描述

*注意:
*使用的步骤:
1.游标向下移动一行
2.判断是否有数据boolean next(),判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true.
3.获取数据
while(rs.next()){
//6.2获取数据

while(rs.next()){
    //6.2获取数据
    int id=rs.getInt(1);
    String name=rs.getString("name");
    double balance=rs.getDouble(3);
    System.out.println(id+"---"+name+"---"+balance);
}

*练习:
*定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
1.定义Emp类
2.定义方法 public List findAll(){}
3.实现方法 select * from emp;

5.PreparedStatement:执行sql对象
1.SQL注入问题:输入密码为 a’ or ‘a’ = 'a
2.sql:select * from user where username=‘adsc’ and password=‘a’ or ‘a’ =‘a’;
statement处理的是静态的sql语句,这些sql语句在生成的时候已经拼接好了,从而执行,这个时候容易
3.解决sql注入问题:使用PreparedStatement对象来解决
预编译的sql:参数使用?作为占位符,在执行sql的时候给sql赋值
4.步骤: 在这里插入图片描述

5.注意:后期都会使用PreparedStatement增删改查的操作
1.可以防止sql注入
2.效率
所有的sql是静态的sql
##抽取JDBC工具类:JDBCUtils
*目的:简化书写
*分析:
1.注册驱动也抽取一下
2.抽取一个方法获取连接对象
*需求:不想传递参数(麻烦),还要保护工具类的通用性
*解决方案:使用配置文件
jdbc.properties
url=
user=
password=
2.抽取一个方法释放资源

*练习:
*需求:
1.通过键盘录入用户名和密码
2.判断用户是否登入成功
select * from user where username="“and password=”";
如果这个sql有查询结果,则成功
*步骤:1.创建数据库表user

CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(32),
	passwoed VARCHAR(32)
);
SELECT * FROM USER;
INSERT into USER VALUES(NULL,'zhangsan','123');
INSERT into USER VALUES(NULL,'lisi','234');

##JDBC操控事务:
1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败
2.操作:
1.开启事务
2.提交事务
3.回滚事务

*开启事务:*setAutoCommit(boolean autoCommit):*调用该方法设置参数为false,即开启事务
*提交事务:commit();
*回滚事务:rollback();
3.使用的是commection管理事务
*开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
*在执行sql之前开启事务
在这里插入图片描述

#今日内容
1.数据库连接池:解决之前的方法每次获取数据库连接申请资源和释放的耗时
2.Spring JDBC:JDBC Template
##数据库连接池
1概念:其实就是一个容器(集合),存放数据库连接的对象。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库的时候,从容器中获取连接对象,用户访问完之后,会将连接对象返回给容器。
2
好处:
1.节约资源
2.用户访问高效
3.实现:
1、标准接口:DataSource javax.sql包下的
1.方法:
*获取连接:getConnection()
*归还连接:如果连接对象connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,
2.一般我们不去实现它,有数据库厂商来实现
1.C3P0:数据库连接池技术
2.Druid:数据库连接池实现技术,阿里巴巴
4.C3P0:数据库连接池技术
*步骤:
1.导入jar包(两个) C3P0-0.9.5.2.jar mchange-commons-java-0.2.12 jar,不要忘记导入数据库驱动jar包
2.定义配置文件:
*名称:c3p0.properties或者c3p0-config.xml
*路径:直接将文件放在src目录下面即可
3.创建核心对象 数据库连接池对象 ComboPooledDataSource
4.获取连接:getConnection

5.Druid:数据库连接池实现技术,由阿里巴巴提供的
*步骤:
1.导入jar包 druid-1.0.9.jar和数据库连接jar包
2.定义配置文件:
*特点:是propertie文件
*可以叫任意名称,可以放在任意的目录下。(也就是会自动加载)
3.加载配置文件。properties
3.获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
4.获取连接:getConnection

*定义类(上面的方法加载对象。。。还是麻烦,现在我们来定义类)
1.定义一个类JDBCUtils
2.提供静态代码块加载配置文件,初始化连接池对象
3.提供方法:
1.获取连接方法:通过数据库连接池获取连接
2.释放资源
3.获取连接池的方法
#Spring JDBC
#Spring框架对JDBC的简单封装。提供了一个 JDBCTemplate对象简化JDBC的开发
#步骤:
1.导入jar包
2.创建JDBCTemplate的方法来完成CRUD的操作

  • JdbcTemplate template=new JDBCTemplate(ds);
    3.调用JDBCTemplate的方法来完成CRUD的操作
    *update():执行DML语句。增删改
    *queryForMap():查询结果将结果集封装为map集合
    *queryForList():查询结果将结果集封装为list集合
    *query():查询结果,将结果封装为JavaBean对象
    *queryForObject:查询结果,将结果封装为对象
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无穷开心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值