Download presentation
Presentation is loading. Please wait.
1
JAVA 编 程 技 术 主编 贾振华 2010年1月
2
第10章 JDBC 数据库编程
3
数据库管理系统(DBMS,Data Base Mannagement System) 数据库系统
JAVA 数 据 库 简 介(1) 数据库(DB,Data Base) 数据库管理系统(DBMS,Data Base Mannagement System) 数据库系统 应用程序 应用程序 数据库系统 Oracle、DB2、 SQL Server等 数据库管理系统 数据库 数据
4
SQL语言(Structured Query Language)
JAVA 数 据 库 简 介(2) SQL语言(Structured Query Language) 使用关系模型的数据库语言,用于和各类数据库的交互,提供通用的数据管理和查询功能。 常用的SQL指令: SELECT 查询数据 INSERT 插入数据 DELETE 删除数据 UPDATE 更新数据 CREATE 创建表等 DROP 删除表等 图形用界面的客户端,SQL*PLUS
5
ODBC(Open DataBase Connectivity,开放式数据库互连)
JAVA 数 据 库 简 介(3) ODBC(Open DataBase Connectivity,开放式数据库互连) 数据库系统应用程序接口规范。 支持应用程序以标准的ODBC函数和SQL语句操作各种不同类型的数据库。 ODBC工作原理 应 用 程 序 O D B C 驱 动 Oracle 驱动程序 SQL Server驱动程序 Access 驱动程序 其他数据库驱动程序 Qracle SQL Server Access …… 数据库1 数据库2 数据库3 其它数据库
6
JDBC(Java DataBase Connectivity) JDBC功能:
支持基本SQL语句,在Java程序中实现数据库操作功能并简化操作过程 提供多样化的数据库连接方法 为各种不同的数据库提供统一的操作界面
7
JAVA JDBC 工 作 原 理 JDBC API J D 数据库1 Qracle B C 驱 Java 动 应 DB2 用 数据库2 程
序 J D B C 驱 动 管 理 器 JDBC驱动程序 for Oracle JDBC驱动程序 for DB2 JDBC-ODBC桥驱动程序 JDBC-网络驱动程序 Qracle DB2 …… 数据库1 数据库2 ODBC方式连接数据库 其它数据库 JDBC API
8
数据库驱动程序(DataBase Driver) JDBC驱动程序分类:
JAVA JDBC 驱 动 程 序 数据库驱动程序(DataBase Driver) JDBC驱动程序分类: 第一类:JDBC-ODBC桥 第二类:Java到本地API 第三类:Java到网络协议 第四类:Java到数据库协议
9
JAVA JDBC – ODBC 桥
10
适用于快速的原型系统,没有提供JDBC驱动的数据库如Access
JAVA JDBC – ODBC 桥 桥接器型的驱动程序,这类驱动程序的特色是必须在使用者端的计算机上事先安装好ODBC驱动程序,然后通过JDBC-ODBC的调用方法,进而通过ODBC来存取数据库。 是sun.jdbc.odbc包的一部分 Application--->JDBC-ODBC Bridge---->JDBC-ODBC Library--->ODBC Driver-->Database 适用于快速的原型系统,没有提供JDBC驱动的数据库如Access
11
利用开发商提供的本地库来直接与数据库通信。
JAVA JDBC – Native API 桥 也是桥接器驱动程序之一,这类驱动程序也必须先在使用者计算机上先安装好特定的驱动程序(类似ODBC),然后通过JDBC-Native API桥接器的转换,把Java API调用转换成特定驱动程序的调用方法,进而存取数据库。 利用开发商提供的本地库来直接与数据库通信。 Application--->JDBC Driver---->Native Database library---->Database 比第一类性能略好。
12
具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。
JAVA JDBC – middleware 这类型的驱动程序最大的好处就是省去了在使用者计算机上安装任何驱动程序的麻烦,只需在服务器端安装好middleware,而middleware会负责所有存取数据库必要的转换。 Application--->Jdbc Driver----->java middleware--->JDBC Driver---->Database 具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。
13
Application--->Jdbc driver----->database engine--->database
JAVA Pure JDBC driver 这类型的驱动程序是最成熟的JDBC驱动程序,不但无需在使用者计算机上安装任何额外的驱动程序,也不需要在服务器端安装任何中介程序(middleware),所有存取数据库的操作,都直接由驱动程序来完成。 Application--->Jdbc driver----->database engine--->database 最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在Internet装配的能力。
14
JDBC API java.sql.DriverManager类 java.sql.Driver接口
java.sql.Connection接口 java.sql.Statement接口 java.sql.ResultSet接口 1、DriverManager类: 负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。 方法: A、Class.forName(String driver); //加载注册驱动程序 B、Static Connection getConnection(String url,String user,String password) throws SQLException; //取得对数据库的连接 C、Static Driver getDriver(String url) throws SQLExcetion; //在已经向DriverManager注册的驱动程序中寻找一个能够打开url所指定的数据库的驱动程序 2、Connection类 负责维护JSP/JAVA数据库程序和数据库之间的联机。可以建立三个非常有用的类对象。 A、Statement createStatement() throws SQLException; //建立Statement类对象 Statement createStatement(int resultSetType,int resultSetConcurrency) throws SQLException; // 建立Statement类对象 resultSetType值 TYPE_FORWARD_ONLY 结果集不可滚动 TYPE_SCROLL_INSENSITIVE 结果集可滚动,不反映数据库的变化 TYPE_SCROLL_SENSITIVE 结果集可滚动,反映数据库的变化 resultSetConcurrency值 CONCUR_READ_ONLY 不能用结果集更新数据 CONCUR_UPDATABLE 能用结果集更新数据 JDBC2.0中才支持滚动的结果集,而且可以对数据进行更新 B、DatabaseMetaData getMetaData() throws SQLException; //建立DatabaseMetaData类对象 C、PreparedStatement prepareStatement(String sql) throws SQLException; //建立PreparedStatement类对象 D、boolean getAutoCommit() throws SQLException //返回Connection类对象的AutoCommit状态 E、void setAutoCommit(boolean autoCommit) throws SQLException //设定Connection类对象的AutoCommit状态 F、void commit() throws SQLException //确定执行对数据库新增、删除或修改记录的操作 G、void rollback() throws SQLException //取消执行对数据库新增、删除或修改记录的操作 H、void close() throws SQLException //结束Connection对象对数据库的联机 I、boolean isClosed() throws SQLException //测试是否已经关闭Connection类对象对数据库的联机 3、Statement类 通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接新增、删除或修改操作 A、ResultSet executeQuery(String sql) throws SQLException //使用SELECT命令对数据库进行查询 B、int executeUpdate(String sql) throws SQLException //使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作。 C、void close() throws SQLException //结束Statement类对象对数据库的联机 4、PreparedStatement类 PreparedStatement类和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令比多次执行时,用PreparedStatement类会比Statement类有效率 A、ResultSet executeQuery() throws SQLException //使用SELECT命令对数据库进行查询 B、int executeUpdate() throws SQLException C、ResultSetMetaData getMetaData() throws SQLException //取得ResultSet类对象有关字段的相关信息 D、void setInt(int parameterIndex,int x) throws SQLException //设定整数类型数值给PreparedStatement类对象的IN参数 E、void setFloat(int parameterIndex,float x) throws SQLException //设定浮点数类型数值给PreparedStatement类对象的IN参数 F、void setNull(int parameterIndex,int sqlType) throws SQLException //设定NULL类型数值给PreparedStatement类对象的IN参数 G、void setString(int parameterIndex,String x) throws SQLException //设定字符串类型数值给PreparedStatement类对象的IN参数 H、void setDate(int parameterIndex,Date x) throws SQLException //设定日期类型数值给PreparedStatement类对象的IN参数 I、void setTime(int parameterIndex,Time x) throws SQLException //设定时间类型数值给PreparedStatement类对象的IN参数 5、DatabaseMetaData类 DatabaseMetaData类保存了数据库的所有特性,并且提供许多方法来取得这些信息。 A、String getDatabaseProductName() throws SQLException //取得数据库名称 B、String getDatabaseProductVersion() throws SQLException //取得数据库版本代号 C、String getDriverName() throws SQLException //取得JDBC驱动程序的名称 D、String getDriverVersion() throws SQLException //取得JDBC驱动程序的版本代号 E、String getURL() throws SQLException //取得连接数据库的JDBC URL F、String getUserName() throws SQLException //取得登录数据库的使用者帐号 6、ResultSet类 负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。 A、boolean absolute(int row) throws SQLException //移动记录指针到指定的记录 B、void beforeFirst() throws SQLException //移动记录指针到第一笔记录之前 C、void afterLast() throws SQLException //移动记录指针到最后一笔记录之后 D、boolean first() throws SQLException //移动记录指针到第一笔记录 E、boolean last() throws SQLException //移动记录指针到最后一笔记录 F、boolean next() throws SQLException //移动记录指针到下一笔记录 G、boolean previous() throws SQLException //移动记录指针到上一笔记录 H、void deleteRow() throws SQLException //删除记录指针指向的记录 I、void moveToInsertRow() throws SQLException //移动记录指针以新增一笔记录 J、void moveToCurrentRow() throws SQLException //移动记录指针到被记忆的记录 K、void insertRow() throws SQLException //新增一笔记录到数据库中 L、void updateRow() throws SQLException //修改数据库中的一笔记录 M、void update类型(int columnIndex,类型 x) throws SQLException //修改指定字段的值 N、int get类型(int columnIndex) throws SQLException //取得指定字段的值 O、ResultSetMetaData getMetaData() throws SQLException //取得ResultSetMetaData类对象 7、ResultSetMetaData类 ResultSetMetaData类对象保存了所有ResultSet类对象中关于字段的信息,提供许多方法来取得这些信息。 A、int getColumnCount() throws SQLException //取得ResultSet类对象的字段个数 B、int getColumnDisplaySize() throws SQLException //取得ResultSet类对象的字段长度 C、String getColumnName(int column) throws SQLException //取得ResultSet类对象的字段名称 D、String getColumnTypeName(int column) throws SQLException //取得ResultSet类对象的字段类型名称 E、String getTableName(int column) throws SQLException //取得ResultSet类对象的字段所属数据表的名称 F、boolean isCaseSensitive(int column) throws SQLException //测试ResultSet类对象的字段是否区分大小写 G、boolean isReadOnly(int column) throws SQLException //测试ResultSet类对象的字段是否为只读
15
JDBC URL提供了一种标识数据库的方法,能够识别相应数据库并与它建立连接。标准的JDBC URL的格式如下:
JAVA JDBC URL JDBC URL提供了一种标识数据库的方法,能够识别相应数据库并与它建立连接。标准的JDBC URL的格式如下: jdbc:<子协议名>:<子名称> 桥驱动程序例: jdbc:odbc:mydb;user=me;pwd=pass 厂商驱动程序例: dataInstance
16
JAVA 驱动程序包名:ojdbc7.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver
Oracle数据库的驱动程序及JDBC URL 驱动程序包名:ojdbc7.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC 说明:驱动程序包名有可能会变 JDBC URL中红色字体部分必须原封不动的保留,为该驱动识别的URL格式。 其中各个部分含义如下: dbip – 为数据库服务器的IP地址,如果是本地可写:localhost或 。 port – 为数据库的监听端口,需要看安装时的配置,缺省为1521。 databasename – 为数据库的SID,通常为全局数据库的名字。 举例如果要访问本地的数据库allandb,端口1521,那么URL写法如下: 下载地址如下:
17
JAVA SQL Server数据库的驱动程序及JDBC URL
驱动程序包名:msbase.jar mssqlserver.jar msutil.jar 驱动类的名字:com.microsoft.jdbc.sqlserver.SQLServerDriver JDBC URL:jdbc:microsoft:sqlserver://dbip:port;DatabaseName=databasename 说明:驱动程序包名有可能会变 JDBC URL中红色色字体部分必须原封不动的保留,为该驱动识别的URL格式。红色字体部需要根据数据库的安装情况填写。其中各个部分含义如下: dbip – 为数据库服务器的IP地址,如果是本地可写:localhost或 。 port – 为数据库的监听端口,需要看安装时的配置,缺省为1433。 databasename –数据库的名字。 举例如果要访问本地的数据库allandb,端口1433,那么URL写法如下: jdbc: microsoft: DatabaseName =allandb 下载地址:
18
JAVA 驱动程序包名:mysql-connector-java-5.1.26-bin.jar
MYSQL 数据库的驱动程序及JDBC URL 驱动程序包名:mysql-connector-java bin.jar 驱动类的名字:com.mysql.jdbc.Driver JDBC URL:jdbc:mysql://dbip:port/databasename 说明:驱动程序包名有可能会变 JDBC URL中红色色字体部分必须原封不动的保留,为该驱动识别的URL格式。红色字体部需要根据数据库的安装情况填写。其中各个部分含义如下: dbip – 为数据库服务器的IP地址,如果是本地可写:localhost或 。 port – 为数据库的监听端口,需要看安装时的配置,缺省为3306。 databasename –数据库的名字。 举例如果要访问本地的数据库mydb,端口3306,那么URL写法如下: jdbc:mysql://localhost:3306/mydb 下载地址:
19
驱动程序包名:该驱动程序包含在JavaSE中,不需要额外安装。 驱动类的名字:sun.jdbc.odbc.JdbcOdbcDriver
ACCESS数据库的驱动程序及JDBC URL 驱动程序包名:该驱动程序包含在JavaSE中,不需要额外安装。 驱动类的名字:sun.jdbc.odbc.JdbcOdbcDriver JDBC URL:jdbc:odbc:datasourcename 说明:该驱动只能工作在Windows系统中,首先需要在操作系统中建立一个可以访问Access数据库的本地数据源(ODBC),如果名字为mydb,那么URL写法如下: jdbc:odbc:mydb
20
生成JDBC驱动的实例或是通过jdbc.drivers系统属性加载 向系统注册一个驱动程序 指定数据库 打开数据库连接 提交数据库查询
JAVA JDBC 访问数据库的基本步骤 生成JDBC驱动的实例或是通过jdbc.drivers系统属性加载 向系统注册一个驱动程序 指定数据库 打开数据库连接 提交数据库查询 取得查询结果 清除结果集 关闭连接
21
在一个静态代码段中生成一个实例,当系统调用它的构造方法时,它会向driver manger进行注册。
JAVA JDBC 访问数据库的基本步骤 1、注册驱动程序 在一个静态代码段中生成一个实例,当系统调用它的构造方法时,它会向driver manger进行注册。 2、指定数据库 指定URL字符串, jdbc:subprotocol: 1521:ora8。 String serverName+":1521:"+database;
22
Connection conn=DriverManager. getConnection(url); 该方法使用URL字符串作为参数
JAVA JDBC 访问数据库的基本步骤 3、打开数据库连接 Connection conn=DriverManager. getConnection(url); 该方法使用URL字符串作为参数 如果能建立连接,则返回一个Connection对象。Connection对象代表与一个特定数据库的会话过程。
23
Connection.createStatement方法,执行INSERT, UPDATE和DELETE。
JAVA JDBC 访问数据库的基本步骤 4、创建Statement Connection.createStatement方法,执行INSERT, UPDATE和DELETE。 Statement.executeUpdate方法,执行SELECT语句。 Statement.executeQuery方法
24
查询的结果存放在ResultSet对象的一系列行中 ResultSet对象的最初位置在行首
JAVA JDBC 访问数据库的基本步骤 5、取得返回结果 查询的结果存放在ResultSet对象的一系列行中 ResultSet对象的最初位置在行首 ResultSet.next()方法用来在行间移动 ResultSet.getXXX()方法用来取得字段的内容。
25
JAVA JDBC 访问数据库的getXXX方法
26
使用PreparedStatement 使用CallableStatement
JAVA JDBC 访问数据库的基本步骤 使用PreparedStatement 当需要多次调用同一条SQL语句时,可以使用Prepared Statement。 PreparedStatement从Statement继承而来setXXX方法。 使用CallableStatement 当不直接使用SQL语句,而是调用数据库中的Store Procedure时,要用到CallableStatement。 CallabelStatement从PreparedStatement继承。
27
操作步骤: 进入ODBC数据源环境; 创建新的数据源; 为新数据源命名,并与指定的数据库关联; 设置用户的登录名称及密码
JAVA 手 动 建 立 ODBC 数 据 源 操作步骤: 可以将Excel文件、Access数据库设置为ODBC数据源 开始程序管理工具数据源 或者 开始设置控制面板管理工具数据源 进入ODBC数据源环境; 创建新的数据源; 为新数据源命名,并与指定的数据库关联; 设置用户的登录名称及密码
28
JAVA Java -- MySQL数 据 库 操作步骤: 下载mysql win32.msi 仔细查看1-5.JPG
Similar presentations