- 浏览: 700715 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (239)
- 系统架构设计 (16)
- java collection framework (2)
- java分布式 (4)
- java多线程 (0)
- 故障处理及调优 (16)
- 软件开发过程及管理 (28)
- OS (5)
- 常用算法 (3)
- design pattern (8)
- transaction (7)
- java apps (48)
- corejava (7)
- java and DB (10)
- cache (0)
- webservice (14)
- web前端 (25)
- 报表 (4)
- 日志系统设计 (3)
- Oracle (4)
- mysql (11)
- xml (11)
- 数据源配置管理 (3)
- 企业数据存储 (4)
- php (2)
- 测试 (1)
最新评论
-
orangebook:
对于初学者来说,这样编写可能会误导,理解更烦锁。
观察者模式(发布-订阅) -
liudajiang:
呵呵 startThreads(rand ...
实践缩小Java synchronized 粒度 -
zengwenbo5566:
谢谢博主,学习了
解决getOutputStream() has already been called for this response -
u011335423:
大神厉害啊 可以了
解决getOutputStream() has already been called for this response -
xiang37:
...
解决getOutputStream() has already been called for this response
1、 JDBC是什么
JDBC是Java数据库连接(Java DataBase Connectivity)技术的简称。
2、 JDBC程序的工作原理
2.1、JDBC API
JDBC API由SUN公司提供,提供了Java应用程序与各种不同数据库交互的标准接口。如:Connection(连接)接口、Statement接口、PreparedStatement接口、ResultSet(结果集)接口等。可以使用这些JDBC接口进行各类数据库操作。
2.1.1、JDBC API的作用:与数据库建立连接、发送SQL语句、处理结果。
DriverManager类:依据数据库的不同,管理JDBC驱动。
Connection接口:负责连接数据库并担任传送数据的任务。
Statement接口:由Connection产生,负责执行SQL语句。
ResultSet接口:负责保存Statement执行后所产生的的查询结果。
2.2、JDBC Driver Manager
JDBC Driver Manager由sun公司提供,它能够管理各种不同的JDBC驱动。
2.3、JDBC驱动
JDBC驱动由各个数据库厂商提供,负责连接各种不同的数据库。如:微软公司为我们提供了专门连接SQL Server的JDBC驱动,而Oracle公司则为我们提供了专门连接Oracle的JDBC驱动,这些JDBC驱动实现了JDBC API中定义的各种接口。
2.3.1、两种常用的驱动方式
(1)、JDBC-ODBC桥连。不能提供非常好的性能,只适用于个人的开发与测试,它通过ODBC与数据库进行连接。
JDBC-ODBC桥连就是将对JDBC API的调用转换为对另一组数据库连接(即ODBC)API的调用。 JDK中已经包括了JDBC-ODBC桥连的驱动接口,所以进行JDBC-ODBC桥连时,不需要额外下载JDBC驱动程序,只需要配置ODBC数据源即可。
//驱动类的名称
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
//数据库连接字符串.。xinxin数据源名称
Connection conn = DriverManager.getConnection(“jdbc:odbc:xinxin”,”sa”,”sa”);
(2)、纯Java驱动方式。直接同数据库进行连接,在生产型开发中,推荐使用纯Java驱动方式。
纯 Java驱动方式由JDBC驱动直接访问数据库,驱动程序完全由Java语言编写,运行速度快,而且具备了跨平台的特点。访问不同的数据库需要下载专用的JDBC驱动。
//SQL Server 2005的驱动连接
//数据库驱动
com.microsoft.sqlserver.jdbc.SQLServerDriver
// URL
jdbc:sqlserver://localhost:1433;databasename=company
// SQL Server 2000的驱动连接
//数据库驱动
com.microsoft.jdbc.sqlserver.SQLServerDriver
// URL
jdbc:microsoft:sqlserver://localhost:1433;databasename=company
两种常用的驱动方式示意图:
2.4、JDBC程序的代码模板
开发一个JDBC应用程序,基本需要以下步骤:
(1)、把JDBC驱动类装载入Java虚拟机中,为此,可使用Class.forName()方法,此方法将给定的类加载到Java虚拟机中。如果系统中不存在给定的类,则会引发异常,异常类型为ClassNotFoundException。
Class.forName(“JDBC驱动类的名称”);
(2)、加载驱动,并与数据库建立连接。DriverManager类跟踪已注册的驱动程序,当调用getConnection()方法时,它会搜索整个驱动程序列表,直到找到一个能够连接至数据连接字符串中指定的数据库的驱动程序。加载此驱动程序之后,将使用DriverManager类的getConnection()方法建立与数据库的连接。此方法接收三个参数,分别表示URL、用户名和密码。用户名和密码是可选的。
Connection conn = DriverManager.getConnection(数据库连接字符串,数据库用户名,密码);
(3)、发送SQL语句,并得到结果集。一旦连接建立,就使用该连接创建Statement接口的实例,并将SQL语句传递给它所连接的数据库,并返回类型为ResultSet的对象,它包含执行SQL查询的结果。
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(select a,b,c from table);
(4)、处理结果。使用ResultSet对象的next()方法将光标(cursor)指向下一行。最初光标位于第一行之前,因此第一次调用next()方法将光标置于第一行上。如果到达结果集的末尾,则ResultSet的next()方法会返回false。方法getXXX提供了获取当前行中某列值的途径,列名或列号可用于标识要从中获取数据的列。例如:如果数据表中第一列的列名为a,存储类型为整型,则可以使用两种方法获取存储在该列中的值,如:int x = rs.getInt(“a”);或者:int x = rs.getInt(1);
处理结果的代码示例:
while(rs.next()){
int x = rs.getInt(“a”);
String s = rs.getString(“b”);
float f = rs.getFloat(“c”);
}
JDBC程序的代码模板:
//把JDBC驱动类装载入Java虚拟机中 Class.forName(JDBC驱动类的名称); //加载驱动,并与数据库建立连接,其中数据库连接字符串用来标识数据库 Connection conn = DriverManager.getConnection(数据库连接字符串,数据库用户名,密码); //执行SQL语句,并得到结果集 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“select a,b,c from table”); //处理结果 while(rs.next()){ int x = rs.getInt(“a”); String s = rs.getString(“b”); float f = rs.getFloat(“c”); }
2.5、什么是JDBC URL
JDBC URL提供了一种标识数据库的方法,可以使相应的JDBC驱动程序能识别数据库并与之建立连接。
JDBC URL的标准语法由以下三个部分组成,各部分间用冒号分隔。
Jdbc:<子协议>:<子名称>
JDBC URL的三个部分可以分解如下:
其中jdbc-----代表协议。
<子协议>----驱动程序名或数据库连接机制的名称。
<子名称>----一种标识数据库的方法。
JDBC URL示例:
jdbc:odbc:news
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news
3、 Statement接口和PreparedStatement接口中的方法
ResultSet executeQuery(String sql):可以执行SQL查询并获取到ResultSet对象。
int executeUpdate(String sql):可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数。
boolean execute(String sql):这是一个最为一般的执行方法,可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet。
4、 为什么要关闭Statement对象以及数据库连接
如果不关闭Statement对象,它们会一直占用服务器资源,直到Java垃圾收集程序来回收它。作为一种好的编程风格,应在不需要Statement对象时显示地关闭它们,这将立即释放服务器资源,有助于避免潜在的内存问题。同样,使用完数据库连接后,就应关闭它,释放连接所占用的数据库资源。
5、 PreparedStatement语句
PreparedStatement接口继承自Statement接口,PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率。PreparedStatement实例包含已编译的SQL语句,SQL语句可具有一个或多个输入参数。这些输入参数的值在SQL语句创建时未被指定,而是为每个输入参数保留一个问号(“?”)作为占位符。
PreparedStatement pstmt = con.prepareStatement(“update table set a=? where b=?”);
在执行PreparedStatement对象之前,必须设置每个输入参数的值。可通过setXXX方法来完成,其中XXX是与该参数相应的类型。例如,如果参数具有Java类型long,则使用的方法就是设置给该参数的值。例如,以下代码将第一个参数设为长整型值123456789,第二个参数设为整型值10:
pstmt.setLong(1,123456789);
pstmt.setInt(2,10);
由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象,因此,多次执行的SQL语句应被创建为PreparedStatement对象,以提高效率。
6、 格式化时间
SimpleDateFormat hmFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
hmFromat.format(new Date());
7、 步骤
1)调用Class类的forName()方法,加载并注册数据库驱动。
2)调用DriverManager类的getConnection()方法,建立到数据库的连接
3)调用Connection对象的createStatement()方法,访问数据库
4)调用Statement对象的executeQuery()方法得到ResultSet对象。
5) 调用ResultSet对象的getObject()方法,处理结果。
6)释放资源(连接应该尽可能晚建立,释放资源应尽可能早释放。)
8、 代码
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** *Jdbc工具类 */ public class JdbcUtils { private static String url = "jdbc:mysql://localhost:3306/test"; private static String user = "root"; private static String password = "123456"; private JdbcUtils() { } static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException ex) { throw new ExceptionInInitializerError(ex); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, user, password); } public static void free(Connection conn, Statement st, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } finally { try { if(st!=null) { st.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } finally { try { if(conn!=null){ conn.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } } } } }
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Test { public static void main(String[] args) { optimize(); } public static void optimize() { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); st = conn.createStatement(); rs = st.executeQuery("Select * from Students;"); while (rs.next()) { System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t" + rs.getObject(3) + "\t" + rs.getObject(4)); } } catch (SQLException ex) { System.out.println(ex.toString()); } finally { JdbcUtils.free(conn, st, rs); } } }
发表评论
-
Http状态码及实例
2018-03-24 15:06 0HTTP常用状态码列表: ... -
java同步机制及synchronized关键字的应用2
2013-03-25 22:03 1559类定义: public class Test{ ... -
实践缩小Java synchronized 粒度
2013-03-07 22:09 2128项目需求: 产品需要监视不同种类的多个数据库,例如:多个 ... -
java同步机制及synchronized关键字的应用1
2013-03-05 23:04 995Java对多线程的支持与同步机制深受大家的喜爱,通过JMM ... -
Thread_管理异步、定时及周期性任务
2012-09-24 14:43 1306项目中有很多异步、定时及周期性任务的需求,其实现有一定的特点, ... -
Thread_跨节点集合查询
2012-09-18 16:56 1674项目中数据库进行了水平切分,为了处理跨节点集合查询,采用了多线 ... -
Thread_大批量数据的分页处理(生产者-消费者)
2012-09-17 13:30 1409java应用中通常会有处理大批量数据的场景,这里介绍一种分 ... -
Thread_wait、notify、notifyAll的使用方法
2012-09-17 11:19 6905wait()、notify()、notifyAll()是三个定 ... -
计算java对象占用的内存
2011-12-13 11:38 1076Java有一个很好的地方就是java的垃圾收集机制,这个机制集 ... -
java调用shell执行数据压缩
2011-07-18 17:44 1498项目需求: 将迁移来的数据文件进行压缩。要求压缩过程耗时尽量 ... -
quartz应用之一:创建、关闭定时任务
2011-07-18 17:15 3491项目需求: 数据迁移进程开始执行后,启动定时任务每隔30秒计 ... -
xtree应用实例
2011-03-11 18:02 1378最近项目中用到了构造树形目录的功能,简单了解了下dtree和x ... -
应用系统中配置文件的应用场景及简要分析
2010-11-12 16:13 1220使用配置文件的有点不外乎两点: 1.提高系统的灵活性。 2 ... -
解决getOutputStream() has already been called for this response
2010-08-26 14:57 158655getOutputStream() has already b ... -
实战防止重复提交(token)应用思路及过程
2010-06-11 16:39 1623我这里只考虑了直接使用struts API的情况,使用自定义的 ... -
Struts国际化完整解决方案-支持多国语言
2010-06-11 16:38 2075在网上有很多有关Struts的中文解决方案,但是很多都说得很零 ... -
jsp查询条件的保留
2010-06-11 16:23 2797本文适合java web开发初学者参考。 统计系统或者 ... -
java日期计算
2010-05-26 14:45 1343Calendar类:一个抽像类,不能直接new 得到。 Cal ... -
mvc应用实例
2010-04-04 19:58 1002最近参与到一个行业数据处理的项目,我负责数据请求和订阅的功能, ... -
反斜杠处理
2009-12-16 10:03 1263在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上 ...
相关推荐
实验八的主题是“通过JDBC方式访问数据库”,这是数据库概论课程中的一项重要实践内容。JDBC(Java Database Connectivity)是Java语言中用于与各种数据库交互的一种标准接口,由Sun Microsystems开发并定义,现已...
实验八“通过JDBC方式访问数据库”是针对数据库系统概论的一个实践环节,旨在让学生掌握使用Java语言通过JDBC(Java Database Connectivity)接口来设计数据库应用程序,以及对数据库进行操作。JDBC是一种标准API,...
### JDBC访问数据库及环境配置详解 #### 一、引言 JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC...
本教程将详细介绍如何使用Java JDBC访问数据库的全过程,包括连接数据库、执行SQL语句、处理结果集以及关闭资源。 首先,要使用JDBC,我们需要在Java项目中引入数据库驱动的jar包。对于不同的数据库(如MySQL、...
JDBC(Java Database Connectivity)是 Java 语言中用来访问数据库的 API,提供了一种标准的方式来连接和操作数据库。下面是 JDBC 访问数据库的步骤: 步骤 1:加载对应数据库驱动 在使用 JDBC 访问数据库之前,...
JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一的访问接口。JDBC的目标是允许开发人员能够编写数据库独立的应用程序,即应用程序无需依赖于底层数据库的具体...
### JDBC访问数据库的步骤与原理 #### JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了诸如...
JDBC是Java编程语言中用于访问数据库的标准应用程序接口,它允许开发者执行SQL语句,管理事务,处理结果集等。 在描述中提到的博客链接,虽然无法直接访问,但通常博主会详细介绍如何配置JDBC驱动,以及针对不同...
这是使用jdbc访问数据库的方法,很好的,很详细的讲解了如何使用jdbc连接数据库
《数据库系统概论》课程之实验八,通过JDBC访问数据库。本文件中包含实验报告一份,可运行代码一份与JDBC的驱动jar包。 程序实现了使用Java语言编程实现对数据库的访问,所有的SQL操作均在自己建立的新库里进行,...
- **安全性问题**:直接使用JDBC访问数据库可能会带来安全风险,如SQL注入攻击等。因此,在处理用户输入时应格外小心。 - **性能考虑**:频繁地打开和关闭数据库连接可能会影响应用程序的性能。可以考虑使用连接池...
JDBC (Java Database Connectivity) 是Java编程语言中用于与各种数据库进行交互的一种标准接口。它由Sun Microsystems开发并成为Java平台的一部分,允许Java应用程序通过Java API来执行SQL语句,从而实现对数据库的...
在Java开发环境中,Java Database Connectivity (JDBC) 是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问接口。通过JDBC,开发者能够灵活地与不同的数据库系统进行交互,实现数据查询、更新等...
JDBC数据库访问技术
Java 通过JDBC API访问数据库.ppt 老师的课件,比较有用,分享之。
通过JDBC,开发者可以使用标准的Java API来访问不同的数据库系统,而无需关心底层数据库的具体实现细节。这极大地提高了应用程序的可移植性和灵活性,使得同一段Java代码可以在不同的数据库环境下运行。 ### JDBC...
JDBC是Java平台中用于访问数据库的标准Java API,它允许开发者执行SQL语句并处理结果。 在Java中,连接不同类型的数据库主要涉及以下几个步骤: 1. **加载驱动**:首先,需要加载对应数据库的JDBC驱动。例如,对于...
实验3 JDBC操作数据库3主要目的是通过Java的JDBC技术来熟悉和掌握数据库的连接与操作。这个实验涉及了以下几个核心知识点: 1. **MySQL数据库**:实验中提到了使用MySQL作为关系型数据库管理系统,它是开源且广泛...