JavaWeb項目之部落格系統(二)上

來源:互聯網
上載者:User

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&amp;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>

我測試之後還是報錯,沒用的!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.