>>http://www.cnblogs.com/xiohao/p/3507483.htmlhtml
>>http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.htmljava
>>http://www.cnblogs.com/lee/archive/2007/08/25/869656.htmlmysql
1)鏈接Oracle 8/8i/9i/10g/11g(thin模式) Class.forName("oracle.JDBC.driver.OracleDriver").newInstance(); String url="JDBC:oracle:thin:@localhost:1521:orcl" //orcl爲Oracle數據庫的SID String user="test"; String password="test"; Connection con=DriverManager.getConnection(url,user,password); 2)鏈接DB2數據庫 Class.forName("com.ibm.db2.jcc.DB2Driver"); String url="JDBC:db2://localhost:5000/testDb"; String user="test"; String password="test"; Connection con=DriverManager.getConnection(url,user,password); 3)鏈接MySQL數據庫 Class.forName("com.mysql.jdbc.Driver"); String url="JDBC:mysql://localhost:8080/testDB"; String user="test"; String password="test"; Connection con=DriverManager.getConnection(url,user,password); 4)鏈接SQL Server2000數據庫 Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver"); String url="JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=testDb"; String user="test"; String password="test"; Connection con=DriverManager.getConnection(url,user,password); 5)鏈接PostgreSQL數據庫 Class.forName("org.postgresql.Driver"); String url="JDBC:postgresql://localhost/testDb"; String user="test"; String password="test"; Connection con=DriverManager.getConnection(url,user,password); 6)鏈接Access數據庫 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="JDBC:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/testDb/mdb"); Connection conn=DriverManager.getConnection(url,"",""); 7鏈接Sybase數據庫 Class.forName("com.sybase.JDBC.SybDriver"); String url="JDBC:sybase:Tds:localhost:5007/testDb"; Properties pro=System.getProperties(); pro.put("user","userId"); pro.put("password","user_password"); Connection con=DriverManager.getConnection(url,pro); 8鏈接informix數據庫 Class.forName("com.informix.JDBC.ifxDriver"); String url="JDBC:informix-sqli:localhost:1533/testDb:INFORMIXSERVER=myserver"user=testUser;password=testpassword"; Connection con=DriverManager.getConnection(url);
JDBC鏈接數據庫 •建立一個以JDBC鏈接數據庫的程序,包含7個步驟: 1、加載JDBC驅動程序: 在鏈接數據庫以前,首先要加載想要鏈接的數據庫的驅動到JVM(Java虛擬機), 這經過java.lang.Class類的靜態方法forName(String className)實現。 例如: try{ //加載MySql的驅動類 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驅動程序類 ,加載驅動失敗!"); e.printStackTrace() ; } 成功加載後,會將Driver類的實例註冊到DriverManager類中。 2、提供JDBC鏈接的URL •鏈接URL定義了鏈接數據庫時的協議、子協議、數據源標識。 •書寫形式:協議:子協議:數據源標識 協議:在JDBC中老是以jdbc開始 子協議:是橋鏈接的驅動程序或是數據庫管理系統名稱。 數據源標識:標記找到數據庫來源的地址與鏈接端口。 例如:(MySql的鏈接URL) jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ; useUnicode=true:表示使用Unicode字符集。若是characterEncoding設置爲 gb2312或GBK,本參數必須設置爲true 。characterEncoding=gbk:字符編碼方式。 3、建立數據庫的鏈接 •要鏈接數據庫,須要向java.sql.DriverManager請求並得到Connection對象, 該對象就表明一個數據庫的鏈接。 •使用DriverManager的getConnectin(String url , String username , String password )方法傳入指定的欲鏈接的數據庫的路徑、數據庫的用戶名和 密碼來得到。 例如: //鏈接MySql數據庫,用戶名和密碼都是root String url = "jdbc:mysql://localhost:3306/test" ; String username = "root" ; String password = "root" ; try{ Connection con = DriverManager.getConnection(url , username , password ) ; }catch(SQLException se){ System.out.println("數據庫鏈接失敗!"); se.printStackTrace() ; } 4、建立一個Statement •要執行SQL語句,必須得到java.sql.Statement實例,Statement實例分爲如下3 種類型: 1、執行靜態SQL語句。一般經過Statement實例實現。 2、執行動態SQL語句。一般經過PreparedStatement實例實現。 3、執行數據庫存儲過程。一般經過CallableStatement實例實現。 具體的實現方式: Statement stmt = con.createStatement() ; PreparedStatement pstmt = con.prepareStatement(sql) ; CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ; 5、執行SQL語句 Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate 和execute 1、ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句 ,返回一個結果集(ResultSet)對象。 二、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或 DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等 3、execute(sqlString):用於執行返回多個結果集、多個更新計數或兩者組合的 語句。 具體實現的代碼: ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; int rows = stmt.executeUpdate("INSERT INTO ...") ; boolean flag = stmt.execute(String sql) ; 6、處理結果 兩種狀況: 1、執行更新返回的是本次操做影響到的記錄數。 2、執行查詢返回的結果是一個ResultSet對象。 • ResultSet包含符合SQL語句中條件的全部行,而且它經過一套get方法提供了對這些 行中數據的訪問。 • 使用結果集(ResultSet)對象的訪問方法獲取數據: while(rs.next()){ String name = rs.getString("name") ; String pass = rs.getString(1) ; // 此方法比較高效 } (列是從左到右編號的,而且從列1開始) 7、關閉JDBC對象 操做完成之後要把全部使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲 明順序相反: 1、關閉記錄集 2、關閉聲明 3、關閉鏈接對象 if(rs != null){ // 關閉記錄集 try{ rs.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() ; } }
jdbcsql
什麼是JDBC? Java語言訪問數據庫的一種規範,是一套API JDBC (Java Database Connectivity) API,即Java數據庫編程接口,是一組標準的Java語言中的接口和類,使用這些接口和類,Java客戶端程序能夠訪問各類不一樣類型的數據庫。好比創建數據庫鏈接、執行SQL語句進行數據的存取操做。 JDBC規範採用接口和實現分離的思想設計了Java數據庫編程的框架。接口包含在java.sql及javax.sql包中,其中java.sql屬於JavaSE,javax.sql屬於JavaEE。這些接口的實現類叫作數據庫驅動程序,由數據庫的廠商或其它的廠商或我的提供。 爲了使客戶端程序獨立於特定的數據庫驅動程序,JDBC規範建議開發者使用基於接口的編程方式,即儘可能使應用僅依賴java.sql及javax.sql中的接口和類。 JDBC驅動程序: 什麼是JDBC驅動程序? 這些是各個數據庫廠家根據JDBC的規範製做的JDBC實現類 JDBC驅動程序的四種類型: 1. 第一種類型的驅動程序的實現是經過將JDBC的調用所有委託給其它編程接口來實現的,好比ODBC。這種類型的驅動程序須要安裝本地代碼庫,即依賴於本地的程序,因此便攜性較差。好比JDBC-ODBC橋驅動程序 2. 第二種類型的驅動程序的實現是部分基於Java語言的。即該驅動程序一部分是用Java語言編寫,其它部分委託本地的數據庫的客戶端代碼來實現。同類型1的驅動同樣,該類型的驅動程序也依賴本地的程序,因此便攜性較差 3. 第三種類型的驅動程序的實現是所有基於JAVA語言的。該類型的驅動程序一般由某個中間件服務器提供,這樣客戶端程序可使用數據庫無關的協議和中間件服務器進行通訊,中間件服務器再將客戶端的JDBC調用轉發給數據庫進行處理 4. 第四種類型的驅動程序的實現是所有基於JAVA語言的。該類型的驅動程序中包含了特定數據庫的訪問協議,使得客戶端能夠直接和數據庫進行通訊 JDBC類結構: DriverManager Driver Driver Connection Connection Statement Statement Resultset Resultset DriverManager:這個是一個實現類,它是一個工廠類,用來生產Driver對象的 這個類的結構設計模式爲工廠方法 Driver:這是驅動程序對象的接口,它指向一個實實在在的數據庫驅動程序對象,那麼這個數據庫驅動程序對象是從哪裏來的呢? DriverManager工廠中有個方法:getDriver(String URL),經過這個方法能夠獲得驅動程序對象,這個方法是在各個數據庫廠商按JDBC規範設計的數據庫驅動程序包裏的類中靜態實現的,也就是在靜態塊中 Connection:這個接口能夠制向一個數據庫鏈接對象,那麼如何獲得這個鏈接對象呢? 是經過DriverManager工廠中的getConnection(String URL)方法獲得的 Statement:用於執行靜態的SQL語句的接口,經過Connection中的createStatement方法獲得的 Resultset:用於指向結果集對象的接口,結果集對象是經過Statement中的execute等方法獲得的 JAVA使用JDBC訪問數據庫的步驟: 1. 獲得數據庫驅動程序 2. 建立數據庫鏈接 3. 執行SQL語句 4. 獲得結果集 5. 對結果集作相應的處理(增,刪,改,查) 6. 關閉資源:這裏釋放的是DB中的資源 設置classpath: 1. 在java文件中起的包名必定要是工程基目錄下的子目錄,classpath:基目錄 2. .jar包,須要將這個.jar包的路徑包括這個文件的全名添加到classpath中來 Oracle鏈接字符串的書寫格式: 「oracle:jdbc:thin:@ip:1521: 數據庫名」,」數據庫用戶名」,」數據庫密碼」 簡單的例子: package moudule1.first; import java.sql.*; public class FirstJdbc { public static void main(String[] args) { String sql="select * from yuchen_user"; Connection con=null; Statement st=null; ResultSet rs=null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name", "scott","tiger"); st=con.createStatement(); rs=st.executeQuery(sql); while(rs.next()) { System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); } }catch(Exception e) { e.printStackTrace(); }finally { try { con.close(); }catch(Exception e) {} try { st.close(); }catch(Exception e) { } try { rs.close(); }catch(Exception e) { } } } } 經常使用數據庫的驅動程序及JDBC URL: Oracle數據庫: 驅動程序包名:ojdbc14.jar 驅動類的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jdbc:oracle:thin:@dbip:port:databasename 說明:驅動程序包名有可能會變 JDBC URL中黑色字體部分必須原封不動的保留,爲該驅動識別的URL格式。紅色字體部分須要根據數據庫的安裝狀況填寫。其中各個部分含義以下: dbip –爲數據庫服務器的IP地址,若是是本地可寫:localhost或127.0.0.1。 port –爲數據庫的監聽端口,須要看安裝時的配置,缺省爲1521。 databasename –爲數據庫的SID,一般爲全局數據庫的名字。 舉例若是要訪問本地的數據庫allandb,端口1521,那麼URL寫法以下: jdbc:oracle:thin:@localhost:1521:allandb 下載地址以下: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
SQL Server數據庫 驅動程序包名: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或127.0.0.1。 port –爲數據庫的監聽端口,須要看安裝時的配置,缺省爲1433。 databasename –數據庫的名字。 舉例若是要訪問本地的數據庫allandb,端口1433,那麼URL寫法以下: jdbc: microsoft: sqlserver:@localhost:1433; DatabaseName =allandb 下載地址:http://www.microsoft.com/downloads/details.aspx
MySQL數據庫 驅動程序包名:mysql-connector-java-3.1.11-bin.jar 驅動類的名字:com.mysql.jdbc.Driver JDBC URL:jdbc:mysql://dbip:port/databasename 說明:驅動程序包名有可能會變 JDBC URL中黑色字體部分必須原封不動的保留,爲該驅動識別的URL格式。紅色字體部須要根據數據庫的安裝狀況填寫。其中各個部分含義以下: dbip –爲數據庫服務器的IP地址,若是是本地可寫:localhost或127.0.0.1。 port –爲數據庫的監聽端口,須要看安裝時的配置,缺省爲3306。 databasename –數據庫的名字。 舉例若是要訪問本地的數據庫allandb,端口1433,那麼URL寫法以下: jdbc:mysql://localhost:3306/allandb 下載地址:http://dev.mysql.com/downloads/connector/j/
Access數據庫 驅動程序包名:該驅動程序包含在JavaSE中,不須要額外安裝。 驅動類的名字:sun.jdbc.odbc.JdbcOdbcDriver JDBC URL:jdbc:odbc:datasourcename 說明:該驅動只能工做在Windows系統中,首先須要在操做系統中創建一個能夠訪問Access數據庫的本地數據源(ODBC),若是名字爲allandb,那麼URL寫法以下: jdbc:odbc:allandb PreparedStatement接口: 預編譯的sql語句對象 做用: 解決了書寫sql語句時一些特殊的字符與sql保留字符衝突的問題,很是方便 /** *知識點: *PreparedStatement接口及方法的使用 *程序目標: *java文件: *PreparedInsert.java:鏈接數據庫,插入一條數據 *JdbcUtil.java:實現一個工具類,功能:1.鏈接數據庫 2.關閉資源 */ package moudule1.preparedstatement; import java.sql.*; import moudule1.com.*; public class PreparedInsert { public static void main(String[] args) { String sql="insert into yuchen_user (id,name) values (?,?)"; System.out.println(sql); Connection con=null; PreparedStatement ps=null; try{ con=JdbcUtil.getConnection(); ps=con.prepareStatement(sql); ps.setInt(1,2); ps.setString(2,"zhangsan"); ps.executeUpdate(); ps.setInt(1,3); ps.setString(2,"lisi"); ps.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,ps); } } } package moudule1.com; import java.sql.*; public class JdbcUtil{ public static Connection getConnection() throws Exception{ Class.forName("oracle.jdbc.driver.OracleDriver"); return DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name", "scott","tiger"); } public static void close(Connection con,Statement st){ close(con); close(st); } public static void close(Connection con,Statement st,ResultSet rs){ close(con,st); close(rs); } public static void close(Connection con){ try{ con.close(); }catch(Exception e){ } } public static void close(Statement st){ try{ st.close(); }catch(Exception e){ } } public static void close(ResultSet rs){ try{ rs.close(); }catch(Exception e){ } } } 數據庫的增刪改查的例子: /** *知識點: *JDBC+SQL+ORACLE *程序目標: *UserDao.java:實現了數據庫的增刪改查 *JdbcUtil.java:工具類,有連庫和關閉資源的方法 */ package moudule1.idus; import java.sql.*; import moudule1.com.*; public class UserDao{ private String sql; private Connection con; private Statement st; private ResultSet rs; public UserDao(){ sql=null; con=null; st=null; rs=null; } public void insert(){ sql="insert into yuchen_user (id,name) values("; sql+="4,'zhouwu')"; System.out.println(sql); try{ con=JdbcUtil.getConnection(); st=con.createStatement(); st.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,st); } } public void delete(){ sql="delete from yuchen_user where id=2"; System.out.println(sql); try{ con=JdbcUtil.getConnection(); st=con.createStatement(); st.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,st); } } public void update(){ sql="update yuchen_user set name='liumang' where id=1"; System.out.println(sql); try{ con=JdbcUtil.getConnection(); st=con.createStatement(); st.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,st); } } public void select(){ sql="select * from yuchen_user"; System.out.println(sql); try{ con=JdbcUtil.getConnection(); st=con.createStatement(); rs=st.executeQuery(sql); while(rs.next()){ System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,st,rs); } } public static void main(String[] args){ UserDao ud=new UserDao(); ud.select(); ud.insert(); ud.select(); ud.update(); ud.select(); ud.delete(); ud.select(); } } 一些經常使用的方法: /** *知識點: *execute方法,getResultSet(),getUpdateCount() *程序目標: *JdbcUtil.java:工具類,鏈接數據庫,關閉資源 *sqlExecutor.java:命令行參數輸入sql語句,並執行該語句 */ package moudule1.fangfa; import java.sql.*; import moudule1.com.*; public class sqlExecutor{ public static void main(String[] args){ Connection con=null; Statement st=null; try{ con=JdbcUtil.getConnection(); st=con.createStatement(); boolean str=st.execute(args[0]); if(str){ ResultSet rs=st.getResultSet(); while(rs.next()){ System.out.println(rs.getInt("id")+":"+rs.getString("name")); } rs.close(); }else{ int row=st.getUpdateCount(); System.out.println(row); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(con,st); } } } 2. 補充 JDBC鏈接MySQL 加載及註冊JDBC驅動程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver").newInstance(); JDBC URL 定義驅動程序與數據源之間的鏈接 標準語法: <protocol(主要通信協議)>:<subprotocol(次要通信協議,即驅動程序名稱)>:<data source identifier(數據源)> MySQL的JDBC URL格式: jdbc:mysql//[hostname][:port]/[dbname][?param1=value1][¶m2=value2]…. 示例:jdbc:mysql://localhost:3306/sample_db?user=root&password=your_password 常見參數: user 用戶名 password 密碼 autoReconnect 聯機失敗,是否從新聯機(true/false) maxReconnect 嘗試從新聯機次數 initialTimeout 嘗試從新聯機間隔 maxRows 傳回最大行數 useUnicode 是否使用Unicode字體編碼(true/false) characterEncoding 何種編碼(GB2312/UTF-8/…) relaxAutocommit 是否自動提交(true/false) capitalizeTypeNames 數據定義的名稱以大寫表示 創建鏈接對象 String url="jdbc:mysql://localhost:3306/sample_db?user=root&password=your_password"; Connection con = DriverManager.getConnection(url); 創建SQL陳述式對象(Statement Object) Statement stmt = con.createStatement(); 執行SQL語句 executeQuery() String query = "select * from test"; ResultSet rs=stmt.executeQuery(query); 結果集ResultSet while(rs.next()) {rs.getString(1);rs.getInt(2);} executeUpdate() String upd="insert into test (id,name) values(1001,xuzhaori)"; int con=stmt.executeUpdate(upd); execute() 示例: try{ } catch(SQLException sqle) { } finally { } Java類型和SQL類型 技術手冊P421 PreparedStatement(預編語句) PreparedStatement stmt = conn.prepareStatement("insert into test(id,name)values(?,?)"); stmt.setInt(1,id); stmt.setString(2,name); 注:一旦設定語句的參數值後,就能夠屢次執行改語句,直到調用clearParameters()方法將他清除爲止 CallableStatement(預儲程序)技術手冊P430 JDBC2.0使用 ResultSet對象中的光標上下自由移動 Statement stmt = con.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs=stmt.executeQuery("select * from test"); public Statement createStatement(int resultSetType,int resultSetConcuttency) throws SQLException resultSetType TYPE_FORWARD_ONLY 只能使用next()方法。 TYPE_SCROLL_SENSITIVE 能夠上下移動,能夠取得改變後的值。 TYPE_SCROLL_INSENSITIVE 能夠上下移動。 resultSetConcuttency CONCUR_READ_ONLY 只讀 CONCUR_UPDATABLE ResultSet對象能夠執行數據庫的新增、修改、和移除 直接使用ResultSet對象執行更新數據 新增數據 Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_PUDATABLE); ResultSet uprs=stmt.executeQuery("select * from test"); uprs.moveToInsertRow(); uprs.updateInt(1,1001); uprs.updateString(2,"許召日"); uprs.insertRow; 更新數據 Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_PUDATABLE); ResultSet uprs=stmt.executeQuery("select * from test"); uprs.last(); uprs.updateString("name","xuzhaori"); uprs.updateRow; 刪除數據 Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_PUDATABLE); ResultSet uprs=stmt.executeQuery("select * from test"); uprs.absolute(4); uprs.deleteRow(); 批處理 con.setAutoCommit(false); 關閉自動承認模式 Statement stmt=con.createStatement(); int[] rows; stmt.addBatch("insert into test values(1001,xuzhaori)"); stmt.addBatch("insert into test values(1002,xuyalin)"); rows=stmt.executeBatch(); con.commit(); 沒有任何錯誤,執行批處理stmt.executeBatch(); JNDI-數據源(Data Source)與鏈接池(Connection Pool) Tomcat的JDBC數據源設置 技術手冊P439 鏈接池工具-Proxool Var 0.8.3 技術手冊P446 設置web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!--<?xml version="1.0" encoding="GB2312"?>--> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> …. <servlet> <servlet-name>ServletConfigurator</servlet-name> <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> <init-param> <param-name>propertyFile</param-name> <param-value>WEB-INF/classes/Proxool.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 後端統計端口添加下列 <servlet> <servlet-name>Admin</servlet-name> <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Admin</servlet-name> <url-pattern>/Admin</url-pattern> </servlet-mapping> …. </web-app> 配置Proxool.properties jdbc-0.proxool.alias=JSPBook jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/sample_db?user=root&password=browser&useUnicode=true&characterEncoding=UTF-8 jdbc-0.proxool.maximum-connection-count=10 jdbc-0.proxool.prototype-count=4 jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE jdbc-0.proxool.verbose=true jdbc-0.proxool.statistics=10s,1m,1d 後端統計接口添加此行 jdbc-0.proxool.statistics-log-level=DEBUG 使用Proxool鏈接池 Connection con = DriverManager.getConnection("proxool.JSPBook"); Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String query = "SELECT * FROM employee"; ResultSet rs = stmt.executeQuery(query);
如下是使用事務提交和回滾描述的例子。 基於對環境和數據庫安裝在前面的章節中作此示例代碼已學習過。 複製過去下面的例子中JDBCExample.java,編譯並運行,以下所示: //STEP 1. Import required packages import java.sql.*; public class JDBCExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Database credentials static final String USER = "username"; static final String PASS = "password"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ //STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); //STEP 3: Open a connection System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //STEP 4: Set auto commit as false. conn.setAutoCommit(false); //STEP 5: Execute a query to create statment with // required arguments for RS example. System.out.println("Creating statement..."); stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); //STEP 6: INSERT a row into Employees table System.out.println("Inserting one row...."); String SQL = "INSERT INTO Employees " + "VALUES (106, 20, 'Rita', 'Tez')"; stmt.executeUpdate(SQL); //STEP 7: INSERT one more row into Employees table SQL = "INSERT INTO Employees " + "VALUES (107, 22, 'Sita', 'Singh')"; stmt.executeUpdate(SQL); //STEP 8: Commit data here. System.out.println("Commiting data here...."); conn.commit(); //STEP 9: Now list all the available records. String sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); System.out.println("List result set for reference...."); printRs(rs); //STEP 10: Clean-up environment rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ //Handle errors for JDBC se.printStackTrace(); // If there is an error then rollback the changes. System.out.println("Rolling back data here...."); try{ if(conn!=null) conn.rollback(); }catch(SQLException se2){ se2.printStackTrace(); }//end try }catch(Exception e){ //Handle errors for Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); }//end main public static void printRs(ResultSet rs) throws SQLException{ //Ensure we start with first row rs.beforeFirst(); while(rs.next()){ //Retrieve by column name int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); //Display values System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); } System.out.println(); }//end printRs() }//end JDBCExample
如今讓咱們來編譯上面的例子以下:
C:\>javac JDBCExample.java C:\> 當運行JDBCExample,它會產生如下結果: C:\>java JDBCExample Connecting to database... Creating statement... Inserting one row.... Commiting data here.... List result set for reference.... ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal ID: 106, Age: 20, First: Rita, Last: Tez ID: 107, Age: 22, First: Sita, Last: Singh Goodbye! C:\>
老師的例子:數據庫
JdbcDemo.java編程 package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String username = "test"; String password = "123456"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; //localhost 127.0.0.1 orcl Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); //加載驅動 conn = DriverManager.getConnection(url,username,password); /* //String sql = "insert into demo(id,name,sex,address,birthday)
|
ConnDB.java後端 package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnDB { private String username = "test"; private String password = "123456"; private String url =
|
DemoDao.java設計模式 package jdbc.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import jdbc.ConnDB; import jdbc.pojo.Demo; public class DemoDao { /** * 新增 * @param demo */ public void add(Demo demo){ ConnDB db = new ConnDB(); Connection conn = db.getConn(); String sql = "insert into demo(id,name,sex,address,birthday)
|
Demo.javaapi package jdbc.pojo; public class Demo { private int id; private String name; private String sex; private String address; private String birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } } |