JDBC数据库连接技术
【学习笔记】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数据库连接技术的更多相关文章
- 【学习笔记】JDBC数据库连接技术(Java Database Connectivity)
一.JDBC简介 Java是通过JDBC技术实现对各种数据库的访问的,JDBC是Java数据库连接技术的简称.它可以把数据持久保存,是一种持久化机制. 1.持久化 持久化就是将程序中的数据在瞬时状态和 ...
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- JDBC 数据库连接池
http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结 当对数据库的访问不是很频繁时,可以在每次 ...
- JAVA之JDBC数据库连接池总结篇
JDBC数据库连接池 一.JDBC数据库连接池的必要性 二.数据库连接池技术 三.多种开源的数据库连接池 3.1 C3P0数据库连接池 3.2 DBCP数据库连接池 3.3 Druid(德鲁伊)数据库 ...
- JAVA基础知识之JDBC——JDBC数据库连接池
JDBC数据库连接池 数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接, ...
- 【Java123】JDBC数据库连接池建立
需求场景:多SQL任务多线程并行执行 解决方案:建立JDBC数据库连接池,将线程与连接一对一绑定 https://www.cnblogs.com/panxuejun/p/5920845.html ht ...
- JDBC数据库连接池
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库 ...
- Spring框架的JDBC模板技术和事物
Spring框架的JDBC模板技术 技术分析之Spring框架的JDBC模板技术概述 1. Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 ...
- Java自学-JDBC 数据库连接池
数据库连接池 与线程池类似的,数据库也有一个数据库连接池. 不过他们的实现思路是不一样的. 本章节讲解了自定义数据库连接池类:ConnectionPool,虽然不是很完善和健壮,但是足以帮助大家理解C ...
随机推荐
- python中的运算符的分类以及使用方法
1.算数运算符 算数运算符的分类: +, –, *, **(幂运算), /, //(整除), %(取余/取模) 算数运算符的优先级: ()> ** > *, /, % &g ...
- 自动化运维工具saltstack04 -- 之jinja模板
jinjia模板 需求:想让saltstack的file模块分发到minion端的配置文件监听minion端的IP和端口,如何用变量实现?看下面!! 1.jinja模板加grains使apache监听 ...
- 算法设计:UNION-FIND算法实现
在上周的算法设计课程中,我们学习了UNION-FIND算法,该算法用来对不相交集进行查询与合并操作,但任何优秀的算法都必须要用实际的代码来进行实现,接下来我们就来看看具体的代码实现 1. 不相关集数据 ...
- UnityShader学习笔记1 — — 入门知识整理
注:资料整理自<Unity Shader入门精要>一书 一.渲染流程概念阶段: 应用阶段:(1)准备好场景数据:(如摄像机位置,物体以及光源等) (2)粗粒度剔除(Culling): ...
- SICP读书笔记 3.3
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- vue 组件-父组件传值给子组件
父组件通过属性,传值给子组件,子组件通过,props数组里的名称来接受父组件传过来的值. HTML部分: <div id="app"> <tmp1 :parent ...
- ADO.net中DataTable的应用
一.思维导图 二.知识点描述 (1)构造函数 DataTable() 不带参数初始化DataTable类的新实例 DataTable(string tableName) 用指定的表名初始化DataT ...
- Netty源码分析第1章(Netty启动流程)---->第2节: NioServerSocketChannel的创建
Netty源码分析第一章: Server启动流程 第二节:NioServerSocketChannel的创建 我们如果熟悉Nio, 则对channel的概念则不会陌生, channel在相当于一个通 ...
- 初学node.js-nodejs安装运行(1)
1.Node.js中文官网http://nodejs.cn/download/下载node.js 学习node.js需要有javascript基础,没有基础的可以在http://www.w3schoo ...
- CentOS 6.7 安装配置 nagios
一.简介 Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警,第一时间 ...