Struts2 [データベース]

Tomcat6 + Struts2 でデータベースを使うのは簡単です。今回はシンプルなデータベース操作用自作クラス SDB.java を 使ってみます。
更新日 2016-02-13

ウェッブアプリの設定

/META-INF/context.xml の編集

Resource タグでデータベース接続設定を行います。Tomcat6 標準実装となったConnection DBCP によって参照されます。
<Context debug="5" reloadable="true" distributable="false" antiJARLocking="true">

	<!-- データベース接続設定 -->
	<Resource name="MySQL_AST" auth="Container" type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000"
        username="user_ast" password="pass_ast"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://mysqlserver:3306/ast_db?autoReconnect=true&
        useUnicode=true&characterEncoding=utf8"
        timeBetweenEvictionRunsMillis="60000" />

</Context>
timeBetweenEvictionRunsMillis では、プールされたコネクションが一定時間未使用であるかどうかをチェックする間隔を指定します。 ここでは1分おきにチェックしてます。デフォルトで30分以上未使用となるコネクションは破棄されます。(MySQL Server 側で破棄されても 実行時の例外以外に知るすべが無い為、あえてこちら側でプールするアイドル時間を制限しようという訳です。)

Java クラスから接続

今回はデータベースへの接続、クエリなどを容易に扱うための自作クラスSDB.javaを使います。オブジェクト指向にまとめただけのシンプルな実装ですので、 実際の接続周りについて知りたい方は直接参照してみてください。
import slib.SDB;

public class testAction extends ActionSupport
{
	public List<String> listName = null;

    public String execute() throws Exception
    {
		// 接続します
		SDB db = new SDB();
		Boolean bConnect = db.connect("java:comp/env/MySQL_AST");
		if (bConnect)
		{

			// SQL を発行します。
			String strSQL = "select * from Users";
			Boolean bRet = db.executeQuery(strSQL);
			if (bRet)
			{
				listName = new ArrayList<String>();

				// レコードを順に参照します。
				while (db.next())
				{
					// 値を取り出します
					String strName = db.getString("name");
					listName.add(strName);
				}
			}

			// 接続を閉じます。
			db.close();
		}

		return SUCCESS;
	}
}
SDB.connection(String) で接続します。SDB.excuteQuery(String) でselect 系のSQL 文を実行できます (insert, update 類は excuteUpdate(String) )。結果はSDB.next() で順に参照できます。SDB.getString(String) やSDB.getInt(String) などで カラム名を指定して値を取得できます。使い終わったらSDB.close() です。