撫養 航 - 備忘録

SEの備忘録

JavaDB

DB接続手順

準備

String url = "jdbc:mysql://localhost:3306/example?useSSL=false&serverTimezone=JST";
String user = "root";
String password = "パスワード";

Connection

Connection con = DriverManager.getConnection(url, user, password);

Statement

Statement st = con.createStatement();

PreparedStatement

PreparedStatement ps = con.prepareStatement(sql)
ps.setString(1, parameterあり);

ResultSet(parameterなし)

ResultSet rs = rs.executeQuery(sql);

ResultSet(parameterあり)

ResultSet rs = ps.executeQuery();

出力

while (rs.next()) {
    int id = rs.getInt("key1);
    String title = rs.getString("key2");
    int price = rs.getInt("key3");
    System.out.println(key1 + "," + key2 + "," + key3);
}

DAOサンプル

フィールド設定

protected Connection con;

コンストラクタ設定

public SampleDAO(Connection con) {
    this.con = con;
}

メソッド設定

全件取得

public List<Sample> findAll() throws SQLException {
    String sql = "select key1, key2, key3 from sample order by id";
    try (PreparedStatement ps = con.prepareStatement(sql)) {
        ResultSet rs = ps.executeQuery(); 
        List<Sample> sampleList = new ArrayList<>();
        while (rs.next()) {        
            Sample sample = new Sample(rs.getInt("key1"), rs.getString("key2"),rs.getInt("key3"));           
            sampleList.add(sample);       
        }           
        return sampleList;    
    } 
}

条件取得

public Sample findByPrimaryKey(int id) throws SQLException {    
    String sql = "select id, key2, key3 from sample where id = ?";
    try (PreparedStatement ps = con.prepareStatement(sql)) {      
        ps.setInt(1, 条件);      
        ResultSet rs = ps.executeQuery();  
        if (rs.next()) {           
            Sample sample = new Sample(rs.getInt("key1"), rs.getString("key2"), rs.getInt("key3"));     
            return sample;
        }            
        throw new DataNotFoundException(); 
    }  
}

追加

public int create(Book book) throws SQLException {    
    String sql = "insert into book (key1, key2, key3) values (?, ?, ?)";
    try (PreparedStatement ps = con.prepareStatement(sql)) {  
        ps.setInt(1, sample.getKey1());  
        ps.setString(2, sample.getKey2()); 
        ps.setInt(3, sample.getKey3());  
        return ps.executeUpdate();    
    }   
}

更新

public int update(Sample sample, int id) throws SQLException {  
    String sql = "update sample set key1=?, key2=?, key3=? where id =?;
    try (PreparedStatement ps = con.prepareStatement(sql) {
        ps.setInt(1, sample.getKey1());
        ps.setString(2, sample.getKey2());
        ps.setInt(3, sample.getKey3());
        ps.setInt(4, id);
        return ps.executeUpdate();
    }
}

消去

public int delete(int id) throws SQLException {
    String sql = "delete from sample where id = ?";
    try (PreparedStatement ps = con.prepareStatement(sql) {
        ps.setInt(1, id);
        return ps.executeUpdate();
    }
}

Java便利機能

目次

Java

型変換

文字列を数値に変換 int num = Integer.parseInt(str);

数値を文字列に変換 String str = IntegertoString(num);

数値容量の大きさ

【Integer int 数値】 byte  127 short 32767 int  20億 long  数値最大

固定値の設定方法

finalキーワードを付与することで値を固定

//消費税の固定
final double tax = 0.08;

上書きするとコンパイルエラーになる

三項演算子

以下のように分岐構造を書くことができる 両者ともに同じ処理である

char c = 80 < score ? "A" : "B"
char c;
if(80 < score) {
 c = "A";
} else {
 c = "B";
}

反復構造(do.while)

この書き方、最初の1回は必ず処理が実行される

do{
 //処理
 i++;
}wihle (条件);

中にfalseなるような処理を書く義務がある

for文のcontinueとbreak

for文の条件をtrueする

continue ... 繰り返しの先頭に移動 break ... 強制的にループを終了

反復構造にラベルを付ける

ラベル名:for(){}

これでラベルを付ける 内部の処理で

break ラベル名;

これを記述し強制的にループを終了

outside:
for(条件) {
 break outside; 
}

メンバー表示するSC

eclipce上で「ctrl + o」を押すとメンバを見ることができる これは頻繁に使う必要がある

Javaオブジェクト指向の考え方

Mainクラス

※bulldogクラスがDogクラスを継承しているものとする ※自分が分かりやすく簡潔に書いているため一部コードを省略しています

インスタンス生成

こちらがインスタンスを生成するコードである

単数生成

Dog sample = new Bulldog();

複数生成

Dog sample = {new Bulldog(), new Chihuahua()};

オブジェクトを分け説明すると以下のようになる

インスタンス化   コンストラクタ
Dog sample = new  Bulldog();

Dogクラスのメンバを使用するがBulldogのコンストラクタでフィールドを操作している

インスタンス使用

こちらがインスタンスを使用するコードである

sample.メソッド名();

サブクラス

サブクラスの書き方

public class Bulldog {

    //フィールド(基本修飾子protected)
        変数を置く

    //コンストラクタ(基本修飾子public)
        newでインスタンス化した際に変数を操作する

    //メソッド(基本修飾子public)
        クラス独自の処理を書く

}

オブジェクトなクラスの関係性

クラス同士の関係性について図でまとめてみた

継承

継承(extends)とは...スーパークラスのメンバを利用するためのもの

影響→スーパーメソッドを利用できるようになる

使う場面

インスタンス化(↓)をする際

Dog sample = new Bulldog();

サブクラスのコンストラクタ(↓)から

public class Bulldog extends Dog {
 //コンストラクタ
 Bulldog (String name) {
  super(name);
 }
}

スーパークラスのフィールド(↓)を設定できる

public class Dog {
 //フィールド
 String name;
}

これにより呼び出した実行の内容は同じだが出力結果はサブクラスのコンストラクタで操作した独自のものになる(=ポリモーフィズム

抽象

抽象(abstract)とは...サブクラスのOverrideを義務付けるもの

影響→メソッドにabstractを付けるとクラスにもabstractを付ける義務が発生

使う場面

以下のように出力させたい

ブルドック:ガルルルル

インスタンス生成でブルドックという名前を送信

Dog bulldog = new Bulldog("ブルドック");

ブルドックのbarkメソッドをスーパークラスで出力しようとする

bulldog.bark();

スーパークラスにはbarkメソッドがあるが

//フィールド
String name;
//メソッド
public void bark() {
 system.out.println(name + ": ???"); 
}

Dogクラスではブルドック専用の鳴き声を書けないため、【サブクラスでのオーバーライドが必須】になる

インターフェース

インターフェース(implements)とは...クラスの仕様を定義するもの

影響→そのクラスと継承関係があるクラスも実装する義務が発生する

使う場面

複数のインターフェースを実装することが可能 複数の仕様を実装可能なので任意の種類のOverrideを義務付けることが可能

PHP開発環境の導入手順

※当記事は個人用の備忘録です

【目次】

開発環境まとめ

まずは開発環境の全体像から考えていく

Local環境の全体像

Local環境の画像(※赤文字が今回の導入部分) Local Disk上(pcのディスク)で開発ファイルを保存しデータベースはMySQLで管理

動作確認はLocal Hostまたはコマンドプロンプトで確認する

サーバー環境の全体像

サーバー環境の画像(※赤文字が今回の導入部分) 開発環境はサーバーで管理。

動作確認は取得したドメインをURLに入力し確認する

PHP導入手順

PHPインストール

  1. phpをダウンロードするために以下のURLにアクセスする https://windows.php.net/download/

  2. PHP7.2の「VC15 x64 Thread Safe」のzipリンクをクリックするとダウンロードが開始される

  3. zipフォルダを解凍

  4. フォルダ名を「php」に変更

  5. フォルダをC直下に置いて完了

php.iniファイルのコピー

  1. 先ほど置いたphpフォルダの中にあるphp.ini-developmentファイルをコピペで複製する

  2. 複製したファイルをphp.iniという名前に変更する

  3. 以下の画像のようになっていれば完了

cmdでphpを使用する為の環境変数設定

  1. エクスプローラ画面で「pc」を右クリックしプロパティを開く

  2. 「システム詳細設定」の「環境変数」ボタンをクリックする

  3. 「ユーザー環境変数」欄の新規ボタンをクリックする

     すでにPathが登録されている場合はPathを選択して編集ボタンをクリック

  4. 変数名は「Path」を変数値は「C:\php」を登録し完了 以上で環境変数設定は完了

php.iniの変更

  1. php.iniをVScodeにドラッグ&ドロップし開く

  2. 「extension = mbstring」と「extension = pdo_mysql」の手前にある「;」を排除する

インストール確認

コマンドプロンプトに「php -v」と入力し確認

MySQL導入手順

MySQLインストール

MySQLダウンロード

  1. phpをダウンロードするために以下のURLにアクセスする https://www.mysql.com/

  2. Downloadリンクをクリックする

  1. Downloadボタンをクリック

  2. 「No thanks, just start my downdload」をクリックしダウンロード開始

MySQLインストール

  1. 先ほどダウンロードしたインストーラーを起動する

  2. 画像の「Server only」にチェックを入れ次へ

  3. 下の画面でpasswordの項目にパスワードを設定して次へ

  4. 以降はデフォルトのままfinish

起動方法とSQL一覧

コマンドプロンプトに先ほど設定したパスワードを入力しログインできれば完了

※以下、SQLメモ

--------------------------------(DB/table操作)----------------------------------------

/* show */
show databases; /* データベース一覧を見る */
show tables; /* テーブル一覧を見る */

/* use */
use sample;

/* 作成 */
create database sample; /* DB作成 */

/* テーブル作成 */
create table book(
    id int primary key,
    title varchar(100),
    price int
);

/* 消去 */
drop table book;

--------------------------------(レコード操作)----------------------------------------

/* 取得 */
select * from テーブル;
select title from テーブル; /* プロパティが条件 */
select * from テーブル where 条件; /* 要素が条件 */
select * from テーブル order by price desc; /* 降順(3→2→1) */

/* 作成 */
insert into テーブル values (要素);
insert into テーブル (属性) values (要素);

/* 更新 */
update テーブル set 更新内容 where 条件;

/* 消去 */
delete from テーブル where 条件;

---------------------------------(select条件)-----------------------------------------

select distinct 属性 from テーブル; /* 重複なし */
select count(属性) from テーブル; /* 数量 */
select coalesce(属性,0) from テーブル; /* null→0 */
select 属性 別名 from テーブル; /* null→0 */
select * from テーブル where 属性 between 1250 and 2500; /* 1250以上かつ2500以下 */
select * from テーブル where 属性 not between 1250 and 2500; /* NOT 1250以上かつ2500以下 */

---------------------------------(結合操作)------------------------------------------

select 取得属性 from テーブル1 inner join テーブル2 on テーブル1.結合属性 = テーブル2.結合属性;/* 内部結合 */
select 取得属性 from テーブル1 left join テーブル2 on テーブル1.結合属性 = テーブル2.結合属性;/* 外部結合 */

------------------------------(トランザクション)--------------------------------------

/* コミット */
set autocommit = 0; /* コミット開始(オートコミットOFF) */
select @@autocommit; /* コミット閲覧m */

commit; /* コミット完了 */