详解JDBC驱动的四种类型

合集下载

JDBC入门入门入门入门

JDBC入门入门入门入门

第20章•JDBC入門–使用JDBC連接資料庫–使用JDBC進行資料操作簡介JDBC簡介JDBC•JDBC資料庫驅動程式依實作方式可以分為四個類型–Type 1:JDBC-ODBC Bridge–Type 2:Native-API Bridge–Type 3:JDBC-middleware–Type 4:Pure Java Driver連接資料庫•載入JDBC驅動程式try {Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundException e) {System.out.println("找不到驅動程式類別");}連接資料庫•提供JDBC URL–協定:子協定:資料來源識別jdbc:mysql://主機名稱:連接埠/資料庫名稱?參數=值&參數=值jdbc:mysql://localhost:3306/demo?user=root&password=123 jdbc:mysql://localhost:3306/demo?user=root&password=123& useUnicode=true&characterEncoding=Big5連接資料庫•取得Connectiontry {String url= "jdbc:mysql://localhost:3306/demo?" +"user=root&password=123";Connection conn= DriverManager.getConnection(url);....}catch(SQLException e) {....}String url= "jdbc:mysql://localhost:3306/demo";String user = "root";String password = "123";Connection conn= DriverManager.getConnection(url,user, password);簡單的Connection工具類別•取得Connection的方式,依所使用的環境及程式需求而有所不同•設計一個DBSource介面package onlyfun.caterpillar;import java.sql.Connection;import java.sql.SQLException;public interface DBSource{public Connection getConnection() throws SQLException;public void closeConnection(Connection conn) throws SQLException; }簡單的Connection工具類別public class SimpleDBSource implements DBSource{…public SimpleDBSource(String configFile) throws IOException,ClassNotFoundException{ props = new Properties();props.load(new FileInputStream(configFile));url= props.getProperty("onlyfun.caterpillar.url");user = props.getProperty("er");passwd= props.getProperty("onlyfun.caterpillar.password");Class.forName(props.getProperty("onlyfun.caterpillar.driver"));}public Connection getConnection() throws SQLException{return DriverManager.getConnection(url, user, passwd);}public void closeConnection(Connection conn) throws SQLException{ conn.close();}}簡單的Connection工具類別onlyfun.caterpillar.driver=com.mysql.jdbc.Driver onlyfun.caterpillar.url=jdbc:mysql://localhost:3306/demo er=rootonlyfun.caterpillar.password=123456DBSource dbsource= new SimpleDBSource();Connection conn= dbsource.getConnection();if(!conn.isClosed()) {System.out.println("資料庫連接已開啟…");}dbsource.closeConnection(conn);if(conn.isClosed()) {System.out.println("資料庫連接已關閉…");}簡單的連接池(Connection pool)•資料庫連接的取得是一個耗費時間與資源的動作–建立Socket connection–交換資料(使用者密碼驗證、相關參數)–資料庫初始會話(Session)–日誌(Logging)–分配行程(Process)–…簡單的連接池(Connection pool)public synchronized Connection getConnection()throws SQLException{ if(connections.size() == 0) {return DriverManager.getConnection(url, user, passwd);}else {int lastIndex= connections.size() -1;return connections.remove(lastIndex);}}public synchronized void closeConnection(Connection conn)throws SQLException{ if(connections.size() == max) {conn.close();}else {connections.add(conn);}}簡單的連接池(Connection pool)DBSource dbsource= new BasicDBSource("jdbc2.properties"); Connection conn1 = dbsource.getConnection();dbsource.closeConnection(conn1);Connection conn2 = dbsource.getConnection();System.out.println(conn1 == conn2);onlyfun.caterpillar.driver=com.mysql.jdbc.Driveronlyfun.caterpillar.url=jdbc:mysql://localhost:3306/demo er=rootonlyfun.caterpillar.password=123456onlyfun.caterpillar.poolmax=10簡單的連接池(Connection pool)•初始的Connection數量•Connection最大idle的數量•如果超過多久時間,要回收多少數量的Connection•Proxool–/index.html •Apache Jakarta的Common DBCP –/commons/dbcp/Statement、ResultSet•要執行SQL的話,必須取得java.sql.Statement物件,它是Java當中一個SQL敘述的具體代表物件Statement stmt = conn.createStatement();•插入一筆資料,可以如下使用Statement的executeUpdate()方法stmt.executeUpdate("INSERT INTO t_message VALUES(1, 'justin', " + "'justin@', 'mesage...')");Statement、ResultSet •executeUpdate()會傳回int結果,表示資料變動的筆數•executeQuery()方法則是用於SELECT等查詢資料庫的SQL•executeQuery()會傳回java.sql.ResultSet物件,代表查詢的結果•可以使用ResultSet的next()來移動至下一筆資料,它會傳回true 或false表示是否有下一筆資料•使用getXXX()來取得資料Statement、ResultSet•指定欄位名稱來取得資料ResultSet result =stmt.executeQuery("SELECT* FROM t_message"); while(result.next()) {System.out.print(result.getInt("id") + "\t");System.out.print(result.getString("name") + "\t");System.out.print(result.getString("email") + "\t");System.out.print(result.getString("msg") + "\t");}Statement、ResultSet•使用查詢結果的欄位順序來顯示結果ResultSet result =stmt.executeQuery("SELECT* FROM t_message"); while(result.next()) {System.out.print(result.getInt(1) + "\t");System.out.print(result.getString(2) + "\t");System.out.print(result.getString(3) + "\t");System.out.print(result.getString(4) + "\t");}Statement、ResultSet •Statement的execute()可以用來執行SQL,並可以測試所執行的SQL是執行查詢或是更新•傳回true的話表示SQL執行將傳回ResultSet表示查詢結果,此時可以使用getResultSet()取得ResultSet物件•如果execute()傳回false,表示SQL執行會傳回更新筆數或沒有結果,此時可以使用getUpdateCount()取得更新筆數•如果事先無法得知是進行查詢或是更新,就可以使用execute()Statement、ResultSet finally {if(stmt!= null) {try {stmt.close();}catch(SQLException e) {e.printStackTrace();}}if(conn!= null) {try {dbsource.closeConnection(conn);}catch(SQLException e) {e.printStackTrace();}}}Statement、ResultSet •Connection物件預設為「自動認可」(auto commit)•getAutoCommit()可以測試是否設定為自動認可•無論是否有無執行commit()方法,只要SQL 沒有錯,在關閉Statement或Connection 前,都會執行認可動作PreparedStatement •preparedStatement()方法建立好一個預先編譯(precompile)的SQL語句•當中參數會變動的部份,先指定"?"這個佔位字元PreparedStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");PreparedStatement•需要真正指定參數執行時,再使用相對應的setInt()、setString()等方法,指定"?"處真正應該有的參數stmt.setInt(1, 2);stmt.setString(2, "momor");stmt.setString(3, "momor@");stmt.setString(4, "message2...");LOB讀寫•BLOB全名Binary Large Object,用於儲存大量的二進位資料•CLOB全名Character Large Object,用於儲存大量的文字資料•在JDBC中也提供了java.sql.Blob與java.sql.Clob兩個類別分別代表BLOB與CLOB資料LOB讀寫•取得一個檔案,並將之存入資料庫中File file= new File("./logo_phpbb.jpg");int length = (int) file.length();InputStream fin = new FileInputStream(file);// 填入資料庫PreparedStatement pstmt= conn.prepareStatement("INSERT INTO files VALUES(?, ?, ?)");pstmt.setInt(1, 1);pstmt.setString(2, "filename");pstmt.setBinaryStream(3, fin, length);pstmt.executeUpdate();pstmt.clearParameters();pstmt.close();fin.close();LOB讀寫•從資料庫中取得BLOB或CLOB資料Blob blob= result.getBlob(2); // 取得BLOBClob clob= result.getClob(2) // 取得CLOB交易(Transaction)•可以操作Connection的setAutoCommit()方法,給它false引數•在下達一連串的SQL語句後,自行呼叫Connection的commit()來送出變更交易(Transaction)try {…conn.setAutoCommit(false); // 設定auto commit為false stmt = conn.createStatement();stmt.execute("...."); // SQLstmt.execute("....");stmt.execute("....");mit(); // 正確無誤,確定送出}catch(SQLException e) { // 喔喔!在commit()前發生錯誤try {conn.rollback(); // 撤消操作} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}交易(Transaction)•設定儲存點(save point)conn.setAutoCommit(false);Statement stmt = conn.createStatement();stmt.executeUpdate("....");stmt.executeUpdate("....");Savepoint savepoint= conn.setSavepoint(); // 設定save pointstmt.executeUpdate("....");// 如果因故rollbackconn.rollback(savepoint);. . .mit();// 記得釋放save pointstmt.releaseSavepoint(savepoint);批次處理•使用addBatch()方法將要執行的SQL敘述加入,然後執行executeBatch()conn.setAutoCommit(false);Statement stmt = conn.createStatement();stmt.addBatch("..."); // SQLstmt.addBatch("...");stmt.addBatch("...");...stmt.executeBatch();mit();批次處理•使用PreparedStatement可以進行批次處理PreparedStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");Message[] messages = ...;for(int i = 0; i < messages.length; i++) {stmt.setInt(1, messages[i].getID());stmt.setString(2, messages[i].getName());stmt.setString(3, messages[i].getEmail());stmt.setString(4, messages[i].getMsg());stmt.addBatch();}stmt.executeBatch();ResultSet游標控制•可以在建立Statement物件時指定resultSetType –ResultSet.TYPE_FORWARD_ONLY–ResultSet.TYPE_SCROLL_INSENSITIVE–ResultSet.TYPE_SCROLL_SENSITIVE•預設是第一個,也就是只能使用next()來逐筆取得資料•指定第二個或第三個時,則可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法ResultSet游標控制•還必須指定resultSetConcurrency –ResultSet.CONCUR_READ_ONLY–ResultSet.CONCUR_UPDATABLE •createStatement()不給定參數時,預設是TYPE_FORWARD_ONLY、CONCUR_READ_ONLYResultSet游標控制dbsource= new SimpleDBSource();conn= dbsource.getConnection();stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet result = stmt.executeQuery("SELECT * FROM t_message");result.afterLast();while(result.previous()) {System.out.print(result.getInt("id") + "\t");System.out.print(result.getString("name") + "\t");System.out.print(result.getString("email") + "\t");System.out.println(result.getString("msg"));}ResultSet新增、更新、刪除資料•建立Statement時必須在createStatement()上指定TYPE_SCROLL_SENSITIVE(或TYPE_SCROLL_INSENSITIVE,如果不想取得更新後的資料的話)與CONCUR_UPDATABLEStatement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet新增、更新、刪除資料•針對查詢到的資料進行更新的動作ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHERE name='justin'"); st();result.updateString("name", "caterpillar");result.updateString("email", "caterpillar@"); result.updateRow();ResultSet新增、更新、刪除資料•如果想要新增資料ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHEREname='caterpillar'");result.moveToInsertRow();result.updateInt("id", 4);result.updateString("name", "jazz");result.updateString("email", "jazz@");result.updateString("msg", "message4...");result.insertRow();ResultSet新增、更新、刪除資料•要刪除查詢到的某筆資料ResultSet result = stmt.executeQuery("SELECT * FROM t_message WHEREname='caterpillar'");st();result.deleteRow();ResultSetMetaData •Meta Data即「資料的資料」(Data about data)•ResultSet用來表示查詢到的資料,而ResultSet資料的資料,即描述所查詢到的資料背後的資料描述,即用來表示表格名稱、欄位名稱、欄位型態•可以透過ResultSetMetaData來取得ResultSetMetaDatadbsource= new SimpleDBSource();conn= dbsource.getConnection();stmt = conn.createStatement();ResultSet result = stmt.executeQuery("SELECT * FROM t_message"); ResultSetMetaData metadata =result.getMetaData();for(int i = 1; i <= metadata.getColumnCount(); i++) { System.out.print(metadata.getTableName(i) + ".");System.out.print(metadata.getColumnName(i) + "\t|\t");System.out.println(metadata.getColumnTypeName(i));}。

jdbc描述 -回复

jdbc描述 -回复

jdbc描述-回复JDBC描述JDBC(Java Database Connectivity)是一种用于Java编程语言中连接和操作数据库的API(Application Programming Interface)。

它提供了一种标准的接口,使Java程序能够与任何关系型数据库进行交互。

JDBC 的主要功能包括连接数据库、执行SQL语句、处理结果集以及事务处理等。

JDBC提供了一种与数据库进行通信的方法,它允许开发人员通过Java代码执行与数据库相关的操作。

通过JDBC,可以以统一的方式连接不同的数据库(如MySQL、Oracle、SQL Server等),并执行查询、插入、更新、删除等操作。

一、JDBC的主要组成部分1. JDBC接口:JDBC接口定义了一些类和接口,用于连接与数据库的通信。

这些接口包括连接(Connection)、语句(Statement)、结果集(ResultSet)等。

2. JDBC Driver:JDBC Driver是一种实现了JDBC接口的软件模块,它可以将Java应用程序与底层数据库通信。

JDBC Driver分为四种类型:JDBC-ODBC桥驱动、本地API驱动、网络协议驱动和本地协议驱动。

不同的数据库厂商提供了不同的驱动程序,开发者需要根据所使用的数据库选择相应的驱动。

3. 数据库:JDBC允许Java程序与所有关系型数据库进行交互,如MySQL、Oracle、SQL Server等。

二、JDBC的使用步骤1. 加载JDBC驱动程序:JDBC驱动程序通常以JAR文件的形式提供,需要通过Class.forName()方法加载驱动程序。

例如,对于MySQL数据库,可以通过以下代码加载MySQL驱动程序:javaClass.forName("com.mysql.jdbc.Driver");2. 连接数据库:JDBC提供了Connection接口来建立与数据库的连接。

JDBC

JDBC

Connection类的方法…

Statement createStatement() throws SQLException; //建 立Statement类对象 Statement createStatement(int resultSetType,int resultS etConcurrency) throws SQLException; // 建立Statement类对象
使用 DataSource的例子
String jndi = "jdbc/jpetstore1"; Context ctx = (Context) new InitialContext().lookup("java:comp/env"); DataSource ds = (DataSource) ctx.lookup(jndi); Connection cn = ds.getConnection();
registerDriver getConnection(String url) getConnection(String url, java.util.Properties prop)
DataSource接口…


建议用此种方式来获取数据源的连接 DataSource 对象表示一个数据源,并提供了 该数据源的连接 使用 DataSource 对象增加了应用程序的可移 植性(使用逻辑名称表示一个数据源,取代为 驱动程序提供特定的连接信息) DataSource的属性改变,应用程序代码不需 要改变
…DataSource接口…

使用 JNDI API,指定逻辑名来访问DataSource 对象,把逻辑名 映射到相应的数据源 例子: // Get the initial JNDI naming context Context ctx = new InitialContext(); // Get the DataSource object associated with the logical name // "jdbc/AcmeDB" and use it to obtain a database connection DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB"); Connection con = ds.getConnection("user", "pwd");

详解JDBC驱动的四种类型

详解JDBC驱动的四种类型

Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥、本地API驱动、网络协议驱动和本地协议驱动。

JDBC驱动类型一、JDBC-ODBC桥JDBC-ODBC 桥是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码.( 本地数据库驱动代码是指由数据库厂商提供的数据库操作二进制代码库,例如在oracle for windows中就是oci dll 文件)只要本地机装有相关的ODBC驱动那么采用JDBC-ODBC桥几乎可以访问所有的数据库,JDBC- ODBC方法对于客户端已经具备ODBC driver的应用还是可行的.但是,由于JDBC-ODBC先调用 ODBC再由ODBC去调用本地数据库接口访问数据库.所以,执行效率比较低,对于那些大数据量存取的应用是不适合的.而且,这种方法要求客户端必须安装ODBC 驱动,所以对于基于 internet ,intranet的应用也是不合适的.因为,你不可能要求所有客户都能找到ODBC driver.JDBC驱动类型二、本地API驱动本地API驱动直接把JDBC调用转变为数据库的标准调用再去访问数据库.这种方法需要本地数据库驱动代码. 本地API驱动 | 厂商DB代码---------------数据库Server (图二) 这种驱动比起JDBC-ODBC桥执行效率大大提高了.但是,它仍然需要在客户端加载数据库厂商提供的代码库.这样就不适合基于internet的应用.并且,他的执行效率比起3,4型的JDBC驱动还是不够高.JDBC驱动类型三、网络协议驱动这种驱动实际上是根据我们熟悉的三层结构建立的. JDBC先把对数局库的访问请求传递给网络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器.如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 JDBC驱动程序作为访问数据库的方法. 网络协议驱动---------中间件服务器------------数据库Server由于这种驱动是基于server的.所以,它不需要在客户端加载数据库厂商提供的代码库.而且他在执行效率和可升级性方面是比较好的.因为大部分功能实现都在server端,所以这种驱动可以设计的很小,可以非常快速的加载到内存中. 但是,这种驱动在中间件层仍然需要有配置其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好.JDBC驱动类型四、本地协议驱动这种驱动直接把JDBC调用转换为符合相关数据库系统规范的请求.由于4型驱动写的应用可以直接和数据库服务器通讯.这种类型的驱动完全由java实现,因此实现了平台独立性. 本地协议驱动---------数据库Server由于这种驱动不需要先把JDBC的调用传给ODBC或本地数据库接口或者是中间层服务器.所以它的执行效率是非常高的.而且,它根本不需要在客户端或服务器端装载任何的软件或驱动. 这种驱动程序可以动态的被下载.但是对于不同的数据库需要下载不同的驱动程序.以上对四种类型的JDBC驱动做了一个说明.那么它们适合那种类型的应用开发呢?JDBC-ODBC桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学者了解JDBC编程也较适用. 对于那些需要大数据量操作的应用程序则应该考虑2,3,4型驱动.在intranet方面的应用可以考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发的趋势是使用纯java.所以3,4型驱动也可以作为考虑对象. 至于基于internet方面的应用就只有考虑3,4型驱动了. 因为3型驱动可以把多种数据库驱动都配置在中间层服务器.所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用. 4型驱动则适合那些连接单一数据库的工作组应用。

DB2的JDBC连接驱动与URL总结

DB2的JDBC连接驱动与URL总结
因为“通用 JDBC 驱动程序”独立于任何特定 JDBC 驱动程序类型连通性或目标平台,
所以它在一个 DB2 UDB 驱动程序实例中同时支持所有 JAVA 连通性(Type 4 驱动程序)和基于 JNI 的连通性(Type 2 驱动程序)。
该驱动程序可以用于独立 JAVA 应用程序或多层应用程序,是开发人员一个不错的选择。
Type 4 Driver URL Pattern:jdbc:db2://ServerIP:50000/databasename
这当中 ServerIP 是需要访问的数据库所在机器IP地址,databasename 是需要访问的数据库名,DB2 服务器会在默认端口 50000 上进行侦听。
url="jdbc:db2:zfvims"
有两种不同的方法可以区分 DB2 系统在内部最终会实例化哪个驱动程序:
使用不同的 URL Pattern 来区分两种不同的驱动程序
Type 2 Driver URL Pattern:jdbc:db2:databasename
这当中 databasename 是需要访问的数据库名
Type 4:这类驱动程序是纯 JAVA,实现针对特定数据源的网络协议。客户机直接连接至数据源。
下面只讨论JDBC驱动连接DB2数据
第一种:通用连接方式
驱动类:com.ibm.db2.jcc.DB2Driver
JDBC连接URL:jdbc:db2://ServerIP:Port/databasename
说明:这种连接方式不需要DB2 V9开始分离出了客户端和服务器端,先前的版本没有单独的客户端软件,推荐使用这种连接方式。
第二种:客户端软件连接方式

jdbc从入门到精通,特别适合初学者

jdbc从入门到精通,特别适合初学者

jdbc从入门到精通,特别适合初学者如果你有翻阅java API文档的习惯的话,你就会发现,jdbc API中接口占了大多数。

不同的jdbc驱动开发者提供了实现必要接口的类。

开发商之间的不断竞争就为我们提供了多种jdbc驱动。

点击这里你会方便的获得很多公司提供的jdbc驱动。

从编程的角度出发,有两个主要的类负责建立与数据库的连接。

第一个类是 DriverManager,它是在 JDBC API 中提供的为数不多的实际类之一。

DriverManager 负责管理已注册驱动程序的集合,实质上就是提取使用驱动程序的细节,这样程序员就不必直接处理它们。

第二个类是实际的 JDBC Driver 类。

这些是由独立厂商提供的。

JDBC Driver 类负责建立数据库连接和处理所有与数据库的通讯。

在所有java程序与数据库之间创建连接的过程的第一步是在jvm中注册jdbc驱动。

在传统的连接机制(相对于后面讨论的 DataSource 连接机制)中,连接和所有数据库通讯是由 DriverManager 对象控制的。

要建立一个连接,必须用 DriverManager 对象注册针对目标数据库的适当的 JDBC 驱动程序。

JDBC 规范规定了 JDBC 驱动程序在装入 JVM 时应该自动用 DriverManager 对象注册自身。

例如,下面的代码段使用一个静态的初始化程序来首先创建一个 persistentjava JDBC 驱动程序的实例,然后用 DriverManager 将其注册。

static {java.sql.DriverManager.registerDriver(new com.persistentjava.JdbcDriver()) ;}注册驱动程序就是将驱动程序类装入 JVM 的工作,它可以用几种不同的方法完成。

一种方法就是使用类调用器(ClassLoader)Class.forName(yourDriver);。

JDBC—常用类

JDBC—常用类

JDBC—常⽤类详解各个对象DriverManager驱动管理对象功能:1.注册驱动:静态⽅法:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。

*使⽤:Class.forName("com.mysql.jdbc.Driver");//Driver中的⼀个静态代码块static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}2.获取数据库连接:静态⽅法: static Connection getConnection (String url, String user, String password) 尝试建⽴与给定数据库URL的连接。

参数:url:指定连接的路径;语法:jdbc:mysql://IP地址:端⼝号/数据库名称;user:⽤户名; password:密码;Connection数据库连接对象功能:1.获取执⾏sql对象:Statement createStatement() 创建⼀个 Statement对象,⽤于将SQL语句发送到数据库。

PreparedStatement prepareStatement(String sql)创建⼀个 PreparedStatement对象,⽤于将参数化的SQL语句发送到数据库。

2.管理事务:1.开启事务:setAutoCommit (boolean autoCommit) ;将参数设置为false,即开启事务;2.提交事务:commit();3.回滚事务:rollback();Statement执⾏sql的对象(静态)1.执⾏sql: 1.boolean excute(String sql):可以执⾏的任意sql;2.int excuteUpdate(String sql):执⾏DML、DCL语句;返回值:受到影响的⾏数(可以根据该值判断语句是否执⾏成功)3.ResultSet excuteQuery(String sql):执⾏DCL语句;返回结果集对象;练习:public static void main(String[] args) {Statement stmt = null;Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");String sql = "insert into acount values(null,'wang',1500) ";//String sql2 = "update acount set balance = 1000 where id=3";conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/qinsujie", "root", "qinsujie123");stmt= conn.createStatement();int count = stmt.executeUpdate(sql);System.out.println(count);if(count>0){System.out.println("添加成功");}else{System.out.println("添加失败");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}/* stmt.close();conn.close();*/}ResultSet结果集对象,封装查询结果1.next():游标向下移动⼀⾏,判断当前⾏是否是最后⼀⾏末尾(返回false时没有数据);2.getXxx(参数):获取数据;Xxx表⽰数据类型;参数:1.int :代表列的编号(从1开始);2. String :代表列的名称;注意:使⽤步骤:1.游标向下移动⼀⾏;2.判断是否有数据;3.获取数据while(res.next()){int id=res.getInt(1);String name = res.getString(2);String balance = res.getString(3);System.out.println("id="+id+" name="+name+" balance="+balance);}//抽取JDBC⼯具类⽬的:简化书写;配置jdbc.properties⽂件;url=jdbc:mysql://127.0.0.1:3306/practiceuser=rootpassword=qinsujie123driver=com.mysql.jdbc.Driverpublic class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;/*** ⽂件只读取⼀次即可拿到这些值*/static{try {Properties pro = new Properties();//获取src路径下的资源⽅式ClassLoader classLoader= JDBCUtils.class.getClassLoader();URL resourse = classLoader.getResource("jdbc.properties");String path = resourse.getPath();//加载⽂件// pro.load(new FileReader("learn.DataBase\\JDBC\\src\\jdbc.properties"));pro.load(new FileReader(path));url=pro.getProperty("url");user=pro.getProperty("user");password=pro.getProperty("password");driver = pro.getProperty("driver");try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}} catch (IOException e) {e.printStackTrace();}}/*** 获取连接* 不传递参数,但是要求通⽤性* 解决:配置⽂件* @return返回连接对象*/public static Connection getConnection(){try {return DriverManager.getConnection(url,user,password);} catch (SQLException e) {e.printStackTrace();}return null;}/*** 释放资源* @param conn* @param stmt* @param res*/public static void close(Connection conn , Statement stmt , ResultSet res){if(res!=null){try {res.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}public static void close(Connection conn , Statement stmt ){if (stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}PreparedStatement表⽰预编译的sql对象:参数使⽤?占位符替代。

4种类型的JDBC驱动程序

4种类型的JDBC驱动程序

4种类型的JDBC驱动程序JDBC-ODBC桥作为JDK1.1后的一部分,是sun.jdbc.odbc包的一部分Application--->JDBC-ODBC Bridge(Type1 jdbc driver)---->JDBC-ODBC Library--->ODB C Driver-->Database适用于快速的原型系统,没有提供JDBC驱动的数据库如AccessJAVA to Native API利用开发商提供的本地库来直接与数据库通信。

Application--->JDBC Driver(Type2 jdbc driver)---->Native Database library---->D atabase比Type1性能略好。

Java to netApplication--->Jdbc Driver(Type3 jdbc driver)----->java middleware--->JDBC Driv er---->Database具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。

JAVA to native dababaseApplication--->Jdbc driver(type4 jdbc driver)----->database engine--->database 最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在Internet装配的能力JDBC连接数据库类示例:package myClass;import java.sql.*;import oracle.jdbc.driver.*;public class connectdata {String url;String sql;Connection con;Statement stmt;PreparedStatement psmt;ResultSet mySet;int n;public connectdata() {try{DriverManager.registerDriver(new oracle.jdbc.OracleDriver());url = "jdbc:oracle:thin:@192.168.0.254:1521:jjdb";con = DriverManager.getConnection (url, "tubin", "okokok");stmt = con.createStatement();}catch(Exception e){ System.out.print(e);}}public ResultSet getQueryResultSet(String sql){try {mySet = stmt.executeQuery(sql);}catch(Exception e){} return mySet;}public int getUpdateQueryResultSet(String sql){try{n = stmt.executeUpdate(sql);}catch(Exception e){}return n;}public PreparedStatement getPreparedStatement(String sql){ try{psmt= con.prepareStatement(sql);}catch(Exception e){} return psmt;}public Connection getConnection(){return con;}}。

Java开发Oracle的jdbc驱动三种主要分类

Java开发Oracle的jdbc驱动三种主要分类

1、JDBC OCI:oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动。

因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置。

2、JDBC Thin:thin是for thin client的意思,这种驱动一般用在运行在WEB浏览器中的JAVA程序。

它不是通过OCI or Net8,而是通过Java sockets进行通信,是纯java 实现的驱动,因此不需要在使用JDBC Thin的客户端机器上安装orcale客户端软件,所以有很好的移植性,通常用在web开发中。

3、JDBC KPRB:这种驱动由直接存储在数据库中的JAVA程序使用,如Java Stored Procedures 、triggers、Database JSP's。

因为是在服务器内部使用,他使用默认或当前的会话连接来访数据库,不需要用户名密码等,也不需要数据库url。

在应用开发的时候,通常是用前面两种方式,下面是数据库url的写法:jdbc:oracle:thin:@server ip: servicejdbc:oracle:oci:@service看来oci的还更加简洁,ip可以省掉不写了,这是因为oci驱动通过客户端的native java methods来条用c library方式来访问数据库服务器,使用到了客户端的net manager里的数据库服务配置。

因为oci方式最终与数据库服务器通信交互是用的c library库,理论上性能优于thin方式,据说主要是体现在blob字段的存取上。

开发oracle经常用到的pl sql dev使用的估计是oci方式,需要安装客户端,但也可以不安装,但是要抽出其中的oci相关的dll即jar包、注册环境变量、配置侦听文件等,无需安装oracle客户端,用plsql连接远程oracle 详细步见附注。

Java中连接MySql数据库的几种方法

Java中连接MySql数据库的几种方法

JDBCJava中JDBC定义了java与各种sql数据库之间的编程接口,JDBC API是一个统一的标准应用程序编程接口,这样可以屏蔽异种数据库之间的差异。

JDBC的工作原理JDBC与ODBC(OpenData Base Connectivity,开放式数据库连接)的作用非常类似,它在应用程序和数据库之间起到了桥梁的作用。

ODBC使用的特别广泛,在java中还提供了JDBC-ODBC桥,能够在JDBC与ODBC之间进行转换,这样可以通过ODBC屏蔽不同种数据库之间的差异。

在JDK的包java.sql.*中定义了一系列的类、接口、异常以及这些类和接口中定义的属性和方法,java的开发人员通过一定的规则调用java.sql.*中的API就可以实现对数据库管理系统的访问。

JDBC的四种驱动1.JDBC-ODBC BridgeJDBC-ODBC Bridge可以访问一个ODBC数据源,但在执行Java程序的机器上必须安装ODBC驱动,并作出配置,它的调用方式如下图:因为中间有个JDBC-ODBC,所以影响了执行效率。

配置ODBC数据源的方法如下(以Mysql为例):第一步,打开控制面板—>管理工具--->数据源(ODBC)选择系统DSN,这一项默认应该是空的,我这里是已经配置好了一个数据源。

第二步,点击添加第三步,选择Mysql的ODBC驱动,点击完成。

注:MySQL的ODBC驱动在系统中一般是找不到的,因为它不是系统默认自带的驱动,所以,我们要自己安装我们所需要的MySQL的ODBC驱动。

安装步骤如下:①.下载安装包,/downloads/connector/odbc/②.我们下载与自己系统相应的ODBC驱动这里我们选择③.我们下载,完成后会得到④.点击安装,安装完成后,就可以找到我们需要的驱动了。

第四步,配置我们的数据源信息。

第五步,点击Test测试成功,点击ok。

测试失败,请检查配置问题。

jdbc 语法

jdbc 语法

JDBC语法1. 什么是JDBCJDBC(Java Database Connectivity)是Java语言访问关系数据库的一种标准API。

通过JDBC,我们可以使用Java语言来连接数据库、执行SQL语句、获取查询结果等操作。

JDBC提供了一套统一的接口,使得我们可以方便地与不同的数据库进行交互。

2. JDBC的基本组成JDBC由以下几个主要组成部分组成:2.1 JDBC驱动程序JDBC驱动程序是连接数据库的关键。

根据数据库的不同,我们需要使用相应的JDBC驱动程序。

JDBC驱动程序可以分为四种类型:1.JDBC-ODBC桥接驱动程序:用于连接ODBC(Open Database Connectivity)兼容的数据库。

这种驱动程序需要在操作系统中安装ODBC驱动。

2.本地API驱动程序:直接使用数据库提供的本地API进行连接。

这种驱动程序通常是针对特定数据库的。

3.网络协议驱动程序:使用数据库的网络协议进行连接。

这种驱动程序通常是通过网络与数据库进行交互。

4.纯Java驱动程序:完全使用Java语言实现的驱动程序,不依赖于操作系统或网络协议。

这是最常用的驱动程序类型。

2.2 连接管理器连接管理器负责与数据库建立连接,并提供对连接的管理。

通过连接管理器,我们可以创建、关闭、管理连接,以及设置连接的属性。

2.3 语句执行器语句执行器用于执行SQL语句,并获取执行结果。

通过语句执行器,我们可以执行查询、插入、更新、删除等操作。

2.4 结果集结果集用于存储查询的结果。

通过结果集,我们可以获取查询结果的每一行数据,并对其进行处理。

3. JDBC的基本用法使用JDBC连接数据库的基本步骤如下:3.1 加载驱动程序在使用JDBC之前,我们需要加载相应的驱动程序。

根据不同的驱动程序类型,加载驱动程序的方式也不同。

3.2 建立连接通过连接管理器,我们可以建立与数据库的连接。

连接需要提供数据库的URL、用户名和密码等信息。

Java与数据库的连接(一)

Java与数据库的连接(一)

Type4 本地协议驱动
这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求.
由于4型驱动写的应用可 以直接和数据库服务器通讯.
这种类型的驱动完全由java实现,因此实现了平台独立性.
--
JDBC是由SUN公司制定的一组标准数据库访问接口和类所组成,
它收录于JAVASE的API中,但是,JDBC规则却是属性JAVAEE范畴的。
SQL指令并处理结果。通过驱动程序管理器,JDBC API可利用不同的驱动
程序连接不同的数据库系统。
JDBC保持了ODBC的基本特性,也独立于特定数据库。使用相同源代码的应用程序
通过动态加载不同的JDBC驱动程序,可以访问不同的DBMS。连接不同的DBMS时,
各个DBMS之间仅通过不同的URL进行标识。JDBC的 DatabaseMetaData接口提供了一系列方法,
Translates JDBC calls into a DBMS independent net protocol,
which is then translated to a DBMS protocol by a server
4. Native protocol pure java driver :
那么:JDBC 是由SUN公司制定的一套用来访问数据库的标准接口,
所以,要通过JDBC去访问数据库,必须要数据库厂商或第三方来提供访问此数据库的驱动程序
而这些驱动程序也必须要实现JDBC规范
现在,我们来了解一下 JDBC的四种类型的驱动:
1. JDBC-ODBC bridge plus ODBC Driver
--
JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),

整合数据库

整合数据库

整合数据库星辰樱1、JDBC 入门JDBC 是用于执行SQL 的解决方案,开发人员使用JDBC 的标准接口,数据库厂商则对接口进行实现。

1.1 JDBC 简介应用程序 通信协议 JDBC 标准API 程序库 数据库 JDBC 驱动程序 程序库 JDBC 全名Java DataBase Connectivity ,是Java 数据库连接的标准规范。

具体而言,这定义一组标准类与接口,应用程序需要连接数据库时就调用这组标准API ,而标准API 中的接口会由数据库厂商实现,通常称为JDBC 驱动程序(Driver )。

JDBC 标准主要分为两个部分:JDBC 应用程序开发者接口(Application Developer Interface )以及JDBC 驱动程序开发者接口(Driver Developer Interface )。

厂商在实现JDBC 驱动程序时,按方式可以将驱动程序分为四种类型。

·Type1:JDBC-ODBC Bridge Driver 。

优:实现简单 缺:弹性不足,跨平台有限制 ·Type2:Native API Driver 。

优:速度最快 缺:无法跨平台,是基于C/C++ ·Type3:JDBC-Net Driver 。

优:架构上有弹性,可跨平台。

缺:速度慢。

·Type4:Native Protocol Driver 。

优:可跨平台。

缺:没有弹性。

中庸型应用程序 JDBC 驱动 程序 <<interface>> Driver <<interface>> PreparedStatement <<interface>> ResultSet <<interface>> Statement <<interface>> Connection DriverManager SQLException DriverImpl ConnectionImpl StatementImpl ResultImpl PreparedStatementImpl1.2 连接数据库基本数据库操作相关的JDBC接口或类位于java.sql包中。

JDBC主要API介绍

JDBC主要API介绍

JDBC主要API介绍jdbc概述现在我们开发的应用程序,越来越多的要跟数据库打交道了。

尤其是b/s应用程序,因为现在的网页基本上都是动态网页,动态网页就意味着,页面的信息是要经常发生变化的。

而存储这些数据的载体,主要就是数据库。

那我们就势必要掌握用应用程序操作数据库和其中的数据的方法。

在java中,我们是使用jdbc技术来实现应用程序操作数据库的。

jdbc是javadatabaseconnectivity的简称,意思是java数据库连接。

它是用来连接数据库和操作数据库的一组api。

无论是c/s应用程序还是b/s应用程序,我们都可以使用jdbc来操作数据库。

jdbc原理以及驱动程序的分类(1)jdbc原理原来的sun公司(现在是oracle公司)在开发jdbcapi时,将这些接口和类放在了两个包中,java.sql包和javax.sql包中。

而主要的接口和类都是在java.sql包中,javax包叫做扩展包,javax.sql包中有一些关于数据源、连接池和其他的一些扩展的接口和类。

jdbc中最常用的几个USB和类就是drivermanager类、connectionUSB、statementUSB、resultsetUSB,drivermanager这个类就是管理驱动程序的,可以赢得数据库相连接对象。

jdbc的驱动程序就是同时实现了jdbcapiUSB的类,由数据库厂商去提供更多,所以我们在采用jdbc相连接数据库的时候,须要引入数据库的驱动纸盒,相连接相同的数据库,须要引入相同的纸盒。

而我们在撰写java应用程序时,基本上不必太关心这些机内的类。

我们只须要用jdbc的USB展开编程就可以了,也就是java.sql包javax.sql机内的USB。

这些USB的对象都就是通过其他对象去赢得的,我们不须要通过new去建立它们。

而这些对象的具体内容同时实现都就是在驱动程序中同时实现的,就是驱动程序类的对象。

jdbc数据库

jdbc数据库

1引言Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

JDBC也是Sun Microsystems的商标。

我们通常说的JDBC 是面向关系型数据库的。

2程序类型和API概述程序类型编辑JDBC驱动程序共分四种类型:类型1JDBC-ODBC桥这种类型的驱动把所有JDBC的调用传递给ODBC,再让后者调用数据库本地驱动代码(也就是数据库厂商提供的数据库操作二进制代码库,例如Oracle中的oci.dll)。

类型2本地API驱动这种类型的驱动通过客户端加载数据库厂商提供的本地代码库(C/C++等)来访问数据库,而在驱动程序中则包含了Java代码。

类型3网络协议驱动这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,后者在将其请求转化为所需的具体API调用。

类型4本地协议驱动这种类型的驱动使用Socket,直接在客户端和数据库间通信。

JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql 包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。

Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。

Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。

可以产生用以执行SQL 的Statement。

Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。

JDBC驱动程序

JDBC驱动程序

谢谢观看
分类
的选择
分类
JDBC-ODBC桥驱动程序(JDBC-ODBC Bridge Driver)
此类驱动程序由JDBC-ODBC桥和一个ODBC驱动程序组成。其工作原理是,通过一段本地C代码将JDBC调用转 化成ODBC调用。这一类型必须在本地计算机上先安装好ODBC驱动程序,然后通过JDBC-ODBCBridge的转换,将 Java程序中使用的JDBCAPI访问指令转化成ODBCAPI指令,进而通过ODBC驱动程序调用本地数据库驱动代码完成 对数据库的访问。
第二种方式具有开放性,其利用多层结构,上层用Java实现,支持多数据库,下层为本地代码(包括一些二 进制代码和一个轻量的Java库),加快了执行速度,提高了数据库访问效率。然而,这种方式也有许多缺点:首先, 第二类驱动程序也必须事先安装其他附加的软件(络库),没有使用纯Java的API,很多时候,在体系结构上不能 与大型主机的数据源兼容,即使做到了兼容,效果也是不尽人意。
这四类驱动程序中,第一类最节省投资。由于利用了已有的ODBC驱动程序,开发人员不必做额外的开发工作。 但是,这种方式的缺点是比较突出的:首先,这种方式由于需要首先把JD-BC操作翻译成对应的ODBC调用,然后这 些调用又被传送给ODBC驱动程序,最后才执行数据库的相关操作,所以性能受到影响,执行效率比较低,不适合 对大数据量存取的应用。其次,由于事先需要安装其他附加的软件(ODBC驱动),有损Java数据库程序的兼容性, 不具备跨平台性,不适合基于Internet/Intranet的应用。再次,这类驱动程序不支持完整的Java命令集,而只 局限于ODBC驱动程序的功能。由于以上的缺点,桥接驱动程序用于已经在ODBC技术上投资的情形,例如已经投资 了Windows应用服务器。Sun建议第一类驱动程序只用于原型开发,而不要用于正式的运行环境。

JDBC连接四大类数据库五种方法

JDBC连接四大类数据库五种方法

使用JDBC连接四大类数据库五种方法ConnectDatabases.ja vaJDBC 2010-06-07 16:54:28 阅读67 评论0字号:大中小订阅/** Created on 2003-7-13* 此文件主要用来说明连接常用的五种(ODBC算一个,可以连接任意数据库)数据库的方法* 针对每一种方法有一个带有Connection返回值的方法* 主要有如下方法:* 1。

getJdbcOdbcConnecion* 2。

getOracleConnection* 3。

getSQLServerConnection* 4。

getMySQLConnection* 5。

getDB2Connection* 6。

getCloudScapeConnection*/package jdbc;import java.sql.DriverManager;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;import sun.jdbc.odbc.JdbcOdbcDriver;//导入ORACLE的JDBC驱动程序import oracle.jdbc.driver.OracleDriver;//导入SQL Server的JDBC驱动程序import com.microsoft.jdbc.sqlserver.SQLServerDriver; //导入MySQL的JDBC驱动程序//import org.gjt.mm.mysql.Driver;import com.mysql.jdbc.Driver;//导入DB2的JDBC驱动程序类//import COM.ibm.db2.jdbc.app.DB2Driver;import .DB2Driver;//导入CloudScape的JDBC驱动程序import COM.cloudscape.core.RmiJdbcDriver;public class ConnectDatabases{public String url=null;public String username=null;public String password=null;public void setURL(String url){this.url=url;}//end method setURLpublic void setUserName(String username){ername=username;}//end method setUserNamepublic void setPassword(String password){this.password=password;}//end method setUserNameConnection con=null;//下面的方法为通过JDBC-ODBC桥连接数据库的方法//它适用于所有的数据库。

JDBC驱动程序的四种方式

JDBC驱动程序的四种方式

JDBC驱动程序的四种⽅式Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥、本地API驱动、⽹络协议驱动和纯JAVA驱动。

第⼀种驱动程序:JDBC-ODBC 桥JDBC-ODBC 桥是⼀个JDBC 驱动,它把JDBC调⽤转换为ODBC 操作。

这个桥使得所有⽀持ODBC 的DBMS 都可以和Java 应⽤程序交互。

JDBC-ODBC 桥接⼝作为⼀套共享动态C 库提供的。

ODBC 提供了客户⽅⼀套适合于客户⽅操作系统的库和驱动。

这些ODBC 调⽤都是C 调⽤,⽽且客户必须带有ODBC 驱动和相关的客户⽅库的本地副本。

这限制了它在基于Web 的应⽤程序中的使⽤第⼆种本地的API驱动程序本地API 驱动程序( native-API partly-Java driver ),因为它们直接将JDBC API 翻译成具体数据库的API。

将JDBC调⽤转换为对数据库的客户端API 的调⽤。

第三种⽹络驱动程序(net protocol all-Java driver (JDBC Proxy)),它将JDBC API 转换成独⽴于数据库的协议。

JDBC 驱动程序并没有直接和数据库进⾏通讯;它和⼀个中间件服务器通讯,然后这个中间件服务器和数据库进⾏通讯。

这种额外的中间层次提供了灵活性:可以⽤相同的代码访问不同的数据库,因为中间件服务器隐藏了Java 应⽤程序的细节。

第四种纯Java 驱动程序(native protocol all-Java driver ),它直接与数据库进⾏通讯。

很多程序员认为这是最好的驱动程序,因为它通常提供了最佳的性能,并允许开发者利⽤特定数据库的功能。

当然,这种紧密耦合会影响灵活性,特别是如果您需要改变应⽤程序中的底层数据库时。

这种驱动程序通常⾼度分布的应⽤程序。

JDBC驱动程序分类

JDBC驱动程序分类

JDBC驱动程序分类JDBC驱动程序分类JDBC驱动程序:各个数据库⼚商根据JDBC的规范制作的 JDBC 实现类的类库JDBC驱动程序总共有四种类型: 第⼀类:JDBC-ODBC桥。

第⼆类:部分本地API部分Java的驱动程序。

第三类:JDBC⽹络纯Java驱动程序。

第四类:本地协议的纯 Java 驱动程序。

第三、四两类都是纯Java的驱动程序,因此,对于Java开发者来说,它们在性能、可移植性、功能等⽅⾯都有优势。

ODBC早期对数据库的访问,都是调⽤数据库⼚商提供的专有的 API。

为了在Windows 平台下提供统⼀的访问⽅式,微软推出了ODBC(Open Database Connectivity,开放式数据库连接),并提供了 ODBC API,使⽤者在程序中只需要调⽤ ODBC API,由 ODBC 驱动程序将调⽤转换成为对特定的数据库的调⽤请求⼀个基于ODBC的应⽤程序对数据库的操作不依赖任何DBMS(database manager system),不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。

也就是说,不论是FoxPro、Access , MYSQL还是Oracle数据库,均可⽤ODBC API进⾏访问。

由此可见,ODBC的最⼤优点是能以统⼀的⽅式处理所有的数据库。

JDBC-ODBC桥JDBC-ODBC 桥本⾝也是⼀个驱动,利⽤这个驱动,可以使⽤ JDBC-API 通过ODBC 去访问数据库。

这种机制实际上是把标准的JDBC 调⽤转换成相应的 ODBC 调⽤,并通过 ODBC 访问数据库因为需要通过多层调⽤,所以利⽤ JDBC-ODBC 桥访问数据库的效率较低在 JDK 中,提供了 JDBC-ODBC 桥的实现类(sun.jdbc.odbc.JdbcOdbcDriver)部分本地API部分Java的驱动程序这种类型的 JDBC 驱动程序使⽤ Java 编写,它调⽤数据库⼚商提供的本地 API通过这种类型的 JDBC 驱动程序访问数据库减少了 ODBC 的调⽤环节,提⾼了数据库访问的效率在这种⽅式下需要在客户的机器上安装本地 JDBC 驱动程序和特定⼚商的本地 APIJDBC⽹络纯Java驱动程序这种驱动利⽤中间件的应⽤服务器来访问数据库。

JDBC面试题

JDBC面试题

JDBC面试题jdbc常见面试题集锦一、概念1.什么是jdbc,在什么时候会用到它?JDBC的全称是java数据库连接,即java数据库连接。

我们可以用它来操作关系数据库。

Java SQL包中的JDBC接口和相关类,以及SQL包中的javax。

我们可以使用它连接到数据库,执行SQL查询,存储过程,并处理返回的结果。

JDBC接口使Java程序和JDBC 驱动程序松散耦合,更容易在不同的数据库之间切换。

2.有哪些不同类型的jdbc驱动?JDBC驱动程序有四种类型。

与数据库交互的Java程序分为两部分。

其中一部分是JDBCAPI,实际的驱动程序是另一部分。

(1) JDBC ODBC bridgeplusodbcdriver(类型1):它使用ODBC驱动程序连接到数据库。

需要安装ODBC才能连接到数据库。

因此,这种方法基本上被消除了。

(2)原生API部分支持Java技术的驱动程序(类型2):该驱动程序将JDBC调用调整为对数据库本地接口的调用。

(3)数据库中间件的Purejava驱动程序(类型3):该驱动程序将JDBC调用转发给中间件服务器,后者连接到不同的数据库。

使用这种类型的驱动程序需要部署中间件服务器。

这种方法会增加额外的网络调用,导致性能低下,因此很少使用。

(4)直接到数据库purejava驱动程序(类型4):该驱动程序将JDBC转换为数据库使用的网络协议。

该方案最简单,适合通过网络连接到数据库。

但是,如果使用此方法,则需要根据不同的数据库选择特定的驱动程序。

例如,ojdbc是Oracle开发的Oracle数据库的驱动程序,MySQL connector/J是MySQL数据库的驱动程序。

3.jdbc是如何实现java程序和jdbc驱动的松耦合的?JDBCAPI使用java反射机制来实现java程序和JDBC驱动程序之间的松耦合。

只看一个简单的JDBC示例,您会发现所有操作都是通过JDBC接口完成的,驱动程序只通过类完成,只有在加载forname反射机制时才会出现。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以上对四种类型的JDBC驱动做了一个说明.那么它们适合那种类型的应用开发呢?
JDBC-ODBC桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解JDBC编程也较适用. 对于那些需要大数据量操作的应用程序则应该考虑2,3,4型驱动.在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java.所以3,4型驱动也可以作为考虑对象. 至于基于internet方面的应用就只有考虑3,4型驱动了. 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器.所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用. 4型驱动则适合那些连接单一数据库的工作组应用。
JDBC驱动类型三、网络协议驱动
这种驱动实际上是根据我们熟悉的三层结构建立的. JDBC先把对数局库的访问请求传递给网 络上的中间件服务器. 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器.如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 JDBC驱动程序作为访问数据库的方法. 网络协议驱动---------中间件服务器------------数据库Server
Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥、本地API驱动、网络协议驱动和本地协议驱动。
JDBC驱动类型一、JDBC-ODBC桥
JDBC-ODBC 桥 是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码.( 本地数据库驱动代码是指 由数据库厂商提供的数据库操作二进制代码库,例如在oracle for windows中就是oci dll 文 件)
由于这种驱动是基于server的.所以,它不需要在客户端加载数据库厂商提供的代码库.而且 他在执行效率和可升级性方面是比较好的.因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中. 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好.
只要本地机装有相关的ODBC驱动那么采用JDBC-ODBC桥几乎可以访问所有的数据库,JDBC- ODBC方法对于客户端已经具备ODBC driver的应用还是可行的.
但是,由于JDBC-ODBC先调用 ODBC再由ODBC去调用本地数据库接口访问数据库.所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的.而且,这种方法要求客户端必须安装ODBC 驱动,所以对于基于 internet ,intranet的应用也是不合适的.因为,你不可能要求所有客户都能找到ODBC driver.
JDBC驱动类型四、本地符合相关数据库系统规范的请求.由于4型驱动写的应用可 以直接和数据库服务器通讯.这种类型的驱动完全由java实现,因此实现了平台独立性. 本地协议驱动---------数据库Server
由于这种驱动不需要先把JDBC的调用传给ODBC或本地数据库接口或者是中间层服务器.所 以它的执行效率是非常高的.而且,它根本不需要在客户端或服务器端装载任何的软件或驱动. 这种驱动程序可以动态的被下载.但是对于不同的数据库需要下载不同的驱动程序.
JDBC驱动类型二、本地API驱动
本地API驱动直接把JDBC调用转变为数据库的标准调用再去访问数据库.
这种方法需要本地 数据库驱动代码. 本地API驱动 | 厂商DB代码---------------数据库Server (图二) 这种驱动比起JDBC-ODBC桥执行效率大大提高了.但是,它仍然需要在客户端加载数据库厂商 提供的代码库.这样就不适合基于internet的应用.并且,他的执行效率比起3,4型的JDBC驱动 还是不够高.
相关文档
最新文档