JDBC学习笔记

1、JDBC(Java Data Base Connectivity,java数据库连接)

是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC(Java DataBase Connectivity): 规范,sun标准化

JDBC3.0规范    JDBC4.0规范

数据库驱动程序-----*.class .jar

JDBC架构

JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:

JDBC API: 提供了应用程序对JDBC的管理连接。

JDBC Driver API: 支持JDBC管理到驱动器连接。

组件框架

JavaSoft提供三种JDBC产品组件,它们是Java开发工具包(JDK)的组成部份:JDBC驱动程序管理器、JDBC驱动程序测试工具包和JDBC-ODBC桥

JDBC驱动程序管理器是JDBC体系结构的支柱。它实际上很小,也很简单;其主要作用是把Java应用程序连接到正确的JDBC驱动程序上,然后即退出。

JDBC驱动程序测试工具包为使JDBC驱动程序运行您的程序提供一定的可信度。只有通过JDBC驱动程序测试的驱动程序才被认为是符合JDBC标准TM的。

JDBC-ODBC桥使ODBC驱动程序可被用作JDBC驱动程序。它的实现为JDBC的快速发展提供了一条途径,其长远目标提供一种访问某些不常见的DBMS(如果对这些不常见的DBMS未实现JDBC)的方法。

驱动类型

目前比较常见的JDBC驱动程序可分为以下四个种类:

(1)JDBC-ODBC桥加ODBC驱动程序

必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

(2)本地API

这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。

(3)JDBC网络纯Java驱动程序

这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中 间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。有可能所有这种解决方案 的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

(4)本地协议纯Java驱动程序

这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。

2、如何来构建一个对象

A a = new A();

三步:

加载Class文件

执行静态初始化块代码

堆中创建对象、栈中创建引用,然后做指向

Class.forName("A").newInstance();

//反射

class A {

}

对象的创建过程:

(1)、所有的类都是在第一次被使用时,动态加载到JVM中。当首次创建类型为Dog的对象时,或者Dog类的静态方法首次被调用时,或者静态属性域首次被访问时,java解释器查找classPath,定位到Dog.class文件

(2)、载入Dog.class文件,生成一个Class类型对象,所有有关的静态初始化动作都会执行:如静态代码块,静态成员属性。 并且这种初始化动作只在Class对象首次加载时候进行一次。

(3)、当用new Dog()创建对象时,首先JVM在堆heap上为Dog对象分配足够的存储空间。

(4)、存储空间清空,自动将Dog对象中的所有基本类型数据都设置成了默认值,对象引用被设置为null。

(5)、执行所有在字段定义处的一些初始化操作。

(6)、调用构造器方法。(没有继承)

3、驱动

-------Sun  JDK工程师

interface Driver {//接口

public Connection getCon....();

}

class DriverManager {

private Driver d;

public static Connection getConnection(url,username,password){

return d.getConnection(url,username,password);

}

//注册

public static void registDriver(Driver d){

this.d=d

}

}

--------------数据库厂商,编写的驱动程序

class OracleDriver implements Driver {

static {

DriverManager.registDriver(new OracleDriver());

}

public Connection getConnection(url ,username,password){

........

return OracleConnction();

}

}

------MySql

class com.mysql.jdbc.Driver implements Driver{

static {

DriverManager.registDriver(new MySqlDriver());

}

public Connection getConnection(url ,username,password){

........

return MySQLConnction();

}

}

4、JDBC常用接口

java.sql.*;//引入包,一般需要什么包就引入什么包

Driver

每个驱动程序类必须实现的接口,每个驱动程序都应该提供一个实现 Driver 接口的类。

在加载某一Driver类时,它应该创建自己的实例并向DriverManager注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序。

   Class.forName("foo.bah.Driver")

读取数据库驱动信息,提供连接方法,建立访问数据库所用的Connection对象

DriverManager

用于数据库驱动程序管理的类,作用于用户和驱动程序之间

getConnection(String url,String user,String password)

试图建立到给定数据库URL的连接。

Connection

Connection对象代表打开的、与数据源的连接(表示数据库连接的对象,对数据库的操作都是在这个连接的基础上进行的

Connection 对象代表与数据源进行的唯一会话。如果是客户端/服务器数据库系统,该对象可以等价于到服务器的实际网络连接。取决于提供者所支持的功能,Connection 对象的某些集合、方法或属性有可能无效。

Close()

立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放。

createStatement()

  创建一个Statement对象来将SQL语句发送到数据库,用来执行不带参数的SQL查询和更新。

Statement

用于执行静态SQL语句并返回它所生成结果的对象,在默认情况下,同一时间每个Statement对象在只能打开一个

ResultSet对象。因此,如果读取一个ResultSet对象与读取另一个交叉,则这两个对象必须是由不同的Statement对象生成的。如果存在某个语句的打开的当前ResultSet对象,则Statement接口中的所有执行方法都会隐式关闭它

-----execute(sql):

可以执行任何的SQL语句(DML  DDL  SELECT) boolean,执行给定的 SQL 语句,该语句可能返回多个结果

ResultSet rs = state.getResultSet();

-----executeQuery(sql): 

select ResultSet,执行给定的 SQ语句,该语句返回单个ResultSet对象

-----executeUpdate(sql):

DML语句  int,执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)

---------getUpdateCount(),以更新计数的形式获取当前结果;如果结果为 ResultSet 对象或没有更多结果,则返回-1

---------close() ,立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作

---------getResultSet(),以ResultSet对象的形式获取当前结果

ResultSet

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

next(),将光标从当前位置向前移一行

PreparedStatement

PreparedStatement 接口继承了Statement,表示预编译的SQL语句的对象

1.PreparedStatement进行数据库操作的时候可以进行参数绑定

2.PreparedStatement对象可对sql语句进行预处理,所有处理sql语句的效率优于Statement对象

5、数据库连接及操作

Connection conn = DBUtil.getConnection();//DBUtil为公共类(加载数据库驱动,获取数据库连接)

PreparedStatement ps = null;

try {

// 3.构建SQL语句

String sql = "";

// 4.创建执行SQL语句的PreparedStatement对象

ps = conn.prepareStatement(sql);

// 5.绑定参数

// 6.执行SQL语句

} catch (SQLException e) {

e.printStackTrace();

} finally{

DBUtil.close(conn, ps);//释放资源,关闭数据

}

6、JDBC,Java连接数据库的一个中间媒介工具,应用程序编程接口,描述一套访问关系数据库的标准Java类库。(数据库厂商实现规范

驱动类型:

JDBC-ODBC桥(ODBC,微软公司开放服务结构,WOSA)、本地API驱动、网络协议驱动、本地协议驱动

JDBC的常用接口和类:

DriverManager(管理JDBC驱动的服务类)、Connection(数据库连接对象)、Statement(执行SQL语句的工具接口)、PreparedStatement(预编译的Statement对象)、ResultSet(结果对象)。

JDBC编程步骤:

加载数据库驱动(注册)、创建数据库连接、构建SQL语句、创建执行SQL语句的Statement对象、执行SQL语句

Class.forName(“”);

Class forName(“com.mysql.jdbc.Driver”);

MySQL数据库Driver的全名为com.mysql.jdbc.Driver

SQLServer数据库Driver的全名为com.microsoft.jdbc.sqlserver.SQLServerDriver

Oracle数据库Driver的全名为com.oracle.jdbc.OracleDriver

Connection conn = DriverManager.getConnection(url,user,password);

conn=DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/jdbc_db”,”root”,”1234”);

conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hr","hr");

DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName = cp","sa","123");

URL:

jdbc:mysql://localhost:3306(接听端口)/first(数据库名称)

jdbc:postgresql://localhost:5432/first

jdbc:oracle:thin:@localhost:1521:orcl

jdbc:microsoft:sqlserver://localhost:1433;DatabaseName = cp

Statement执行SQL语句有3个方法:

execute(sql)(可以执行任何的SQL语句、返回值为boolean类型,如果执行后第一个结果为ResultSet对象,返回true,第一个结果为受影响的行数或没有任何结果,则返回false),ResultSet rs = state.getResultSet()

executeUpdate(sql)(用于执行DML和DDL语句、返回值为INT类型)

executeQuery(sql)(只能执行查询语句、返回代表查询结果的RsultSet对象)

Java中规范:

所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中

Statement createStatement()返回一个Statement对象

PreparedStatement prepareStatemtent(String sql)返回预编译的Statement对象(将SQL语句提交到数据库进行预编译

CallableStatement prepareCall(String sql)返回CallableStatement对象,用于调用存储过程。只有获得了Statement对象才能执行SQL语句。

每个Connection代表一个物理连接会话,要想访问数据库,必须获得数据库的连接。DriverManager的静态方法getConnection()得到Connection对象,实质是把参数传到Driver中的Connect()方法中来获得数据库连接

正常的流程使用return来带值,非正常的流程使用异常来带值。

PreparedStatement:PreparedStatement进行数据库操作的时候可以进行参数绑定,PreparedStatement对象可对sql语句进行预处理,所有处理sql语句的效率优于Statement对象。

JDBC事务是通过Connection对象进行控制的,两种事务模式:自动提交模式(系统默认)和手动提交模式--conn.setAutoCommit(false)禁止自动提交;rollback()回退;commit()提交。

选择数据库:需求、易用性和管理、支持性、成本因素。

以阅读数据库为主的Web应用:MySQL

事务处理和复杂的数据库功能:Oracle和SQL Server

商业数据库的高级功能和不想付费授权:PostgreSQL和Ingres

嵌入式数据库应用:MySQL和Sybase

http://blog.csdn.net/simplebam/article/details/54960202

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值