JDBC笔记

--------------------------------------------------------------------------------------------
数据持久化
把数据保存到可掉电式存储设备中一共之后使用,大多数情况下,特别是企业级应用中,
数据持久化意味着将内存中的数据保存到硬盘加以固话,而持久化的实现过程通过
各种关系型数据库来完成持久化的主要应用是将内存中的数据存储在关型数据库中
当然可以存储在磁盘文件,xml数据文件中
----------------------------------------------------------------------------------------------
java中的数据存储技术

在java中,数据库存取技术可分为以下几类:
1.JDBC之间访问数据库
2.JDO技术
3.第三方O/R工具,如Hibernate,ibatis等

---------------------------------------------------------------------------------------------
JCBC是java访问数据库的基石,JDO
Hibernate等只是更好的封装了JCBC
(如调用存储过程,函数必须使用JDBC)

------------------------------------------------------------------------------------------

JDBC基础:

JDBC(java Database Connectivity)是一个独立于特定数据库管理系统,
通用的SQL数据库存取和操作的公共接口(一组API)
定义了用来访问数据库的标准java类库
使用这个类库可以以一种标准的方法,方便的访问数据库资源


JDBC为了访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节技术

JDBC的目标是使java程序员使用JDBC可以连接任何提供了JDBC
驱动程序的数据库系统,这样可以是程序员无需对特定的数据库系统的特点有过多的了解
加快开发过程。
-------------------------------------------------------------------------------------------


JDBC体系结构
JDBC接口(API)包括两个层次:
1.面向 应用的API,JavaAPI,抽象接口,供应用程序开发人员使用
(连接数据库,执行SQL语句,获得结果)
2.面向数据库的API,java Driver API ,供开发商开发
数据库驱动程序

-----------------------------------------------------------------------------------------------
JDBC驱动程序的分类
JDBC驱动程序:各个数据库厂商根据JDBC的规范制作的JDBC实现的类库。

JDBC驱动程序总共有4种类型
1.JDBC-ODBC桥
2.部分本地API部分java的驱动程序
3.JDBC网络存java驱动程序
4.本地协议的纯java驱动程序
//3,4,两类都是纯java的驱动程序,因此,对于java开发者
来说,他们在性能,可移植性,功能等方面都有优势
--------------------------------------------------------------------------------------
本地协议的纯java驱动程序

1.多数数据库厂商已经指出允许客户程序通过网络直接与数据库通信的网络协议
2.这种类型的驱动程序完全使用java编写
通过与数据库建立的socket连接,采用具体厂商的网络协议吧JDBC调用
转化为直接连接的网络调用

---------------------------------------------------------------------------------------------

JDBC API是一系列的接口,它使用应用程序能够进行数据库连接,执行SQL语句,并且得到返回结果



---------------------------------------------------------------------------------------------------------------------
Driver接口
java.sql.Driver接口是所有的JDBC驱动程序需要实现的接口。
这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现

在程序中不需要直接去访问实现了Driver接口的的类,
而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现

---------------------------------------------------------------------------------------------------
/*
通过jdbc向指定的数据表中插入一条记录

*/
public void testStatement(){
/*
1.获取数据库连接
/*
Connection connection=null;
Statement statement=null;
*/
Connection Connection=getConnection();

2.准备插入的SQL语句
String sql="insert into customers (name,email,birth)"+" values ('abcd','abcd@173.com','1992-10-15')";

3.执行插入

3.1获取操作SQL语句的Statement对象:调用Connection的createStatement()方法获取
3.2调用Statement对象的execureUpdate(SQL)执行SQL语句进行的插入

Statement statement=connection.createStatement();
statement.executeUpdate(sql);
4.关闭Statement对象
statement.close();
5.关闭连接
//注意Statement关闭是出异常时,保证Connection也要关闭
捕获异常,判断Statement对象和Connection不为空时才关闭

//关闭的顺序是:

先关闭后后获取的,即先关闭Statement然后关闭Connection对象


connection.close();

*/

(1)Statement:用于执行SQL语句的对象
(2)通过Connection的createStatement()方法获取
(3)通过executeUpdate(sql)执行SQL语句
(4)传入的SQL可以是insert,update,或者是delete但不能是select
(5)Connection,Statement都是应用程序和数据库服务器的连接资源,使用后一定要关闭

//需要在finally中关闭Connection和Statement对象

/*

try{
...

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(statement!=null){
statement.close();
}
}catch(Exception e){
e.printStackTrace();
}
if(connection!=null){
connection.close();
}
}
*/
/*sql语句
//删除语句:
String sql="delete from where id=1";

//修改语句:
String sql="update customers set name='tom' " + " where id=1 ";
*/

}
----------------------------------------------------------------------------------------------
一个通用的更新的方法:包括insert,update,delete
//版本1.0

public void static update(String sql){
Connection conn=null;
Statement statement=null;
this.sql=sql;
try{
conn=getConnection();
statement=conn.createStatement();
statement.executeUpdate(sql);

}catch(Exception e){
e.printStackTrace()
}finally{
if(statement!=null){
try{
conn.close();

}catch(Exception e2){
e2.printStackTrace()'
}
}
if(conn!=null){
try{
conn.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
}
//关闭方法:
public static void release(Statement statement,Connection conn){
if(statement!=null){
try{
conn.close();
}catch(Exception e2){
e2.printStackTrace();
}

if(conn!=null){
try{
conn.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
}
---------------------------------------------------------------------------------------------------------------------------------

/*
*ResultSet对象:结果集,封装了使用JDBC进行查询的结果
*调用Statement对象的executeQuery(sql)可以得到结果集
*ResultSet返回的实际上就是一张数据表
*有一个指针指向数据表的地以后的前一列
*处理结果集:
* 初始状态:指向第一条记录的前面
* next():若返回true,就向下移动一行
*
*/

public void testResultSet(){


}

















---------------------------------------------------------------------------------
mysql中,BLOB 是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据
mysql的四种BLOB类型类型(除了在存储的最大信息上不同外,他们是相同的)

-----类型-----------大小(单位,字节)
TinyBlob     最大255
Blob 最大65K
MediumBlob 最大16M
LongBlob 最大4G
-------------------------------------

实际使用中根据需要存入大小定义不同的Blob类型
需要注意的是:如果存入的文件过大,数据库性能会下降

public void testInsertBlob(){
/*插入Blob类型的数据必须使用PreparedStatement,因为Blob类型的数据时无法使用字符串拼接
*具体调用setBlob(int index,InputStream in);
*/ Connection conn=null;
PreparedStatement preparedStatement=null;
conn=JDBCTool.getConnection();
String sql="insert into customers(name,email,birth,picture) "+" values(?,?,?,?);

preparedStatement=conn.prepateStatement(sql);
preparedStatement.setString(1,"abcd");
preparedStatement.setString(2,"abcd@.com");
preparedStatement.setString(3,new java.util.Date().getTime());

InputStream in=new FileInputStream("1.jpg");
preparedStatement.setBlob(4,in);


}
//读取操作
public void read(){
/*读取Blob数据:
*使用getBlob方法读取到Blob对象
*调用Blob的的getBinaryStream()得到输入流然后在使用IO操作
*/

}


------------------------------------------------------------------------------

数据库的事务处理:

在数据库中,所谓事务是指一组逻辑操作单元,是数据从一种状态变换到另种状态
为了确保数据库的一致性,数据操作应当是离散额成组的逻辑单元,当他们全部完成时,数据的一致性保持
而当成这个单元的一部分操作失败,整个事务应该视为错误,所有从起点以后的操作应去阿奴回退到开始状态

事务的ACID属性











一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的数据库访问接口。 JDBC也就是Java版的ODBC。 JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 1.在JDBC中包括了两个包:java.sql和javax.sql。 ① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。 ② javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。 注:除了标出的Class,其它均为接口。 API 说明 java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现Driver接口的类。 java.sql.DriverManager (Class) 管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 java.sql.Statement 用于执行静态SQL语句并返回其生成结果的对象。 java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 java.sql.ResultSet 指的是查询返回的数据库结果集。 java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值