vi/home/www/cnmsql.jsp
##源代碼如下:
<%@pagelanguage="java"import="java.sql.*"%>
<%
Class.forName("org.gjt.mm.mysql.Driver");
Connectionconn=DriverManager.getConnection("jdbc:mysql://host_name/db_name","user_name","password");
Statementstmt=conn.createStatement();
ResultSetrs=stmt.executeQuery("select*fromprov");
rs.next();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.next();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.previous();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.last();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.first();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.close();
stmt.close();
conn.close();
%>
4測試該程序
lynxhttp://www.yesgo.loc/cnmysql
##正確的結(jié)果應(yīng)該是:
1安徽
2北京
1安徽
34臺灣
1安徽
例二:使用連接池連接數(shù)據(jù)庫
1建立數(shù)據(jù)源
vi/usr/local/resin/conf/resin.conf
<resource-ref>
<res-ref-name>jdbc/yesgo</res-ref-name>//數(shù)據(jù)源名稱
<res-type>javax.sql.DataSource</res-type>。瘮(shù)據(jù)源類型
<init-paramdriver-name="org.gjt.mm.mysql.Driver"/>//數(shù)據(jù)庫驅(qū)動
<init-paramurl="jdbc:mysql://localhost/yesgo"/>//連接串
<init-paramuser="your_user_name"/>//用戶名
<init-parampassword="your_password"/>//密碼
<init-parammax-connections="20"/>//最大連接數(shù)
<init-parammax-idle-time="30"/>。訒r時間
</resource-ref>
2創(chuàng)建JSP源文件
touch/home/www/testpool.jsp
chown-Rwww/home/www/testpool.jsp
chgrp-rroot/home/www/testpool.jsp
chmod771/home/www/testpool.jsp
vi/home/www/testpool.jsp
##源代碼如下:
<%@pagelanguage="java"import="java.sql.*,com.caucho.sql.*;"%>
<%
DBPoolpool=newDBPool();
Connectionconn=pool.getPool("data_source_name").getConnection();
Statementstmt=conn.createStatement();
ResultSetrs=stmt.executeQuery("select*fromprov");
rs.next();
out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br>");
rs.next();
out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br>");
rs.previous();
out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br>");
rs.last();
out.print(rs.getString("prov_id")+""+rs.getString("prov_name")+"<br>");
rs.first();
out.print(rs.getString("prov_id")+rs.getString("prov_name")+"<br>");
rs.close();
stmt.close();
conn.close();
%>
3調(diào)試該程序
lynxhttp://www.yesgo.loc/testpool.jsp
##處理的結(jié)果跟例一是一樣的:
1安徽
2北京
1安徽
34臺灣
1安徽
例三:使用處理層連接數(shù)據(jù)庫
##本例告訴你如何使用組件
##其實你完全可以寫一個bean來處理數(shù)據(jù)庫,而不用象例二那么羅索。只用四條語句就可以取出數(shù)據(jù)庫中的所有數(shù)據(jù)并顯示出來,這樣做實現(xiàn)了處理層和邏輯層的徹底分離,由邏輯層發(fā)出指令、由處理層去響應(yīng)相關(guān)處理,記錄集也不會返回到邏輯層的jsp頁面,而由處理層的bean處理,使得代碼非常精簡,效率也更高。至于如何書寫組件不是本文檔的重點,下面僅給出一個組件的例子并說明邏輯層的調(diào)用方法,你會發(fā)現(xiàn)其實邏輯層是個官僚,處理層是下屬,呵呵。
1創(chuàng)建處理層組件
下面的組件是我為公司寫的數(shù)據(jù)庫處理組件的簡化版本,考慮到篇幅和可讀性等問題,這里我簡化了它的功能(象數(shù)據(jù)分頁、批量更新、獲取字段數(shù)和字段名稱,用set和get提高其擴展性、對其他連庫方法的支持等都沒有出現(xiàn)在下面的代碼中),使之包含所有常用的功能并使之更加清晰和易于理解;其二,我將連庫動作加到了構(gòu)造函數(shù)中,這是個優(yōu)點也是個缺點,優(yōu)點是簡化了連庫動作,缺點是降低了通用性,我沒有添加設(shè)置數(shù)據(jù)源等方法,從而每當(dāng)變換一次數(shù)據(jù)庫就需要改寫組件中的連接池名稱,這在做一個固定項目的時候是可以的,如果你需要set數(shù)據(jù)源,可以自行添加;
##使用組件的方法:
我這里說的是使用bean的通用方法,你建立自己的bean目錄可以仿照該例子。在你的站點根目錄下建立resin.conf中指定的存放bean的目錄,我上面的舉例是classes,那你就建立classes目錄,那么classes就是你站點的class根目錄。然后在下面依次建立com\gledecity\yesgo\sql,注意它們之間是父子關(guān)系,不是同級文件夾,然后將下面即將建立的DBBridge.java放到"站點根目錄\classes\com\gledecity\yesgo\sql"目錄下,然后將該文件上傳到服務(wù)器端即可。上面的步驟在微軟平臺上使用UltraDev之類的開發(fā)工具即可完成,當(dāng)然手工也可以。 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|