




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
5.1JDBC概述JDBC(JavaDataBaseConnection)是Java數據庫訪問API的統稱,主要完成以下功能:與一個數據庫建立連接。向數據庫發(fā)送SQL語句。處理數據庫返回的結果。5.1JDBC概述JDBC(JavaDataBaseCJDBCAPI在java.sql包中主要提供了以下接口JDBCAPI在java.sql包中主要提供了以下接口JDBC的結構JDBC有兩種接口,分別是面向開發(fā)人員的JDBCAPI和面向低層的JDBCDriverAPIJDBCAPI是一系列的接口,它使得應用程序能夠進行數據庫聯接,執(zhí)行SQL語句,并且得到返回結果。JDBC的結構JDBC有兩種接口,分別是面向開發(fā)人員的JDBJDBC的結構java.sql.DriverManager用來裝載驅動程序,并且為創(chuàng)建新的數據庫連接提供支持。java.sql.Connection完成對某一指定數據庫的連接。java.sql.Statement在一個給定的連接中作為SQL執(zhí)行聲明的容器,它包含了兩個重要的子類型。java.sql.PreparedSatement用于執(zhí)行預編譯的sql聲明java.sql.CallableStatement用于執(zhí)行數據庫中存儲過程的調用java.sql.ResultSet對于給定聲明取得結果的途徑JDBC的結構java.sql.DriverManager用JDBC接口之間的關系JDBC接口之間的關系5.2JDBCAPI的應用
1、訪問數據庫的基礎2、JDBC應用實例3、ResultSet的高級應用5.2JDBCAPI的應用
1、訪問數據庫的基礎訪問數據庫的步驟1.加載驅動程序2.連接數據庫3.執(zhí)行SQL語句4.通過ResultSet獲取select語句執(zhí)行的結果并處理Class.forName()方法DriverManager.getConnection()方法通過Statement執(zhí)行(select、insert、update和delete)通過ResultSet獲取select語句執(zhí)行的結果并處理訪問數據庫的步驟1.加載驅動程序2.連接數據庫3.執(zhí)行SQLStatement的使用
創(chuàng)建:connection.createStatement([…])執(zhí)行select查詢語句:statement.executeQuery(“查詢語句")執(zhí)行insert、update、delete等更新語句:statement.executeUpdate(“更新語句”)如executeUpdate("insertintoMyFriend(name,age,qq)values(‘"+name+"',"+age+",'"+qq+"')")name=“abc”,age=20,qq=“1234”時執(zhí)行如下SQL語句insertintoMyFriend(name,age,qq)values('abc',20,'1234')Statement的使用
創(chuàng)建:connection.creResultSet的使用
創(chuàng)建:executeQuery("SQL語句")定位記錄:next()方法訪問數據:getXXX(int)或getXXX(String)其中XXX為一數據類型名稱,int為列編號(從1開始編號),String為列名。如getInt(2),getString("name")對照INT、INTEGER getInt()TINYINT、SMALLINT getShort()BIGINT getLong()DATE getDate()CHAR、VARCHAR getString()FLOAT getFloat()ResultSet的使用
創(chuàng)建:executeQuery("JAVA訪問數據庫示例1讀入ACCESS數據庫的內容數據庫LIB.mdb表userJAVA訪問數據庫示例1讀入ACCESS數據庫的內容JDBC-ODBC
方法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");while(rs.next()){System.out.print(rs.getInt("ID")+"\t");System.out.print(rs.getString(2)+"\t");System.out.print(rs.getString(3)+"\t");System.out.print(rs.getInt(4)+"\t");System.out.print(rs.getInt(5)+"\t");System.out.println(rs.getDate(6));}rs.close();sql.close();con.close();建立ODBC-名稱為ttJDBC-ODBC
方法
Class.forName("su多種方法訪問數據庫通過JSP訪問數據庫通過Servlet訪問數據庫通過JavaBean訪問多種方法訪問數據庫通過JSP訪問數據庫JSP
訪問數據庫<%@pageimport="java.sql.*"%><h2>JDBC實例:通過JSP訪問數據庫</h2><hr><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){%>
<%}//if結束%>jsp.jspJSP
訪問數據庫<%@pageimport="javaJSP
訪問數據庫if(rs.next()){%><tableborder=1><tr><th>序號</th><th>姓名</th><th>電話</th><th>年齡</th><th>QQ</th><th>日期</th></tr><%do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");out.println("<td>"+rs.getString(2)+"</td>");out.println("<td>"+rs.getString(3)+"</td>");out.println("<td>"+rs.getString(4)+"</td>");out.println("<td>"+rs.getString(5)+"</td>");out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());%></table>jsp.jspJSP
訪問數據庫if(rs.next()){%>jspServlet
訪問數據庫protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();out.println("<h2>JDBC實例:通過Servlet訪問數據庫</h2><hr>");try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=(Statement)con.createStatement();
ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){}//if結束
}catch(Exceptione){out.println(e);}}Servlet.javaServlet
訪問數據庫protectedvoiddServlet
訪問數據庫out.println("<tableborder=1>");out.println("<tr><th>序號</th><th>姓名</th>");out.println("<th>電話</th><th>年齡</th>");out.println("<th>QQ</th><th>日期</th></tr>");do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");out.println("<td>"+rs.getString(2)+"</td>");out.println("<td>"+rs.getString(3)+"</td>");out.println("<td>"+rs.getString(4)+"</td>");out.println("<td>"+rs.getString(5)+"</td>");out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());out.println("</table>");Servlet.javaServlet
訪問數據庫ou通過JavaBean訪問packagemybean;importjava.sql.*;publicclassDBConnection{privateConnectionconn;publicvoidinit(StringclassName,StringURL){try{Class.forName(className);conn=DriverManager.getConnection(URL);}catch(Exceptione){System.out.println(e);}}publicConnectiongetConnection(){returnconn;}}DBConnection.java通過JavaBean訪問packagemybean;DB通過JavaBean訪問<h2>JDBC實例:通過JavaBean訪問數據庫</h2><hr><jsp:useBeanid="dbcon"class="mybean.DBConnection"/><%dbcon.init("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:tt");Connectioncon=dbcon.getConnection();Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){%><tableborder=1><tr><th>序號</th><th>姓名</th><th>電話</th><th>年齡</th><th>QQ</th><th>日期</th></tr><%do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");……out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());%></table><%}//if結束
%>JavaBean.JSP通過JavaBean訪問<h2>JDBC實例:通過Jav可滾動的ResultSet通過createStatement(int,int)創(chuàng)建Statement時可以指定第一個參數指定游標類型可為下面的值,以便支持可滾動的記錄集ResultSet.TYPE_FORWARD_ONLY:默認的cursor類型,僅僅支持向前forward,不支持backforward,random,last,first操作,類似單向鏈表。不可滾動的記錄集,數據庫發(fā)生變化時不可見。是效率最高最快的cursor類型ResultSet.TYPE_SCROLL_INSENSITIVE:支持backforward,random,last,first操作,對其它數據session對選擇數據做出的更改是不敏感,不可見的??蓾L動的記錄集,數據庫的變化不可見ResultSet.TYPE_SCROLL_SENSITIVE:支持backforward,random,last,first操作,對其它數據session對選擇數據做出的更改是敏感,可見的??蓾L動的記錄集,數據庫的變化可見。移動記錄指針的方法包括next()、last()、previous()、first()等等??蓾L動的ResultSet通過createStatement游標類型總結1TYPE_FORWARD_ONLY通常是效率最高最快的cursor類型,也是最常用的選擇。
2TYPE_SCROLL_INSENSITIVE需要在jvm中cache所有fetch到的記錄實體,在大量記錄集返回時慎用。3TYPE_SCROLL_SENSITIVE在jvm中cache所有fetch到的記錄rowid,需要進行二次查詢,效率最低,開銷最大游標類型總結1TYPE_FORWARD_ONLY通常是效率最可更新的ResultSet通過createStatement(int,int)創(chuàng)建Statement時可以指定第二個參數為下面的值,以便支持可更新的記錄集ResultSet.CONCUR_READ_ONLY:記錄集不可更新ResultSet.CONCUR_UPDATABLE:記錄集可更新更新記錄的方法包括updateInt(int,int)、updateInt(String,int)、updateRow()、insertRow()、deleteRow()等等??筛碌腞esultSet通過createStatement其他類型數據庫的驅動程序MySQL驅動程序及URL:驅動:com.mysql.jdbc.Driverurl:jdbc:mysql://:3306/myfriendSQLServer驅動程序及URL:驅動:com.microsoft.sqlserver.jdbc.SQLServerDriverurl:jdbc:sqlserver://localhost:1433;databaseName=myfriend;user=MyUserName;password=*****;Oracle驅動程序及URL:驅動:oracle.jdbc.driver.OracleDriverurl:jdbc:oracle:thin@:myfriend其他類型數據庫的驅動程序MySQL驅動程序及URL:5.3連接池、DataSource及其應用1數據庫連接池傳統的JDBCAPI訪問數據庫時,需要頻繁建立數據庫連接Connection對象,導致系統的整體性能降低。數據庫連接池(ConnectionPool)是一種數據庫連接共享技術。數據庫連接池的基本思想是為數據庫連接建立一個“緩沖池”,即初始化連接池時在緩沖池中創(chuàng)建一定數量的數據庫連接。當應用組件需要獲取數據庫連接時,只需從緩沖池中取出一個,使用完畢之后再釋放到連接池中。數據庫連接池在初始化時創(chuàng)建一定數量的數據庫連接,其數量由最小數據庫連接數來設定。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這些連接。連接池的最大數據庫連接數量限定了連接池能建立的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。5.3連接池、DataSource及其應用1數據庫連接池連接池原理實驗
<%@pageimport="java.sql.*"contentType="text/html"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>連接池舉例</title></head><body><h1>數據庫連接池實例</h1><hr><li><ahref="useloops.jsp?loops=50000">使用連接池連接50000次</a><br><li><ahref="noloops.jsp?loops=50">不使用連接池連接50次</a></body></html>index.jsp連接池原理實驗
<%@pageimport="java.s連接池類
ConnectionPoolpackagedb;importjava.sql.*;*importjava.util.Vector;publicclassConnectionPool{privateVector<Connection>pool;privateintpoolSize=10;privatestaticConnectionPoolinstance=null;publicstaticConnectionPoolgetInstance(){if(instance==null){instance=newConnectionPool();}returninstance;}《1》連接池類
ConnectionPoolpackaged連接池類
ConnectionPoolprivateConnectionPool(){pool=newVector<Connection>(poolSize);Connectionconn=null;for(inti=0;i<poolSize;i++){try{Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection("jdbc:odbc:tt");pool.add(conn);}catch(Exceptione){e.printStackTrace();}}}《2》連接池類
ConnectionPoolpriva連接池類
ConnectionPoolpublicsynchronizedConnectiongetConnection(){if(pool.size()>0){Connectionconn=pool.get(0);pool.remove(conn);returnconn;}else{returnnull;}}publicsynchronizedvoidrelease(Connectionconn){pool.add(conn);}}《3》連接池類
ConnectionPoolpublics使用連接池
<body><%db.ConnectionPoolcp=db.ConnectionPool.getInstance();longstart=System.currentTimeMillis();intloops=Integer.parseInt(request.getParameter("loops"));;for(inti=0;i<loops;i++){Connectioncn=cp.getConnection();if(cn!=null){cp.release(cn);}}out.print("<h1>利用連接池連接"+loops+"次,用時"+(System.currentTimeMillis()-start)+"ms</h1>");%></body>useloops.jsp使用連接池<body>useloops.jsp不使用連接池
<%@pageimport="java.sql.*"contentType="text/html"pageEncoding="UTF-8"%>
<body><%longstart=System.currentTimeMillis();intloops=Integer.parseInt(request.getParameter("loops"));Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");for(inti=0;i<loops;i++){Connectioncn;try{cn=DriverManager.getConnection("jdbc:odbc:tt");}catch(Exceptione){System.out.println(e);break;}if(cn!=null){cn.close();}}out.print("<h1>不用連接池連接"+loops+"次,用時"+(System.currentTimeMillis()-start)+"ms</h1>");noloops.jsp不使用連接池<%@pageimport="java.sq實際時間對比實際時間對比J2EE中數據庫連接池的使用JDK只提供了數據庫連接池相關的DataSource接口,具體實現由數據庫驅動廠商或Web服務平臺器提供。DataSource接口對象負責具體的連接池管理。使用DataSource時,需要通過查詢JNDI(JavaNamingandDirectoruInterface)服務器得到DataSource,再利用該對象獲取Connection對象。應該在web應用的\META-INF\context.xml中定義數據源,并在web.xml中定義該數據源的參考。如果要為所有Web應用提供相同的數據源,可以利用\tomcat6.0\conf\server.xml定義數據源。J2EE中數據庫連接池的使用JDK只提供了數據庫連接池相關的Context.xml的數據源定義<Resourcename="jdbc/DataSourceExample"auth="Container"type="javax.sql.DataSource"username=“數據庫用戶名"password=“用戶密碼“driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"url="jdbc:odbc:tt"maxActive="8"maxIdle="4"maxWait="5000“/>Context.xml的數據源定義<Resourceweb.xml中的數據源定義<resource-ref><res-ref-name>jdbc/DataSourceExample</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>web.xml中的數據源定義<resource-ref>通過DataSource連接數據庫的關鍵代碼
InitialContextcontext=newInitialContext();DataSourcedataSource=(DataSource)context.lookup("數據源名稱");conn=dataSource.getConnection();…conn.close();通過DataSource連接數據庫的關鍵代碼
Initial通過DataSource訪問數據庫實例%@pageimport="java.sql.*,javax.naming.*,javax.sql.*"contentType="text/html"pageEncoding="UTF-8"%<body><h2>JDBC實例:通過DataSource訪問數據庫</h2><hr><%try{InitialContextcontext=newInitialContext();DataSourcedataSource=(DataSource)context.lookup("java:comp/env/jdbc/DataSourceExample");Connectionconn=dataSource.getConnection();Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select*fromuser");if(rs.next()){%><tableborder=1><tr><th>序號</th><th>姓名</th><th>電話</th><th>年齡</th><th>QQ</th><th>日期</th></tr><%do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");……….out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());%></table><%}//if結束
}catch(Exceptione){e.printStackTrace();}%></body>通過DataSource訪問數據庫實例%@pageimp5.1JDBC概述JDBC(JavaDataBaseConnection)是Java數據庫訪問API的統稱,主要完成以下功能:與一個數據庫建立連接。向數據庫發(fā)送SQL語句。處理數據庫返回的結果。5.1JDBC概述JDBC(JavaDataBaseCJDBCAPI在java.sql包中主要提供了以下接口JDBCAPI在java.sql包中主要提供了以下接口JDBC的結構JDBC有兩種接口,分別是面向開發(fā)人員的JDBCAPI和面向低層的JDBCDriverAPIJDBCAPI是一系列的接口,它使得應用程序能夠進行數據庫聯接,執(zhí)行SQL語句,并且得到返回結果。JDBC的結構JDBC有兩種接口,分別是面向開發(fā)人員的JDBJDBC的結構java.sql.DriverManager用來裝載驅動程序,并且為創(chuàng)建新的數據庫連接提供支持。java.sql.Connection完成對某一指定數據庫的連接。java.sql.Statement在一個給定的連接中作為SQL執(zhí)行聲明的容器,它包含了兩個重要的子類型。java.sql.PreparedSatement用于執(zhí)行預編譯的sql聲明java.sql.CallableStatement用于執(zhí)行數據庫中存儲過程的調用java.sql.ResultSet對于給定聲明取得結果的途徑JDBC的結構java.sql.DriverManager用JDBC接口之間的關系JDBC接口之間的關系5.2JDBCAPI的應用
1、訪問數據庫的基礎2、JDBC應用實例3、ResultSet的高級應用5.2JDBCAPI的應用
1、訪問數據庫的基礎訪問數據庫的步驟1.加載驅動程序2.連接數據庫3.執(zhí)行SQL語句4.通過ResultSet獲取select語句執(zhí)行的結果并處理Class.forName()方法DriverManager.getConnection()方法通過Statement執(zhí)行(select、insert、update和delete)通過ResultSet獲取select語句執(zhí)行的結果并處理訪問數據庫的步驟1.加載驅動程序2.連接數據庫3.執(zhí)行SQLStatement的使用
創(chuàng)建:connection.createStatement([…])執(zhí)行select查詢語句:statement.executeQuery(“查詢語句")執(zhí)行insert、update、delete等更新語句:statement.executeUpdate(“更新語句”)如executeUpdate("insertintoMyFriend(name,age,qq)values(‘"+name+"',"+age+",'"+qq+"')")name=“abc”,age=20,qq=“1234”時執(zhí)行如下SQL語句insertintoMyFriend(name,age,qq)values('abc',20,'1234')Statement的使用
創(chuàng)建:connection.creResultSet的使用
創(chuàng)建:executeQuery("SQL語句")定位記錄:next()方法訪問數據:getXXX(int)或getXXX(String)其中XXX為一數據類型名稱,int為列編號(從1開始編號),String為列名。如getInt(2),getString("name")對照INT、INTEGER getInt()TINYINT、SMALLINT getShort()BIGINT getLong()DATE getDate()CHAR、VARCHAR getString()FLOAT getFloat()ResultSet的使用
創(chuàng)建:executeQuery("JAVA訪問數據庫示例1讀入ACCESS數據庫的內容數據庫LIB.mdb表userJAVA訪問數據庫示例1讀入ACCESS數據庫的內容JDBC-ODBC
方法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");while(rs.next()){System.out.print(rs.getInt("ID")+"\t");System.out.print(rs.getString(2)+"\t");System.out.print(rs.getString(3)+"\t");System.out.print(rs.getInt(4)+"\t");System.out.print(rs.getInt(5)+"\t");System.out.println(rs.getDate(6));}rs.close();sql.close();con.close();建立ODBC-名稱為ttJDBC-ODBC
方法
Class.forName("su多種方法訪問數據庫通過JSP訪問數據庫通過Servlet訪問數據庫通過JavaBean訪問多種方法訪問數據庫通過JSP訪問數據庫JSP
訪問數據庫<%@pageimport="java.sql.*"%><h2>JDBC實例:通過JSP訪問數據庫</h2><hr><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){%>
<%}//if結束%>jsp.jspJSP
訪問數據庫<%@pageimport="javaJSP
訪問數據庫if(rs.next()){%><tableborder=1><tr><th>序號</th><th>姓名</th><th>電話</th><th>年齡</th><th>QQ</th><th>日期</th></tr><%do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");out.println("<td>"+rs.getString(2)+"</td>");out.println("<td>"+rs.getString(3)+"</td>");out.println("<td>"+rs.getString(4)+"</td>");out.println("<td>"+rs.getString(5)+"</td>");out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());%></table>jsp.jspJSP
訪問數據庫if(rs.next()){%>jspServlet
訪問數據庫protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gb2312");PrintWriterout=response.getWriter();out.println("<h2>JDBC實例:通過Servlet訪問數據庫</h2><hr>");try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConnection("jdbc:odbc:tt");Statementsql=(Statement)con.createStatement();
ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){}//if結束
}catch(Exceptione){out.println(e);}}Servlet.javaServlet
訪問數據庫protectedvoiddServlet
訪問數據庫out.println("<tableborder=1>");out.println("<tr><th>序號</th><th>姓名</th>");out.println("<th>電話</th><th>年齡</th>");out.println("<th>QQ</th><th>日期</th></tr>");do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");out.println("<td>"+rs.getString(2)+"</td>");out.println("<td>"+rs.getString(3)+"</td>");out.println("<td>"+rs.getString(4)+"</td>");out.println("<td>"+rs.getString(5)+"</td>");out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());out.println("</table>");Servlet.javaServlet
訪問數據庫ou通過JavaBean訪問packagemybean;importjava.sql.*;publicclassDBConnection{privateConnectionconn;publicvoidinit(StringclassName,StringURL){try{Class.forName(className);conn=DriverManager.getConnection(URL);}catch(Exceptione){System.out.println(e);}}publicConnectiongetConnection(){returnconn;}}DBConnection.java通過JavaBean訪問packagemybean;DB通過JavaBean訪問<h2>JDBC實例:通過JavaBean訪問數據庫</h2><hr><jsp:useBeanid="dbcon"class="mybean.DBConnection"/><%dbcon.init("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:tt");Connectioncon=dbcon.getConnection();Statementsql=con.createStatement();ResultSetrs=sql.executeQuery("select*fromuser");if(rs.next()){%><tableborder=1><tr><th>序號</th><th>姓名</th><th>電話</th><th>年齡</th><th>QQ</th><th>日期</th></tr><%do{out.println("<tr>");out.println("<td>"+rs.getString(1)+"</td>");……out.println("<td>"+rs.getString(6)+"</td>");out.println("</tr>");}while(rs.next());%></table><%}//if結束
%>JavaBean.JSP通過JavaBean訪問<h2>JDBC實例:通過Jav可滾動的ResultSet通過createStatement(int,int)創(chuàng)建Statement時可以指定第一個參數指定游標類型可為下面的值,以便支持可滾動的記錄集ResultSet.TYPE_FORWARD_ONLY:默認的cursor類型,僅僅支持向前forward,不支持backforward,random,last,first操作,類似單向鏈表。不可滾動的記錄集,數據庫發(fā)生變化時不可見。是效率最高最快的cursor類型ResultSet.TYPE_SCROLL_INSENSITIVE:支持backforward,random,last,first操作,對其它數據session對選擇數據做出的更改是不敏感,不可見的??蓾L動的記錄集,數據庫的變化不可見ResultSet.TYPE_SCROLL_SENSITIVE:支持backforward,random,last,first操作,對其它數據session對選擇數據做出的更改是敏感,可見的??蓾L動的記錄集,數據庫的變化可見。移動記錄指針的方法包括next()、last()、previous()、first()等等??蓾L動的ResultSet通過createStatement游標類型總結1TYPE_FORWARD_ONLY通常是效率最高最快的cursor類型,也是最常用的選擇。
2TYPE_SCROLL_INSENSITIVE需要在jvm中cache所有fetch到的記錄實體,在大量記錄集返回時慎用。3TYPE_SCROLL_SENSITIVE在jvm中cache所有fetch到的記錄rowid,需要進行二次查詢,效率最低,開銷最大游標類型總結1TYPE_FORWARD_ONLY通常是效率最可更新的ResultSet通過createStatement(int,int)創(chuàng)建Statement時可以指定第二個參數為下面的值,以便支持可更新的記錄集ResultSet.CONCUR_READ_ONLY:記錄集不可更新ResultSet.CONCUR_UPDATABLE:記錄集可更新更新記錄的方法包括updateInt(int,int)、updateInt(String,int)、updateRow()、insertRow()、deleteRow()等等??筛碌腞esultSet通過createStatement其他類型數據庫的驅動程序MySQL驅動程序及URL:驅動:com.mysql.jdbc.Driverurl:jdbc:mysql://:3306/myfriendSQLServer驅動程序及URL:驅動:com.microsoft.sqlserver.jdbc.SQLServerDriverurl:jdbc:sqlserver://localhost:1433;databaseName=myfriend;user=MyUserName;password=*****;Oracle驅動程序及URL:驅動:oracle.jdbc.driver.OracleDriverurl:jdbc:oracle:thin@:myfriend其他類型數據庫的驅動程序MySQL驅動程序及URL:5.3連接池、DataSource及其應用1數據庫連接池傳統的JDBCAPI訪問數據庫時,需要頻繁建立數據庫連接Connection對象,導致系統的整體性能降低。數據庫連接池(ConnectionPool)是一種數據庫連接共享技術。數據庫連接池的基本思想是為數據庫連接建立一個“緩沖池”,即初始化連接池時在緩沖池中創(chuàng)建一定數量的數據庫連接。當應用組件需要獲取數據庫連接時,只需從緩沖池中取出一個,使用完畢之后再釋放到連接池中。數據庫連接池在初始化時創(chuàng)建一定數量的數據庫連接,其數量由最小數據庫連接數來設定。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這些連接。連接池的最大數據庫連接數量限定了連接池能建立的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。5.3連接池、DataSource及其應用1數據庫連接池連接池原理實驗
<%@pageimport="java.sql.*"contentType="text/html"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>連接池舉例</title></head><body><h1>數據庫連接池實例</h1><hr><li><ahref="useloops.jsp?loops=50000">使用連接池連接50000次</a><br><li><ahref="noloops.jsp?loops=50">不使用連接池連接50次</a></body></html>index.jsp連接池原理實驗
<%@pageimport="java.s連接池類
ConnectionPoolpackagedb;importjava.sql.*;*importjava.util.Vector;publicclassConnectionPool{privateVector<Connection>pool;privateintpoolSize=10;privatestaticConnectionPoolinstance=null;publicstaticConnectionPoolgetInstance(){if(instance==null){instance=newConnectionPool();}returninstance;}《1》連接池類
ConnectionPoolpackaged連接池類
ConnectionPoolprivateConnectionPool(){pool=newVector<Connection>(poolSize);Connectionconn=null;for(inti=0;i<poolSize;i++){try{Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection("jdbc:odbc:tt");pool.add(conn);}catch(Exceptione){e.printStackTrace();}}}《2》連接池類
ConnectionPoolpriva連接池類
ConnectionPoolpublicsynchronizedConnectiongetConnection(){if(pool.size()>0){Connectionconn=pool.get(0);pool.remove(conn);returnconn;}else{returnnull;}}publicsynchronizedvoidrelease(Connectionconn){pool.add(conn);}}《3》連接池類
ConnectionPoolpublics使用連接池
<body><%db.ConnectionPoolcp=db.ConnectionPool.getInstance();longstart=System.currentTimeMillis();intloops=Integer.parseInt(request.getParameter("loops"));;for(inti=0;i<loops;i++){Connectioncn=cp.getConnection();if(cn!=null){cp.release(cn);}}out.print("<h1>利用連接池連接"+loops+"次,用時"+(System.currentTimeMillis()-start)+"ms</h1>");%></body>useloops.jsp使用連接池<body>useloops.jsp不使用連接池
<%@pageimport="java.sql.*"contentType="text/html"pageEncoding="UTF-8"%>
<body><%longstart=System.currentTimeMillis();intloops=Integer.parseInt(request.getParameter("loops"));Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度行政合同在城市規(guī)劃與建設中的執(zhí)行要點
- 與兼職會計合同范例
- 債務抵押使用合同范例
- 買賣設備居間合同范例
- 上海家具運輸合同范例
- 代理紅酒合同范例
- 倉儲貨架合同范例
- 促銷費詳細合同范例
- 嘉興浙江嘉興嘉善縣中心血庫招聘合同制工作人員筆試歷年參考題庫附帶答案詳解
- 保姆使用合同范例
- 2025中國遠洋海運集團校園招聘1484人筆試參考題庫附帶答案詳解
- 2025年安徽電氣工程職業(yè)技術學院單招職業(yè)傾向性測試題庫學生專用
- 2025年皖西衛(wèi)生職業(yè)學院單招職業(yè)技能測試題庫審定版
- unctad -全球投資趨勢監(jiān)測 第 48 期 Global Investment Trends Monitor,No. 48
- 2025年福建省高職單招計算機類職業(yè)技能測試題及答案(供參考)
- 電鍍園區(qū)現場管理
- 七年級歷史下冊 第一單元 綜合測試卷(人教福建版 2025年春)
- 學校在鑄牢中華民族共同體意識教育工作情況報告
- 2025年安徽淮北市建投控股集團招聘筆試參考題庫含答案解析
- 《孤獨的小螃蟹》導讀課件
- 城市軌道交通行車組織 課件 項目3 車站行車作業(yè)組織
評論
0/150
提交評論