【Java】DataSourceを使ってデータベースにアクセスする方法
初めて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&useSSL=false" /> </Context>
配置は以下の通りです
webapp/META-INF/context.xml
autoReconnect=true&useSSL=false
上記の記述はMySQLにSSLで接続する際に以下のようなエラーが起きたため付け足しました。
エラーが出なければ記述する必要はないと思います。
参考
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しています。
環境構築は骨が折れます・・・
リンク