高拡張性javabeanとjsp接続データベースの構築操作
3806 ワード
1.まずTomcatにDataSource-jdbc/Panabiaを作成し、次にjava「ベースクラス」を作成します.このクラスはデータベース接続と接続の解放をカプセル化します.
皆さんは、このクラスのすべての方法がstaticであることに気づくべきです.なぜかというと、主に他の「拡張クラス」の呼び出しを容易にするためです.もちろん、他のメリットもあります.
2.その後、このクラスはカプセル化され、JavaBeanはJSPにverifyテーブルのすべてのユーザー名とパスワードのリストをリストするなど、異なるアプリケーションの要件に対して個別に書くことができます.
どうすればいいのか--SQLFactoryを使用してConnectionを生成し、Statementを生成し、ResultSet-を生成して列挙しますか?いいようですね.ああ、待ってください.これであなたは「とても親切」な感じがしませんか?---ところで、ASP、PHPの中でこのように-FINT~私达はどのようにまた“原始社会”に戻りました....
もっと良い方法はありませんか?答えは肯定的で、JAVAの能力は“通天”の強大さで、あなたが得ることができる限り、そのAPI Documentをよく見て、解決方法を探し出すのは難しくありません.
答えが出てきました.
クエリクラスでは、ResultSetではなくJSP列挙にIteratorを返します.
では、私たちのUserQueryクラスが生まれました.
3.jspページでのクエリー
package Panabia.db;
import javax.sql.DataSource;
import javax.naming.*;
import java.sql.*;
public class SQLFactory
{
private static DataSource ds = null;
private static Object Lock = new Object();
// DataSource**
public static DataSource gainDataSource()
{
try{
if(ds==null)
{
synchronized(Lock)
{
if(ds==null)
{
Context ctx=new InitialContext();
ds=(DataSource)ctx.lookup(\"java:comp/env/jdbc/Panabia\");
}
}
}
}catch(NamingException e){
e.printStackTrace();
}
return ds;
}
// SQL **
public static synchronized Connection gainConnection()
{
Connection con = null;
try{
if(ds == null)
{
gainDataSource();
}
con = ds.getConnection();
}catch (SQLException e){
e.printStackTrace();
}
return con;
}
// SQL **
public static void releaseConnection(ResultSet rs, PreparedStatement ps,
Statement sql, Connection con)
{
try
{
if (rs != null)
rs.close();
}catch (SQLException e) {
e.printStackTrace();
}
try
{
if (ps != null)
ps.close();
}catch (SQLException e) {
e.printStackTrace();
}
try
{
if (sql != null)
sql.close();
}catch(SQLException e) {
e.printStackTrace();
}
try {
if (con != null && !con.isClosed())
con.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
皆さんは、このクラスのすべての方法がstaticであることに気づくべきです.なぜかというと、主に他の「拡張クラス」の呼び出しを容易にするためです.もちろん、他のメリットもあります.
2.その後、このクラスはカプセル化され、JavaBeanはJSPにverifyテーブルのすべてのユーザー名とパスワードのリストをリストするなど、異なるアプリケーションの要件に対して個別に書くことができます.
どうすればいいのか--SQLFactoryを使用してConnectionを生成し、Statementを生成し、ResultSet-を生成して列挙しますか?いいようですね.ああ、待ってください.これであなたは「とても親切」な感じがしませんか?---ところで、ASP、PHPの中でこのように-FINT~私达はどのようにまた“原始社会”に戻りました....
もっと良い方法はありませんか?答えは肯定的で、JAVAの能力は“通天”の強大さで、あなたが得ることができる限り、そのAPI Documentをよく見て、解決方法を探し出すのは難しくありません.
答えが出てきました.
クエリクラスでは、ResultSetではなくJSP列挙にIteratorを返します.
では、私たちのUserQueryクラスが生まれました.
package Panabia.operate;
import Panabia.db.SQLFactory;
import java.util.*;
import java.sql.*;
public class UserQuery
{
private ArrayList list = null;
private Connection con = null;
private Statement sql = null;
private ResultSet rs = null;
public Iterator getResult()
{
try{
con=SQLFactory.gainConnection();
sql=con.createStatement();
rs=sql.executeQuery(\"select * from verify\");
//verify :username,password;
list=new ArrayList();
while(rs.next())
{
list.add(rs.getString(1));
list.add(rs.getString(2));
}
}catch(SQLException e){
e.printStackTrace();
}finally{
SQLFactory.releaseConnection(rs,null,sql,con);
}
return list.iterator();
}
}
3.jspページでのクエリー
Iterator it=UserQuery.getResult();
while(it.hasNext())
{
out.print((String)it.next());
}
// : , ArrayList , [ ]--- , , 。