1.JDBC技術
來源:http://zengyiqiang2006.blog.163.com/blog/static/102868226201052673216733/
JDBC技術(訪問資料庫的一種技術)
核心主要是使用DriverManager類操作和管理實現Driver介面的實作類別, 程式員只需要向這個驅動管理器類要連線物件就可以了
( Connection con=DriverManager.getConnection(RUL) )
JDBC驅動程式(實現Driver介面的實作類別名字)
通常我們所說的“使用哪一個JDBC驅動程式/驅動類?”實際上是指使用哪一個實現Driver介面的實作類別。如是使用Mysql資料庫廠商提供的實作類別(com.mysql.jdbc.Driver)還是使用 SQL Server 2000 資料庫廠商提供的實作類別(om.microsoft.jdbc.sqlserver.SQLServerDriver);是使用第三方的實作類別還是使用java自身提供的實作類別(sun.jdbc.odbc.JdbcOdbcDriver )但是無論使用哪一家驅動程式都要知道相應的url。
JDBC串連池 技術 :對DriverManager進行了封裝和相應的修改,
串連池其實就是java中的集合如List、Map、Vector等。
串連池技術的核心是反覆使用串連池(集合)中的多個Connection對象,其底層實現還是基於JDBC技術,即DriverManager類操作和管理實現Driver介面的實作類別
總結:
一: 如何建立多個連線物件?
參考原始碼可知 只需向DriverManager多要幾次即可 ,具體可以使用迴圈語句
二:如何擷取串連池中的Connection對象呢?
未封裝前只需向DriverManager要就可以了,封裝後,要向DataSource來要。
三:Java中的DriverManager對象 作用主要是擷取實現Driver介面的實作類別的連線物件
如: Connection con=DriverManager.getConnection(RUL) )
四:Java中的DataSource對象 有點像未封裝前的DriverManager。它的作用主要是擷取第三方組件(串連池)中的連線物件
如: Context context=new InitialContext() ; //JNDI部分的知識
DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” );
Connection con=ds.getConnection();
五:串連池 :實際上就是一個集合,該集合內儲存了一定數量的連線物件,所以他管理著整個資料庫的串連
六:資料來源: 實際上就是Java中的DataSource對象,主要作用是管理串連池和擷取第三方組件(串連池)中的連線物件,有點像 DriverManager,換句話說,各個串連池的管理工作都是由一個叫資料來源的對象來操控著,java中DataSource來表示,xml檔案中用 <data-source> 這個標籤來表示。
七:擷取Connection對象的兩種方式 ,
一種是傳統的向DriverManager要, con=DriverManager.getConnection()
另一種是向DataSource要, con =( (DataSource)new InitialContext().lookup( “ java:/comp/env/jdbc/ TestDB ” ) ).getConnection() ;
八:JNDI
Context context=new InitialContext() ; // JNDI部分的知識
DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” ) ;//利用
JNDI的lookup方法來尋找(tomcat中)已經存在的DataSource對象 。 java:/comp/env
這是固定的寫法
Connection con=ds.getConnection() ;//只要有了DataSource對象,則就可以獲得Connction對象了
2.Tomcat 6.0 設定資料庫串連池
來源:http://zengyiqiang2006.blog.163.com/blog/static/10286822620105267244342/
這裡是以Mysql資料庫為例,其他的資料庫都是一樣的配置
首先將mysql驅動拷貝到tomcat下的lib目錄下。C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib
然後修改C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf下的context.xml檔案,在裡面添加如下代碼:
在Context標籤裡添加一個屬性 reloadable="true"
<WatchedResource>WEB-INF/web.xml</WatchedResource><!--這個有就不需要添加--> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="admin" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/databasename"/>
下面解釋一下各屬性的含義:
name 表示指定的jndi名稱 (這個名字這裡可以隨便寫)
auth 表示認證方式,一般為Container
type 表示資料來源床型,使用標準的javax.sql.DataSource
maxActive 表示串連池當中最大的資料庫連接
maxIdle 表示最大的空閑串連數
maxWait 當池的資料庫連接已經被佔用的時候,最大等待時間
logAbandoned 表示被丟棄的資料庫連接是否做記錄,以便跟蹤
username 表示資料庫使用者名稱
password 表示資料庫使用者的密碼
driverClassName 表示JDBC DRIVER
url 表示資料庫URL地址
例子:
<Context><WatchedResource>WEB-INF/web.xml</WatchedResource><!—mysql資料來源配置--><Resourcename="jdbc/mysqlds"auth="Container"type="javax.sql.DataSource"maxActive="100"maxIdel="30"maxWait="10000"username="root"password="5982285"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost/myblog"/><!—oracle資料來源配置--><Resourcename="jdbc/oracleds"auth="Container"type="javax.sql.DataSource"maxActive="100"maxIdel="30"maxWait="10000"username="scott"password="tiger"driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:sky"/></Context>
屬性說明:name: 資料來源名稱,通常取jdbc/XXX的格式
auth: Container容器
type: javax.sql.DataSource 注意是javax不是java
username: 資料庫使用者名稱
password: 資料庫使用者密碼
maxIdle: 最大空閑數,資料庫連接的最大空閑時間。超過空閑時間,資料庫連
接將被標記為不可用,然後被釋放。設為0表示無限制。
maxActive: 串連池的最大資料庫連接數。設為0表示無限制。
maxWait : 最大建立串連等待時間。如果超過此時間將接到異常。設為-1表示
無限制。
driveClassName: 資料庫完整的驅動類全稱
url: 資料庫的連結
網上很多人都說需要在web.xml檔案中再配置 其實補配置也是可以的
配置了<WatchedResource>WEB-INF/web.xml</WatchedResource> 之後 就無需在web.xml檔案中配置了
或者是在context.xml中配置的而不是server.xml配置 因此不需要在web.xml中配置 沒有測試
3.HTML <label> 標籤的 for 屬性
for 屬性規定 label 與哪個表單元素繫結。
標記通常以下面兩種方式中的一種來和表單控制項相聯絡:將表單控制項作為標記標籤的內容,這樣的就是隱式形式,或者為 <label> 標籤下的 for 屬性命名一個目標表單 id,這樣就是顯式形式。
例如,在 XHTML 中:
顯式的聯絡:<label for="SSN">Social Security Number:</label><input type="text" name="SocSecNum" id="SSn" />隱式的聯絡:<label>Date of Birth: <input type="text" name="DofB" /></label>
第一個標記是以顯式形式將文本 "Social Security Number:" 和表單的社會安全號碼的文本輸入控制項 ("SocSecNum") 聯絡起來,它的 for 屬性的值和控制項的 id 一樣,都是 SSN。第二個標記 ("Date of Birth:") 不需要 for 屬性,它的相關控制項也不需要 id 屬性,它們是通過在 <label> 標籤中放入 <input> 標籤來隱式地串連起來的。
執行個體
帶有兩個輸入欄位和相關標記的簡單 HTML 表單:
<form> <label for="male">Male</label> <input type="radio" name="sex" id="male" /> <br /> <label for="female">Female</label> <input type="radio" name="sex" id="female" /></form>
4.一個問題:The reference to entity "password" must end with the ';' delimiter.的原因跟解決方案
This error is caused by a rogue '&' in database_properties.xml. This xml tag...
<param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&password=mypassword"/>
should actually read...
<param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&password=mypassword"/>
This is because the sax xml parsing libraries used by jwnl are generic xml libraries and therefore expect an escaped
charcter sequence.
測試成功
測試頁面
5.又一個問題:Name jdbc is not bound in this Context
這個問題我尋找了好久,一直沒有效果,我的context.xml 和 Mysql驅動程式都是沒有問題的,但是就是不停地報這個錯!最後我很無語的發現,錯誤是自己寫作了一個單詞!
ds=(DataSource)context.lookup("java:comp/env/jdbc/mysqlds");//注意:第一個單詞是java,而不是jdbc!
網上有人解釋說還要在web.xml中添加以下內容:
<resource-ref>
<description>blog</description>
<res-ref-name>jdbc/mysqlds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我測試之後還是報錯,沒用的!