はじめてのWebサーバでデータベースを利用②(さくらのVPS, CentOS Stream 9, MySQL, Java 11, Tomcat 9, サーブレット&JSP)

# はじめてのWebサーバでデータベースを利用②

## 1. 前提条件
既に導入が済んでいるもの
- さくらのVPS[サーバ申込]
- CentOS Stream 9[さくらのVPS上にインストール済]
- Tera Term 5 [インストール済]
- ドメイン導入[お名前.com利用しました]
- JavaEE 11
- tomcat 9.0.88
これらの設定については、[はじめてのWebサーバ構築（centOS Stream 9, Java 11, tomcat 9, サーブレット)](https://qiita.com/modgoodluck/items/fb1f481c616824aa1bbc)で記事にしましたので、良かったら参考にしてください。
- MySQL 8.0.36
MySQLのインストールについては、[はじめてのWebサーバでデータベースを利用①(さくらのVPS, CentOS Stream 9, MySQL, Java 11, Tomcat 9, サーブレット&JSP)](https://qiita.com/modgoodluck/items/f8b1d6382b3b93149512)で記事にしましたので、こちらも良かったら参考にしてください。

このページで設定するもの
- MySQLにデータベース、テーブル、レコードを設定

# 2\. MySQLにログイン

Tera Termよりサーバーにログインします。

次に、MySQLのrootユーザーでログインします。
```ruby
mysql -u root -p
```
左側のユーザー表記が以下のようになったことを確認してください。
```ruby
mysql>
```
:::note info
こちらはtipsとして。
```ruby
#ユーザー情報一覧表示
select user,host from mysql.user;
#データベース一覧表示
show databases;
```
:::

ここから、
データベース（database)　
⇒　テーブル（table）
⇒　レコード（record)
の順に作成していきます。

# 3\. データベースの作成
データベース名：xxxxxxxとします。
```ruby
create database xxxxxxx; 
```
作ったデータベースに接続します。
```ruby
USE xxxxxxx;
```

# 4\. テーブルの作成
テーブル名：yyyyyyy

自分の場合、個人的に作った成果物紹介用のページを作りたかったので、以下のようなテーブル構成にしました。

ナンバー(id): INT型、null値不可、主キー(primary key)、自動採番(auto_increment)
種別(type): VARCHAR型、文字数15、null値不可
主機能(feature): VARCHAR型、文字数40、null値不可
リンク先(link): VARCHAR型、文字数200、
開発完了日(date): DATE型、null値不可
開発期間(term): VARCHAR型、文字数10、null値不可
いいね数(good): int型、null値不可

```ruby
CREATE TABLE yyyyyyy (id INT AUTO_INCREMENT PRIMARY KEY,type VARCHAR(15) NOT NULL, feature VARCHAR(40) NOT NULL, link VARCHAR(200), date DATE NOT NULL, term VARCHAR(10) NOT NULL, good INT NOT NULL); 
```

作ったテーブルの構造を確認します。
```ruby
SHOW COLUMNS FROM yyyyyyy;
```

:::note info
tips
```ruby
#誤ったテーブル名を作ってしまったとき
#（まず変更したいデータベースに接続してください）
#↓でデータベースの名称を変更できます
ALTER TABLE yyyyyyy RENAME TO zzzzzzz;
```
:::

# 5\. サンプル用レコードの入力
作ったテーブルにサンプル用のレコードを入力します。
※idは自動採番なので入力の必要なし
```ruby
INSERT INTO yyyyyyy (type, feature, link, date, term, good) VALUES('aaaa','bbbb','cccc' ,'2024-01-01', 'dddd', 0);
```

作ったレコードの確認をします。
```ruby
SELECT * FROM yyyyyyy;
```

ここまでで、MySQL作業は完了です。

次にサーブレットクラス側(DAOパターン）の書き方について説明したいと思いましたが、このコードの記述についてはさらに長文になってしまうことが予想されるため、別機会とさせていただきます。

今回は開発環境で行っていたh2データベースをMySQLに変更し、Webサーバに配置したとき行った作業、また変更した部分のコードについてだけ記述します。

# 6\. H2データベース(localhost)からMySQL(webサーバのlocalhost)へ切り替え

Webサーバ上でデータベースに接続するため、行ったことは2つです。
- MySQL用のJDBCドライバの入手、libフォルダへの保存
- MySQLに接続するためのDAOクラスの編集

自身のEclipse画面より抜粋
![Eclipse01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781397/ec6714f7-df2b-9aa1-7f67-b02c9e96d63d.png)

### JDBCドライバ(MySQL Connector)のダウンロード

JDBCドライバについては、こちらを参考にさせていただきました。
[【JDBCドライバ】MySQL Connector/J 8.0ダウンロード手順](https://qiita.com/Kbayatch12345/items/53142bcc40d1dc7596e2)

具体的にはここからダウンロードできます。
[MySQL Community Downloads](https://dev.mysql.com/downloads/connector/j/)
※プルダウンからPlatform Independentを選択
※Zip Archeive側をダウンロードしてください。
なお、自分がダウンロードした際のバージョンは8.4.0でした。
![JDBC01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781397/848ea383-ac00-5eb8-d407-ff25c412a0ea.png)

ダウンロードしたものは、好みの場所で保管していただき、Eclipseプロジェクト上では、上に示した場所にカーソルを合わせ、ドラッグ＆ドロップで設置できます。

### xxxxDAO.javaの編集
DAOのソースコードを編集します。
今回は抜粋ですが、次回以降でJAVAのソースコードの作成手順について記述したいと思います。

```ruby
#データベース接続に使用する情報
	//private final String JDBC_URL = "jdbc:h2:tcp://localhost/~/achv"; #コメントアウト
	private final String JDBC_URL = "jdbc:mysql://localhost:3306/achv"; #新規入力
	private final String DB_USER = "(MySQLのユーザ名)";
	private final String DB_PASS = "(ユーザのパスワード)";

#JDBCドライバを読み込む
	try {
		//Class.forName("org.h2.Driver"); #コメントアウト
		Class.forName("com.mysql.cj.jdbc.Driver"); #新規入力
```

### Webサーバへwarファイルを転送

Ecipseのプロジェクト・エクスプローラー、該当のプロジェクト上で右クリック
⇒エクスポート
⇒warファイル
で、warファイルを生成しお好みの場所に配置できます。

生成したwarファイルをTera Termを通してWebサーバに転送し、以下コマンドでtomcat上に設置します。

```ruby
mv xxxxxxxxxx.war /opt/tomcat/tomcat9/webapps
```
これで実際に動かすことができました。
手前味噌ですが、こちらが[仕上がりのHP](http://svw.modgoodluck.com/selfIntroduce/)です。
まだまだ中身を改変していこうと思っています。

# 7\. おわりに
誰かのお役に立ちますように。