高拡張性javabeanとjsp接続データベースの構築操作

3806 ワード

1.まずTomcatにDataSource-jdbc/Panabiaを作成し、次にjava「ベースクラス」を作成します.このクラスはデータベース接続と接続の解放をカプセル化します.
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 , [ ]--- , , 。