* JDBC 架构
JDBC支持两层和三层架构
* 两层架构
应用->JDBC->数据库
* 三层架构
Java appletor/Html浏览器->应用服务器/JDBC->数据库
* 三层架构的好处
性能、安全、多线程、鲁棒性等
JDBC包括四个组建
* JDBC API
* JDBC 驱动管理器
* JDBC 测试套件
* JDBC-ODBC桥
* 创建/获取连接
* JDBC的四种驱动类型
* Type 1
实现了JDBC API到其他的数据存取API(比如ODBC)的映射,这种驱动一般依赖于本地类库。可移植性不好。
* Type 2
部分使用Java语言实现部分使用本地代码实现的驱动,这种驱动使用了所连接数据库的原生的客户类库,
因此也依赖于本地类库, 可移植性不好。
* Type 3
驱动使用纯Java客户端与中间服务器进行连接,连接使用与数据库无关的协议。
* Type 4
驱动使用纯Java客户端直接与数据库进行连接,与数据库相关的网络连接协议使用Java实现。
* 两层架构:
1. 载入驱动
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
2. 建立连接
String url = "jdbc:derby:Fred";//包括数据库地址、和待连接数据库名
Connection con = DriverManager.getConnection(url, "Fernanda", "J8");//使用特定用户名和密码进行连接
* 三层架构:
//初始化上下文环境
InitialContext ic = new InitialContext()
//查找数据源
DataSource ds = ic.lookup("java:comp/env/jdbc/myDB");
//取得连接,这里的连接一般是从应用服务器的连接池当中取得
Connection con = ds.getConnection();
//手动创建数据源
DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
//获得连接,连接仍然是由外部(应用服务器)管理器进行管理
Connection con = ds.getConnection();
* 使用Ant执行创建数据库的任务
# Database properties are in derby.properties
db.delimiter=;
db.root=${javaee.home}/derby
db.driver=org.apache.derby.jdbc.ClientDriver
db.datasource=org.apache.derby.jdbc.ClientDataSource
db.host=localhost
db.port=1527
db.sid=sun-appserv-samples
db.url=jdbc:derby://${db.host}:${db.port}/${db.sid};create=true;
db.user=APP
db.pwd=APP
<target name="create-db_common" depends="init,start-db,delete-db"
description="Create database tables and populate database.">
<sql driver="${db.driver}" url="${db.url}" userid="${db.user}"
password="${db.password}" classpathref="db.classpath"
delimiter="${db.delimiter}" autocommit="false" onerror="abort">
<transaction src="
{javaee.tutorial.home}/examples/common/sql/${db.vendor}/tutorial.sql"/>
</sql>
</target>
* 从结果集取得结果
* 初始化Statement:
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
1. TYPE_FORWARD_ONLY :结果集的游标只能向前,无法进行滚动
2. TYPE_SCROLL_INSENSITIVE: 结果集的游标可以向前、向后滚动或者移动到绝对位置
3. TYPE_SCROLL_SENSITIVE: 结果集的游标可以向前、向后滚动或者移动到绝对位置
1. CONCUR_READ_ONLY 表示结果集是只读类型的
2. CONCUR_UPDATABLE 表示结果集是支持更新的
如果不指定这两个参数,那么取得的Statement是 TYPE_FORWARD_ONLY 和 CONCUR_READ_ONLY的
* 获取结果集
ResultSet srs = stmt.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES");
* 移动游标的方法:
next(), previous(), first(), last(), beforeFirst(), afterLast(),
relative(int rows), absolute(int row)
* 获取数据的方法:
使用getXXX()方法,其参数可以为字段名或者整数下标,使用整数下标效率更高。
* 更新数据的方式:
使用updateXXX()方法,其参数为
1. 待更新的字段名或者下标
2. 待更新的值
其返回值为更新成功的行数
1. 在更新数据以后,必须调用结果集的updateRow()方法来将更新从结果集写入数据库。
如果在调用updateRow()之前,将游标移动到了其他行,那对于当前行的更新将被丢失!
2. 使用cancelRowUpdates()方法来取消对某行所有字段的更新。
* 使用preparedStatement.
PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate():
* 预编译的Statement的好处
1. 可以在一个循环当中被重复调用
2. SQL语句被先送给数据库进行预编译,提高了执行性能
* executeUpdate()的返回值
返回被更新的行数,如果返回0,可能是
1. 该更新确实更新了0行
2. 执行的语句是一个DDL语句
* 使用join
* 使用事务
* 禁止Auto-commit模式
con.setAutoCommit(false);
* 提交事务
con.setAutoCommit(false);//将自动提交设置为false
try {
.....//更新数据库语句
con.commit();//提交到数据库
} catch (SQLException e){
con.rollback();//回滚事务
} finally {
con.setAutoCommit(true);// 记住在事务结束后,要将自动提交设置为true
}
* Savepoint: 回滚标签点
Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1");//创建一个回滚标签点
rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (?SECOND?)");
...
conn.rollback(svpt1);// 回滚到保存的标签点
* 释放回滚标签点
回滚标签点在事务被提交或者回滚后被自动释放。
* 使用存储过程
* 创建存储过程的方法与执行其他DDL语句一样
* 使用 CallableStatement来调用存储过程
CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();
对于产生结果的query过程, 使用executeQuery来执行, 对于更新或者DDL语句,
使用executeUpdate来执行, 存储过程可能含有多个SQL语句并返回多个结果集,
需要使用execute方法来执行。CallableStatement对象可以有输入/输出参数。
分享到:
- 2009-03-28 15:04
- 浏览 1287
- 评论(0)
- 论坛回复 / 浏览 (0 / 1481)
- 查看更多
相关推荐
Java 8 简明教程 Java 8 Tutorial中文版 “Java并没有没落,人们很快就会发现这一点” 欢迎阅读我编写的Java 8介绍。本教程将带领你一步一步地认识这门语言的新特 性。通过简单明了的代码示例,你将会学习到如何使用...
在《Java Tutorial》中,你会找到关于这些基础知识的清晰解释和实例。 接下来,`tutorial.chm`文件很可能是该教程的主文档,它以Windows帮助文件格式提供。这种文件通常包含丰富的文本、代码示例和索引,方便用户...
java tutorialjava tutorial.chm
SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...
集合框架是Java中处理数据集合的关键部分,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)等接口及其实现类。 7. **输入/输出(I/O)** Java提供了强大的I/O流系统...
### Java 教程知识点概述 #### 一、Java 概述 - **定义与起源**:Java 是一...无论是初学者还是经验丰富的开发者,都能在 Java 中找到适合自己的学习和发展路径。希望本教程能为你开启 Java 学习之旅提供有益的帮助。
SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...
《Java教程第四版》是Sun Microsystems(现已被Oracle公司收购)官方发布的一本入门级Java编程教程,旨在为初学者提供全面而扎实的Java基础知识。这本书涵盖了Java语言的核心概念、语法以及开发工具的使用,是Java...
Java Tutorial Java官方教程。
Addison.Wesley.The.Java.Tutorial
SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...
https://pan.baidu.com/s/1cdAlN8bBUcObXqzd5VoGng 提取码:ahk7 复制这段内容后打开百度网盘手机App,操作更方便哦
《Java教程》是一款深受开发者喜爱的Java学习资源,它提供了全面且深入的Java编程知识,旨在帮助初学者和有经验的程序员掌握Java语言的核心概念和技术。这个教程以其清晰的结构和丰富的实例闻名,使得学习过程既有趣...
SUN网站上找的英文版JAVA教程,Java Tutorial,只要你英文过四级,这绝对是JAVA SE最棒的学习资料.内容基本含概了JAVA SE的所有方面,从基本语法,继承,Generic,IO,序列化,到JavaBean,Swing组件,XML,正则表达式,JDBC,JAVA...
JDK文档里说的那个《The Java Tutorial》(html格式)。 里面都是例子,相当于JDK文档的补充。每个内容都有相应的applet示例或者java web start示例演示。 从index.html开始浏览,点击其页面右上角的“Table of ...