MENU

【Java】DataSourceを使ってデータベースにアクセスする方法

f:id:kiserukun:20210611090227p:plain

初めてDataSourceを使いMSQLと繋いだので アウトプットします。
接続に3日くらい掛かってしまいました・・・



DataSource

事前にxmlファイルを設定しておく必要があります。

DataSourceではxmlファイルが必要

以下のように書きます

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Context>
<Context>
<Resource name="jdbc/データベース名" auth="Container"
type="javax.sql.DataSource"
username="ユーザー名" password="パスワード"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/データベース名?autoReconnect=true&amp;useSSL=false" />
</Context>

 
配置は以下の通りです
webapp/META-INF/context.xml

f:id:kiserukun:20210727193953j:plain  

autoReconnect=true&amp;useSSL=false

上記の記述はMySQLSSLで接続する際に以下のようなエラーが起きたため付け足しました。
エラーが出なければ記述する必要はないと思います。  
 
参考

hacknote.jp

 
 
 

DataSourceで接続する

InitialContext context = new InitialContext();
DataSource datasource = (DataSource) context.lookup("java:comp/env/jdbc/データベース名");
Connection connection = datasource.getConnection();

上の記述を書くことでデータベースへの接続を行います。  
 

.lookup("java:comp/env/jdbc/データベース名")

lookupメソッドを使い指定のデータベースにアクセスします。
jdbc/データベース名はxmlファイルのnameに該当します。

DataSourceで接続するサンプル

package model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;



public class DAO{
 public void setUser(User user) throws SQLException, NamingException {
     InitialContext context = new InitialContext();
     DataSource datasource = (DataSource) context.lookup("java:comp/env/jdbc/mydb");
     Connection connection = datasource.getConnection();
     
     String mysql = "INSERT INTO mydb_tb(ID, NAME)" + "VALUES (?, ?)";
     PreparedStatement prepared = connection.prepareStatement(mysql);
     prepared.setInt(1, user.getId());
     prepared.setString(2, user.getName());

     prepared.executeUpdate();
     connection.close();
 }
 

user.getId()、user.getName()はUserクラスのデータをデータベースにINSERTしています。





環境構築は骨が折れます・・・