【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
一、JDBC简介
Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称。它可以把数据持久保存,是一种持久化机制。
1.持久化
持久化就是将程序中的数据在瞬时状态和持久状态间转换的机制。
2.JDBC API
Connection连接接口
Statement接口
ResultSet结果集接口
PerparedStatement接口
3.JDBC Driver Manager(驱动程序管理器)
SUN公司提供,它是JDBC体系结构的支柱,负责管理各种不同的驱动(java.sql包)
4.JDBC驱动
JDBC驱动由各个数据库厂商或第三方中间件厂商提供,负责连接各种不同的数据库。
在开发Java应用程序时,我们只需要正确加载JDBC驱动,正确调用JDBC API,就可以进行数据库访问。
二、JDBC API
1.JDBC API主要做三件事:与数据库建立连接、发送SQL语句、处理结果。
DriverManager类:装载驱动程序,并为创建新的数据库连接提供支持。
Connection类:负责连接数据库并担任传输数据的任务。
Statement类:由Connection类产生,负责执行SQL语句。
ResultSet类:负责保存和处理Statement执行后所产生的结果。
PreparedStatement类:Statement的子接口,具有高安全性、高性能、高可读性和高可维护性的优点。
三、JDBC访问数据库的步骤
1.加载JDBC驱动
使用Class.forName()方法将给定的JDBC驱动类加载到Java虚拟机。若系统中不存在给定的类,则会引发ClassNotFoundException异常。
2.与数据库建立连接
DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。当调用getConnection()方法时,DriverManager类首先从已加载的驱动程序列表中找到一个可以接收该数据库URL的驱动程序,然后使用相关数据连接到数据库,创建连接对象并返回引用。
3.发送SOL语句,并得到返回结果
一旦建立连接,就使用该链接创建Statement接口的对象,并将语句传递给它所连接的数据库:查询操作返回类型为ResultSet的结果集。
4.处理返回结果
结果集:
while(rs.next()){
int id = rs.gitInt("id");
String name = rs.getString("name");
System.out.println(id+"\t"+name);
}
四、两种常见的驱动方式
1.JDBC-ODBC桥连方式(驱动类:“sun.jdbc.odbc.JdbcOdbcDriver”数据库连接字符串以“jdbc:odbc:”开始,后面跟随数据源名称)
下载ODBC驱动
配置ODBC数据源
2.使用纯Java方式连接数据库
常见的错误有以下几类:
JDBC驱动类的名称书写错误,出现ClassNotFoundException异常;
数据库连接字符串,数据库用户名、密码书写错误,出现SQLException异常;
数据库操作结束后,没有关闭数据库连接,导致仍旧占有系统资源。
关闭数据库连接的语句没有放到finally语句中,导致语句可能没有被执行。
3.在实际项目开发中,为了避免可能出现的乱码问题,将制定数据库连接的编码集为utf-8,URL连接:
url = jdbc:mysql://126.0.0.1:3306/epet?useUnicode=true&characterEncoding=utf-8;
五、Statement,ResultSet,PreparedStatement类方法
1.Connection接口常用方法
close();立即释放此对象的数据库和JDBC资源
Statement createStatement();创建一个对象来将SQL语句发送到数据库
PreparedStatement prepareStatement(String sql);创建一个对象将参数化的sql语句发送到数据库
boolean isClosed()查询对象是否关闭
2.Statement接口方法
ResultSet executeQuery(String sql);执行sql查询并获取ResultSet对象
int executeUpdate(String sql);可以执行插入,删除,更新操作
boolean execute(String sql);执行任意SQL语句,若结果为ResultSet对象,返回true;若为更新计数或者不存在结果,则返回false;
3.ResultSet接口方法
boolean next();下一行
boolean previous();上一行
void close();关闭ResultSet对象
int/float/String getxxx(int/String columnIndex);以xxx形式获取结果集指定列好的值
int getRow();当前的行号
boolean adsolute(int row);光标移动到指定的行
4.PreparedStatement接口方法
boolean execute();在此对象执行SQL语句,结果是ResultSet对象返回true,其它返回false
ResultSet executeQuery();返回结果集
int executeUpdate();执行SQL语句(DML语句insert,update,delete;或者无返回内容的DDL语句),返回值是该操作所影响的行数
void setInt(int index,int x);
void setFloat(int index,float x);
void setDouble(int index,double x);将制定参数设置为给定的Java int值.
void setObject(int index,Object x);使用给定对象设置指定参数的值
六、使用PreparedStatement操作数据库的基本步骤
1.创建PreparedStatement对象
PreparedStatement pstmt = con.preparedStatement("update dog Set health=?,love=? where id=?");
SQL语句具有一个或多个输入参数:这些输入参数的值在SQL语句创建时未被指定,而是每个输入参数使用占位符?替代
2.设置每个输入参数的值
调用setxxx()方法
3.执行SQL语句
在设置完参数后,就可以调用PreparedStatement接口的执行方法来执行SQL语句
[ResultSet executeQuery(),int executeUpdate(),boolean execute()]
七、PreparedStatement比Statement好在哪里
1.提高了代码的可读性和可维护性。避免了繁琐麻烦又容易出错的拼接。
2.提高了SQL语句执行的性能。
创建Statement对象时不使用SQL语句做参数,不会解析和编译SQL语句,每次调用方法执行SQL语句时都要进行解析和编译操作(操作相同)
创建PreparedStatement对象时使用SQL语句做参数,会解析和编译语句。也可以使用带占位符的SQL语句作为参数,在通过setxxx()方法赋值后执行SQL语句无需再次解析和编译,直接执行即可。多次执行相同操作可以大大提高性能。
3.提高了安全性。
使用预编译语句,传入的任何参数都不会和已经预编译的sql语句进行拼接,避免了SQL注入攻击。
【学习笔记】JDBC数据库连接技术(Java Database Connectivity)的更多相关文章
- JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language
JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...
- [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识
一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- JDBC数据库连接技术
[学习笔记]JDBC数据库连接技术(Java Database Connectivity) 一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称 ...
- 学习笔记—JDBC
JDBC的概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...
- JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)
JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/beans)中建立数据库连接 2)进行sql操作 3)断开数据库连接 ...
- 【转】JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)
转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...
- Java学习笔记(二)——Java操作properties文件
[前面的话] 前段时间在学习和玩java web相关的东西,对于这些技术,一边学习,一边做东西,一边总结,希望可以一边成长和有所收获.有时总是思考太多反而成为了前进的阻力,所以对于生活还是简单一些,不 ...
随机推荐
- 题解 P1876 【开灯】
题目链接 编者说得对 一道很明显的数学题,相信大家小学都做过. 通俗一点,就是找因数为奇数个的数.而这一类的数.明显的是平方数. 所以就是找n以内的平方数. 废话少说,直接上题解. #include& ...
- 题解 P1632 点的移动
P1632 点的移动 题目描述 平面上有N个整数坐标点.如果将点(x0,y0)移动到(x1,y1),则需要的代价为|x0-x1|+|y0-y1|.求使得K(K=1,-,N)个点在同一位置上最少需要的代 ...
- (STM32F4) Real-time Clock
老實說Real-time Clok這項功能,我也只有在PC和手機上有見過,其他的應用產品上我也很少見到. 言歸正傳在STM32F4 RTC這項功能在IC內部就有內建,在早期的8051是如果要做RCT是 ...
- MAC office2016 安装及激活(试了一下,靠谱, 非常感谢原作者)
转载地址:https://blog.csdn.net/jxq0816/article/details/77248462 非常感谢原作者. 一.安装包下载地址 http://officecdn.micr ...
- day--40 mysql-视图,触发器,存储过程,函数总结
视图,触发器,存储过程,函数总结 一:视图 01:介绍 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表,怎么就得到了虚拟表,就是你查询的结果,只不过之 前我们查询出来的虚拟表,从 ...
- [BZOJ 3262]陌上开花
今天写了到偏序问题,发现博主真的是个傻X 传送门 以前的写法 /************************************************************** Probl ...
- Windows10 下安装配置IIS + MySQL5.7.19 + nginx1.12.1 + php7.1.7
环境: VMWare Workstation Player12 Windows10 Pro x64 一.安装系统 vmware 会采用 fast install 方式很快装完,无需配置什么. 二.配置 ...
- 未在本地计算机上注册microsoft.jet
未在本地计算机上注册microsoft.jet http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
- 在windows10下vs2017配置opencv4.0.0
第一次配置时,有些.dll文件出错,所以用重新下载opencv配置了一遍,终于可以了,喜极而泣! 一.下载OpenCV4.0 直接到官网https://opencv.org/下载 然后在下个页面选择 ...
- for( in ) IE下兼容问题
在JS 中 for in 常用于遍历对象的可枚举属性,包括原型链上的属性.然而for_in在IE < 9下可能会出现问题. for_in要出现问题必须满足两个条件: 1:IE < 9; ...