LoginSignup
1
4

More than 3 years have passed since last update.

Java・ツイッタークローン・タスク管理システム①データベースを作成する

Last updated at Posted at 2020-10-11

はじめに

Javaを使って初めてアプリケーションを作成する人にむけて記事を書いてみようと思います。
ポートフォリオや、会社の研修課題作成の参考にしていただければ幸いです。
今回は、タスクマネージャーを作成します。
これを応用することで、ツイッタークローンの作成にも活かすことができます。

アプリケーションの機能ごとに記事を投稿していきます。
1.データベース作成
2.ログイン機能
3.タスクの登録機能
4.一覧表示
  -ソート機能
  -検索機能
5.編集機能
6.削除機能
7.排他制御について

*詳しい説明はコード内に書いてありますので、コピペする人は消して使ってください

実行環境

eclipse4.16.0
Tomcat9
Java11
Mysql5.7

目次
1.データベース概要
2.SQL文
3.Bean作成
4.データベースとの接続
5.次回予告

データベース概要

データベース名task_db
権利ユーザ名testuser
パスワードpassword
テーブル ユーザのマスターテーブル
     カテゴリーのマスターテーブル
     ステータスのマスターテーブル
     タスクテーブル(ユーザID、カテゴリーID、ステータスIDのForeignKeyを持ちます)
     コメントテーブル(ユーザID、タスクIDのForeignKeyを持ちます)

SQL文

①データベース作成

create databasetask_db

②ユーザ作成
 まずrootユーザになってパスワードのバリデーションを変更します

Set global validate_password.length=6; パスワードの長さを6に
set global validate_password.policy=LOW; ポリシーを変更

次にパスワード付きでユーザ作成

create user testuser identified by 'password'

③ユーザへtask_dbの全権限を与える

grant all on task_db.* to testuser

以上で準備は完了です。

④それぞれのテーブルを作成していきます。

--------ユーザのマスターテーブル
create table m_user (
user_id varchar(24) primary key,
password varchar(32) not null,
user_name varchar(20) not null unique,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------カテゴリのマスターテーブル
create table m_category (
category_id int primary key auto_increment,
category_name varchar(20) not null unique,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------ステータスのマスターテーブル
create table m_status (
status_code char(2) primary key,
status_name varchar(20) unique not null,
update_datetime timestamp not null default current_timestamp on update current_timestamp
);
--------タスクテーブル
create table t_task (
 task_id int auto_increment primary key,
task_name varchar(50) not null,
category_id int not null,
limit_date date,
user_id varchar(24) not null,
status_code char(2) not null,
memo varchar(100),
create_datetime timestamp default current_timestamp not null,
update_datetime timestamp default current_timestamp not null on update current_timestamp,
foreign key(category_id) references m_category(category_id),
foreign key(user_id) references m_user(user_id),
foreign key(status_code) references m_status(status_code)
);
--------コメントテーブル
create table t_comment(
comment_id int auto_increment primary key,
task_id int,
user_id varchar(100) not null,
comment varchar(100) not null,
update_datetime timestamp default current_timestamp not null on update current_timestamp,
foreign key(task_id) references t_task(task_id) on delete set null on update cascade,
foreign key(user_id) references m_user(user_id)
);

次に初期データを入れておきます。

-------カテゴリーレコード作成
insert into m_category (category_name) value("新商品A:開発プロジェクト");
insert into m_category (category_name) value("既存商品B:改良プロジェクト");
select * from m_category;
--------ステータスレコード作成
insert into m_status ( status_code, status_name) values("00", "未着手");
insert into m_status ( status_code, status_name) values("50", "着手");
insert into m_status ( status_code, status_name) values("99", "完了");
select * from m_status;
--------ユーザーレコード作成
insert into m_user(user_id, password, user_name) values("testid", "password", "testuser");
insert into m_user(user_id, password, user_name) values("testid2", "password", "testuser2");
--------タスクレコード作成
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク1", 1, "2022-10-01", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク2", 2, "2020-07-05", "testid", "50", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク2", 1, "2020-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク3", 2, "2002-08-30", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク4", 1, "2000-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク5", 2, "2025-09-30", "testid", "50", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク6", 1, "1998-09-30", "testid", "00", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク7", 2, "2020-09-30", "testid", "99", "テスト入力");
insert into t_task(task_name, category_id, limit_date, user_id, status_code, memo) values("サンプルタスク8", 1, "2020-10-30", "testid", "00", "テスト入力");

Bean作成

ここでは、それぞれのテーブルのBeanを作成していきます。
フィールド、コンストラクタ、getterとsetterを記述しているだけです。
確認したらコピペでオッケーです

model.entity.TaskBean.java
public class TaskBean {
    /**
     * フィールド
     */
    private int task_id;
    private String task_name;
    private int category_id;
    private Date limit_date;
    private String user_id;
    private String status_code;
    private String memo;
    private Timestamp create_datetime;
    private Timestamp update_datetime;
    private int version;

    /**
     * コンストラクタ
     */
    public TaskBean(){
    }

    /**
     * メソッド
     */

    public int getTask_id() {
        return task_id;
    }
    public void setTask_id(int task_id) {
        this.task_id = task_id;
    }

    public String getTask_name() {
        return task_name;
    }
    public void setTask_name(String task_name) {
        this.task_name = task_name;
    }

    public int getCategory_id() {
        return category_id;
    }
    public void setCategory_id(int category_id) {
        this.category_id = category_id;
    }

    public Date getLimit_date() {
        return limit_date;
    }
    public void setLimit_date(Date limit_date) {
        this.limit_date = limit_date;
    }

    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getStatus_code() {
        return status_code;
    }
    public void setStatus_code(String status_code) {
        this.status_code = status_code;
    }

    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }

    public Timestamp getCreate_datetime() {
        return create_datetime;
    }
    public void setCreate_datetime(Timestamp create_datetime) {
        this.create_datetime = create_datetime;
    }

    public Timestamp getUpdate_datetime() {
        return update_datetime;
    }
    public void setUpdate_datetime(Timestamp update_datetime) {
        this.update_datetime = update_datetime;
    }

    public int getVersion() {
        return version;
    }
    public void setVersion(int version) {
        this.version = version;
    }
}
model.entity.UserBean.java
public class UserBean {
    /**
     * フィールド
     */
    private String user_id;
    private String password;
    private String user_name;

    /**
     * コンストラクタ
     */
    public UserBean(){
    }

    /**
     * メソッド
     */
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

}
model.entity.StatusBean.java
public class StatusBean {
    /**
     * フィールド
     */
    private String status_code;
    private String status_name;

    /**
     * コンストラクタ
     */
    public StatusBean(){
    }

    /**
     * メソッド
     */
    public String getStatus_code() {
        return status_code;
    }

    public void setStatus_code(String status_code) {
        this.status_code = status_code;
    }

    public String getStatus_name() {
        return status_name;
    }

    public void setStatus_name(String status_name) {
        this.status_name = status_name;
    }
}
model.entity.CategoryBean.java
public class CategoryBean {

    /**
     * フィールド
     */
    private int category_id;
    private String category_name;

    /**
     * コンストラクタ
     */
    public CategoryBean(){
    }

    /**
     * メソッド
     */
    public int getCategory_id() {
        return category_id;
    }

    public void setCategory_id(int category_id) {
        this.category_id = category_id;
    }

    public String getCategory_name() {
        return category_name;
    }

    public void setCategory_name(String category_name) {
        this.category_name = category_name;
    }
}
model.entity.CommentBean.java
public class CommentBean {
    /**
     * フィールド
     */
    private int comment_id;
    private int task_id;
    private String user_id;
    private String comment;
    private Timestamp update_datetime;

    /**
     * コンストラクタ
     */
    public CommentBean() {
    }

    /**
     * メソッド
     */
    public int getComment_id() {
        return comment_id;
    }
    public void setComment_id(int comment_id) {
        this.comment_id = comment_id;
    }

    public int getTask_id(){
        return task_id;
    }
    public void setTask_id(int task_id) {
        this.task_id = task_id;
    }

    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getComment() {
        return comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }

    public Timestamp getUpdate_datetime() {
        return update_datetime;
    }
    public void setUpdate_datetime(Timestamp update_datetime) {
        this.update_datetime = update_datetime;
    }
}

データベースとの接続

①JDBCをプロジェクトのWebContent-Web-INF-libの中に入れる
②ビルドパスの構成から追加をしておきます
③コネクションマネージーを作成
変数USERと変数PASSWORDはパスワードとユーザ名はそれぞれtestuserとpasswordでやっております。

model.dao.ConnectionManager.java
public class ConnectionManager {
    //データベースの情報
        private final static String URL = "jdbc:mysql://localhost:3306/task_db?useSSL=false&serverTimezone=JST";
        private final static String USER = "testuser";
        private final static String PASSWORD = "password";

        //データベースへの接続メソッド
        public static Connection getConnection() throws SQLException, ClassNotFoundException{
            Class.forName("com.mysql.cj.jdbc.Driver");
            return DriverManager.getConnection(URL, USER, PASSWORD);
        }
}

次回予告

今回は、データベースの作成からBean作成とmysqlとの接続までやってまいりました。
作成いしたm_userテーブルを使って次回は、ログイン機能をつけていきます。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4