- 浏览: 737054 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lengzl:
请问,那个Node 是哪个包里面的类?
JAVA 二叉树的递归和非递归遍历 -
gongchuangsu:
总结的很好,感谢感谢
JAVA 二叉树的递归和非递归遍历 -
Caelebs:
666666666 居然是10年发的,难怪截屏自动保存的名字是 ...
截图工具 -
jijiqw:
是注解不是注释。。。
Spring @Transactional (一) -
letueo:
[b][b][b][b][b][b][b][b][b][b][ ...
Spring @Transactional (一)
好久没博一把了,今天总结一下这两天学习JDBC的内容吧!
JDBC API包含在JDK中,被分为两个包:java.sql和javax.sql。java.sql包定义了访问数据库的接口和类,其中一些接口由驱动程序提供商来实现。
1、Driver接口
jdbc.sql.Driver是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同的厂商实现该接口的类名是不同的,下面列出主要数据库的JDBC驱动的类名。
* com.microsoft.jdbc.sqlserver.SQLServerDriver,这是sqlserver2000的JDBC驱动类名,它要单独下载,安装完毕后会看到三个包:msbase.jar包,mssqlserver.jar包和 msutil.jar包。
* orcle.jdbc.driver.OracleDriver,Oracle的JDBC驱动不需要单独下载,在Oracle数据库产品的安装目录下就可以找到。具体在%oracle_home%\ora92\jdbc\lib目录下就可以找到。
* com.mysql.jdbc.Driver,以前的Mysql驱动类是:org.gjt.mm.mysql.Driver,新的MySql JDBC驱动程序版本为了向后兼容,保留了这个类,这个驱动也需要单独下载。
在具体的程序中不需要直接去访问这些实现了Driver接口的类,而是由驱动程序管理器去调用这些驱动。我们通过JDBC驱动管理器注册每个驱动程序,使用驱动程序管理器类提供的方法来建立数据库的连接,而驱动程序管理器类的连接方法则调用驱动程序类的连接方法connect()来建立数据库的连接。
加载JDBC驱动是调用Class类的静态方法forname(),向其传递要加载的JDBC驱动的类名。在运行时,类加载器从classpath环境变量中定位和加载JDBC驱动类。
2 、建立到数据库的连接
DriverManager类的getConnection()方法建立到数据库的连接,返回一个Connection对象。在DriverManager类中提供了3个重载的getConnection()方法。
* public static Connection getConnection(String url) throws SQLException
* public static Connection getConnection(String url,String urer,String password) throws SQLException
* public static Connection getConnection(String url,Properties) throws SQLException ,该方法需要数据库的URL和java.util.Properties对象。Properties包含了用于特定数据库所需要的参数,以键-值对的方式指定连接参数。通常情况下,至少需要指定user和password属性。
数据库URL用于标示一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接,jdbc URL的语法如下:
jdbc:subprotocol:subname,整个URL分为三个部分:协议(只有jdbc一种):子协议:子名称。下面给出常用数据库的JDBC URL的形式。
* SQL Server200
jdbc:microsoft:sqlserver://localhost:1433;database=数据库名
* Oracle
jdbc:oracle:thin:@localhost:1521:ORCL
* MySql
jdbc:mysql://localhost:3306/datasource_name
书接上文。上篇说到与数据库建立连接了。下面是之后的工作。数据库连接被用于向数据库服务器发送命令和SQL语句,在建立连接之后,需要对数据库进行访问,执行SQL语句。在java.sql包中给我们提供了三个接口,分别定义了对数据库调用的不同方式,这三个接口是:Statement、 PreparedStatement和CallableStatement。
访问数据库
1、Statement
得到Connection对象后,该对象调用它的createStatement()方法创建了一个Statement对象。Statement对象用于执行静态SQL语句,返回执行的结果。Statement接口中定义了下列方法用于执行SQL语句。
(1)ResultSet executeQuery(String sql) throws SQLException
(2)int extcuteUpdate(String sql) throws SQLException ,该方法用于执行参数指定的SQL语句:INSERT、UPDATE或者DELETE语句。另外,该方法也可以执行SQL DDL语句,例如:create table
(3)boolean execute(String sql) throws SQLException ,该方法用于执行多个结果集的SQL语句。
(4)int [] executeBatch() throws SQLExecption ,该方法允许我们向数据库提交一批命令,然后一起执行。如果执行成功,返回值是一个更新行数的数组。可以通过Statement对象的addBatch()方法将Sql语句加入到命令列表中。如:
Statement stmt=conn.createStatement();
stmt.addBatch("具体的sql语句1");
stmt.addBatch("具体的sql语句2");
stmt.addBatch("具体的sql语句3");......
stmt.addBatch("具体的sql语句n");
stmt.executeBatch();
2、ResultSet
Statement中的方法返回ResultSet对象。ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现。ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next方法移动到下一行。该方法为:
boolean next() throws SQLException ,ResultSet接口中定义了很多方法来获得当前行中列的数据,根据字段类型的不同,采用不同的方法来获取数据。如:getArray(),getString(),getInt,getObject().....
这些方法中,又提供了两种形式的调用,一种是以列的索引作为参数(从1开始),一种是以列名作为参数,例如,对于getString()方法,两种形式为:
1 、 String getString(int columnIndex) throws SQLException
2 、 String getString(String columnName) throws SQLException
如果不知道要获取的列的数据类型,可以一律采用getString()方法来得到String类型的数据。
3、PreparedStatement
该接口用于执行不同参数,同一个SQL语句的情况。PreparedStatement接口从Statement接口继承而来。调用Connection 对象的prepareStatement方法得到PreparedStatement对象。PreparedStatement对象所代表的sql语句中的参数用问号(?)来表示,调用PreparedStatement对象的setXXX方法来设置这些参数。该方法有两个参数,第一个要设置的是参数的索引(从1开始),第二个参数要设置是参数的值。看下面一段代码:
String sql="select * from student where stuID=? and stuname=?";
conn=DriverManager.getConnection(url);
PreparedStatement pstmt=cnn.prepareStatement(sql);
pstmt.setInt(1,2067502009);
pstmt.setString(2,"liwei");
stmt.executeUpdate();
4、CallableStatement
该接口对象用于执行SQL存储过程。CallableStatement接口从 PreparedStatement接口继承而来,可以通过调用Connection对象的prepareCall()方法来得到 CallableStatement对象。在执行存储过程前,凡是存储过程中类型为OUT的参数必须注册,可以通过CallableStatement对象的registerOutParameter()方法来完成。对于类型为IN的参数,可以利用setXXX()方法来设置参数的值,我们看下面这段代码:
CallableStatement cstmt=conn.prepareCall("call 存储过程名a(?,?)");
cstmt.registerOutParameter(2,java.sql.Types.INTEGER);
cstmt.setInt(1,2563);
cstmt.execute();
int param =cstmt.getInt(2);
存储过程名a有两个参数,第一个为IN类型,第二个参数为OUT类型。因为有一个OUT类型的参数,所以在执行这个存储过程之前,我们调用 registerOutParameter()方法注册存储过错的第二个参数。registerOutParameter()方法的第二个参数用于指定存储过程参数的JDBC类型,该类型在java.sql.Types中定义。在执行存储过程后,可以直接调用CallableStatement对象的 getXXX()方法取出OUT参数的值。
JDBC API包含在JDK中,被分为两个包:java.sql和javax.sql。java.sql包定义了访问数据库的接口和类,其中一些接口由驱动程序提供商来实现。
1、Driver接口
jdbc.sql.Driver是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同的厂商实现该接口的类名是不同的,下面列出主要数据库的JDBC驱动的类名。
* com.microsoft.jdbc.sqlserver.SQLServerDriver,这是sqlserver2000的JDBC驱动类名,它要单独下载,安装完毕后会看到三个包:msbase.jar包,mssqlserver.jar包和 msutil.jar包。
* orcle.jdbc.driver.OracleDriver,Oracle的JDBC驱动不需要单独下载,在Oracle数据库产品的安装目录下就可以找到。具体在%oracle_home%\ora92\jdbc\lib目录下就可以找到。
* com.mysql.jdbc.Driver,以前的Mysql驱动类是:org.gjt.mm.mysql.Driver,新的MySql JDBC驱动程序版本为了向后兼容,保留了这个类,这个驱动也需要单独下载。
在具体的程序中不需要直接去访问这些实现了Driver接口的类,而是由驱动程序管理器去调用这些驱动。我们通过JDBC驱动管理器注册每个驱动程序,使用驱动程序管理器类提供的方法来建立数据库的连接,而驱动程序管理器类的连接方法则调用驱动程序类的连接方法connect()来建立数据库的连接。
加载JDBC驱动是调用Class类的静态方法forname(),向其传递要加载的JDBC驱动的类名。在运行时,类加载器从classpath环境变量中定位和加载JDBC驱动类。
2 、建立到数据库的连接
DriverManager类的getConnection()方法建立到数据库的连接,返回一个Connection对象。在DriverManager类中提供了3个重载的getConnection()方法。
* public static Connection getConnection(String url) throws SQLException
* public static Connection getConnection(String url,String urer,String password) throws SQLException
* public static Connection getConnection(String url,Properties) throws SQLException ,该方法需要数据库的URL和java.util.Properties对象。Properties包含了用于特定数据库所需要的参数,以键-值对的方式指定连接参数。通常情况下,至少需要指定user和password属性。
数据库URL用于标示一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接,jdbc URL的语法如下:
jdbc:subprotocol:subname,整个URL分为三个部分:协议(只有jdbc一种):子协议:子名称。下面给出常用数据库的JDBC URL的形式。
* SQL Server200
jdbc:microsoft:sqlserver://localhost:1433;database=数据库名
* Oracle
jdbc:oracle:thin:@localhost:1521:ORCL
* MySql
jdbc:mysql://localhost:3306/datasource_name
书接上文。上篇说到与数据库建立连接了。下面是之后的工作。数据库连接被用于向数据库服务器发送命令和SQL语句,在建立连接之后,需要对数据库进行访问,执行SQL语句。在java.sql包中给我们提供了三个接口,分别定义了对数据库调用的不同方式,这三个接口是:Statement、 PreparedStatement和CallableStatement。
访问数据库
1、Statement
得到Connection对象后,该对象调用它的createStatement()方法创建了一个Statement对象。Statement对象用于执行静态SQL语句,返回执行的结果。Statement接口中定义了下列方法用于执行SQL语句。
(1)ResultSet executeQuery(String sql) throws SQLException
(2)int extcuteUpdate(String sql) throws SQLException ,该方法用于执行参数指定的SQL语句:INSERT、UPDATE或者DELETE语句。另外,该方法也可以执行SQL DDL语句,例如:create table
(3)boolean execute(String sql) throws SQLException ,该方法用于执行多个结果集的SQL语句。
(4)int [] executeBatch() throws SQLExecption ,该方法允许我们向数据库提交一批命令,然后一起执行。如果执行成功,返回值是一个更新行数的数组。可以通过Statement对象的addBatch()方法将Sql语句加入到命令列表中。如:
Statement stmt=conn.createStatement();
stmt.addBatch("具体的sql语句1");
stmt.addBatch("具体的sql语句2");
stmt.addBatch("具体的sql语句3");......
stmt.addBatch("具体的sql语句n");
stmt.executeBatch();
2、ResultSet
Statement中的方法返回ResultSet对象。ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现。ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next方法移动到下一行。该方法为:
boolean next() throws SQLException ,ResultSet接口中定义了很多方法来获得当前行中列的数据,根据字段类型的不同,采用不同的方法来获取数据。如:getArray(),getString(),getInt,getObject().....
这些方法中,又提供了两种形式的调用,一种是以列的索引作为参数(从1开始),一种是以列名作为参数,例如,对于getString()方法,两种形式为:
1 、 String getString(int columnIndex) throws SQLException
2 、 String getString(String columnName) throws SQLException
如果不知道要获取的列的数据类型,可以一律采用getString()方法来得到String类型的数据。
3、PreparedStatement
该接口用于执行不同参数,同一个SQL语句的情况。PreparedStatement接口从Statement接口继承而来。调用Connection 对象的prepareStatement方法得到PreparedStatement对象。PreparedStatement对象所代表的sql语句中的参数用问号(?)来表示,调用PreparedStatement对象的setXXX方法来设置这些参数。该方法有两个参数,第一个要设置的是参数的索引(从1开始),第二个参数要设置是参数的值。看下面一段代码:
String sql="select * from student where stuID=? and stuname=?";
conn=DriverManager.getConnection(url);
PreparedStatement pstmt=cnn.prepareStatement(sql);
pstmt.setInt(1,2067502009);
pstmt.setString(2,"liwei");
stmt.executeUpdate();
4、CallableStatement
该接口对象用于执行SQL存储过程。CallableStatement接口从 PreparedStatement接口继承而来,可以通过调用Connection对象的prepareCall()方法来得到 CallableStatement对象。在执行存储过程前,凡是存储过程中类型为OUT的参数必须注册,可以通过CallableStatement对象的registerOutParameter()方法来完成。对于类型为IN的参数,可以利用setXXX()方法来设置参数的值,我们看下面这段代码:
CallableStatement cstmt=conn.prepareCall("call 存储过程名a(?,?)");
cstmt.registerOutParameter(2,java.sql.Types.INTEGER);
cstmt.setInt(1,2563);
cstmt.execute();
int param =cstmt.getInt(2);
存储过程名a有两个参数,第一个为IN类型,第二个参数为OUT类型。因为有一个OUT类型的参数,所以在执行这个存储过程之前,我们调用 registerOutParameter()方法注册存储过错的第二个参数。registerOutParameter()方法的第二个参数用于指定存储过程参数的JDBC类型,该类型在java.sql.Types中定义。在执行存储过程后,可以直接调用CallableStatement对象的 getXXX()方法取出OUT参数的值。
发表评论
-
Servlet上传文件
2012-02-07 23:58 1458准备工作:要到http://commons.apache.or ... -
成为Java高手需要达到的25个学习目标--经典
2012-01-29 16:07 1312本文将告诉你学习Java需 ... -
Timer, Quartz 和 Spring 实现作业调度
2011-11-28 15:43 1148一、java.util.Timer ... -
Java 产生不重复的随机数
2011-06-22 23:32 2330int numberCount = 6; ... -
Date类学习总结(Calendar Date 字符串 相互转换 格式化)
2011-06-20 16:12 1633Date类学习总结 1.计算某一月份的最大天数 ... -
jsp中的cookie用法小实例
2011-06-20 00:13 2467这个小实例有三个页面 index.jsp页面内容如下: Y ... -
JS实现简单的增删改查
2011-06-19 23:41 12928<%@ page language="ja ... -
Jsp 动态显示系统时间
2011-06-19 23:24 4864<%@ page language=" ... -
java 动态显示时间
2011-06-19 23:13 4023import java.util.Date; p ... -
js 动态显示时间
2011-06-19 22:53 1800<%@ page language=" ... -
HTML 显示系统时间
2011-06-19 22:13 7845代码1:(显示静态时间) <script type=& ... -
JavaScript 动态显示系统时间
2011-06-19 19:36 2052JavaScript 动态显示系统时间 <html ... -
两例JavaScript 获取当前系统日期和时间
2011-06-19 19:20 1223两例JavaScript 获取当前系统日期和时间 QUOTE ... -
java五种JSP页面跳转方法详解
2011-06-19 17:08 14431. RequestDispatcher.forward() ... -
Java Object方法
2011-06-19 16:47 1275package com.abin.test.connectio ... -
Java 数组,List,Itarator循环
2011-06-19 16:01 2268package com.abin.test.connect ... -
JAVA DBClass操作数据库,这样算不算单列模式
2011-06-19 14:53 1220到底怎样才算单列模式,单列模式事什么概念 package c ... -
Oracle日期函数集锦
2011-06-16 20:55 871Oracle日期函数集锦(一) 一、 常用日期数据格式 1 ... -
java 页面传送数组
2011-06-15 14:56 25571.可以通过嵌入java代码调用session或者reques ... -
java Calendar当前时间
2011-06-14 13:40 1622Calendar c = Calendar.getIn ...
相关推荐
JDBC笔记 JDBC笔记 JDBC笔记
很详细的jdbc笔记 决定经典 很难得的笔记 不容易下载哦
达内,tarena,jdbc笔记,jdbcPPT课件,达内jdbc笔记
JDBC笔记,初学者的笔记 JAVA JDBC 笔记
Day1–JDBC概述+JDBC完成CRUD+DAO设计 1.JDBC概述 1.1 什么是持久化(persistence): 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。 保存数据: 内存中: 掉电之后,数据就没了. 磁盘...
JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯...
这个压缩包包含了传智播客李勇老师的JDBC学习笔记,初学者想要学习JDBC这是很不错的资源。
JAVA 中JDBC笔记
JDBC笔记.md
JDBC笔记.zip
自己整理jdbc笔记,跟大家共享下。。 自己整理jdbc笔记,跟大家共享下。。 自己整理jdbc笔记,跟大家共享下。。
适合Java初学者使用的JDBC笔记,内容详细,有完整的案例可以参考。如果是有经验的人也可以参考,就当再学一遍了
2_JDBC笔记.pdf
jdbc编程笔记 jdbc编程笔记 jdbc编程笔记
这个压缩包包含了传智播客方立勋老师的JDBC笔记,是比较经典的学习资料。
Java JDBC学习资料
JDBC学习笔记,含代码JDBC学习笔记,含代码JDBC学习笔记,含代码黑马视频