データベース基礎

SQLとは

RB(リレーショナルデータベース)を操作するための言語

 

SQL分類の種類

DML(Data Manipulation Language)

データ操作

select・insert・update・delete

 

DDL(Data Definition Language)

データ定義

Create Database・Drop Databese・Create User・Drop User

Create Table・Drop Table

 

DCL(Data Control Language)

データ制御

Start Trasction・Commit・Rollback・Grant・Revoke

 

DML

select データ取得

insert データ登録

update データ修正

delete データ削除

 

DDL

CreateDetabese データベース作成

DropDatabese データベース削除

CreateUser ユーザ作成

DropUser ユーザ削除

CreateTable テーブル作成

DropTable デーブル削除

 

ユーザ作成

Grant All → 権限付与

 

テーブル作成

(ex)

Create table user-table(

      user_id INT,

      user_name VARCHAR(50),

      tel_no VRCHAR(50)

);

 

データ登録

insert文(DML

(ex)

insert into user_table values

(1,'田中','0311112222');

 

データ操作基本言語(DML基礎)

select文

(ex)

select * from user_table;

選択する 全て 〜から ユーザテーブル

*→全てのカラム

select user_name from user_table;

選択 ユーザネームを 〜から ユーザテーブル

where user_id=1;

ただし user_idが1のみ

 

insert文

(ex)

insert into user_table

values (10,'伊藤','0122223333');

カラム指定なし

insert into user_table

(user_id,user_name) values

(20,'高橋');

カラム指定あり

 

update文

(ex)

update user_table

set tel_no='111122223'

where user_id = 10;

whereで条件指定しないと変更するカラムを全更新してしまうので注意!

 

delete文

(ex)

delete from uer_table

where user_id = 10;

 whereで条件指定しないと変更するカラムを全更新してしまうので注意!

 

比較演算子

A=x Aとxは等しい

A!=x Aとxは等しくない

A<>x Aとxは等しくない

A>x Aはxより大きい

A<x Aはxより小さい

A>=x Aはx以上

A<=x Aはx以下

A in(x,y) Aがxかyである

A is null Aがnullである

 

論理演算子

A AND B AかつB

A OR B AまたはB

DB概要

データベースとは

複数のユーザが情報を共有して使用するための場所のこと

(テキストファイルとかだと整理が大変・・・)

 

DBMSとは

情報のメンテナンスを行いデータの管理が必要になる

→その情報を管理するものがDBMS

 

データベースの構成

スタンドアロン構成

データベースとアプリケーションを同一マシンで内で

動作させる構成(JavaとDBが同じPCに

 

クライアント/サーバ構成

データベースをサーバマシン上で動作させ、クライアントアプリケーションから

DBサーバ上のデータベースへアクセスする構成(JavaとDBが分離)

 

ウェブ構成

現在主流の構成でクライアントはブラウザを利用してインターネットにアクセスし

webサーバに接続する

 

データベースの種類

データベースの中でもテーブル(表)によってデータを関連づけて管理するものを

リレーショナルデータベースと呼ぶ

管理するソフトウェアをRSDBと呼ぶ

 

NoSQLの種類

NoSQLとは

RDBMS以外のデータベースを指す大まかな分類語

 

テーブル(表)とは

表(テーブル)とはデータを格納するオブジェクトでリレーショナルデータベースの

基本となるもの

縦軸・横軸の二次元形式で

縦軸を列(カラム)

横軸をロウまたはレコードという

縦軸はデータの属性・横軸はデータ

 

データ型

データ型とは列に対して格納するデータを制限する方法

文字 varchar 最大サイズ指定可変長文字列

   char  固定長文字列

   text  制限なし可変長文字列

数値 int  4バイト整数型

   numeric 可変精度数値型(小数点可)

日付 date  日付型

コレクション

コレクションとは

配列と似ていて、複数のインスタンスを1つの変数で扱い、操作できる

インスタンスを集める」イメージ

 

Array List

プログラムの処理の順序

①import

②宣言

③追加

④中身を表示

 

1 import

ArrayListが所属しているのは、java.utillなのでimportが必要

 

2 宣言

ArrayList宣言時にどの型のインスタンスを入れるのか指定する

ジェネリクスという

(ex)

ArrayList<Date>

Date型のインスタンスを追加

 

3 追加

インスタンスを追加する度に箱が増えていくため「箱の数」を

気にせずに使える(可変長)

(ex)

name.add("山田");

 

4 中身を表示

name.size()はarray.lengthと同じ(箱の数を取得)

name.get(添字) は array[添字]と同じ(箱の中身を取得)

 

コレクションにできないこと

基本型を型に指定することはできない

→ラッパークラスを指定する

(ex)

int → Integer

 

拡張for文

(ex)

for (String name:names){

   System.out.println(name);

}

 

イテレータ

(ex)

import java.util.Iterator

:

Iterator <String> it = names.iterator();

while(it.hasNext()){

  String name = it next();

  Syetem.out.print(name);

}

・取り出し方法の1つ

・next();→要素を取得してカーソルを1つ下げるnextメソッド

 

ArrayListの親

①List系:重複許可、順序保証

②set系:重複不可、順序非保証

③Map系:ペアの値を格納

 

HushMapクラス

MapインターフェースにHusuMapクラスのインスタンスを格納している

Mapインターフェースはキーと値をペアにして管理する構造になっている

書き方 Map<キー、値>

例外

例外とは

プログラム実行時に想定外の事態が発生して処理が止まってしまうものがある

このような想定外の事態を例外(exception)という

→プログラムが止まらないように対策しておくことができる・・・(例外処理)

 

例外処理の流れ

try-catch文

tryブロック内で処理を実行中に例外が発生すると、catchブロックに移動して

処理が継続される

 

例外の種類

・error系例外

catchする必要がない→プログラムでは解決できないため

・exception系例外

catchすべき→プログラムを続けない方が良いため

・RuntimeException系例外

catchしなくてもいい→プログラムで対処できるため

 

例外インスタンス

例外が発生した場合、例外の詳細情報が詰まったExceptionインスタンス

変数に代入される

printstackTrace()はExceptionインスタンスが持っているメソッド

 

catchの仕方

catchは複数書くことができる

多態性が効いてしまい、Exceptionの子インスタンスは全てcatchしてしまう

そのため、Arithmetic Exception等のcacth処理が下にある

絶対に行わないのでコンパイルエラーになってしまう

 

必ず行う処理

(ex)ファイルの書き込み

書き込み処理が正常動作しても例外が発生しても「ファイルを閉じる」

という処理が絶対必要になる

→finallyを使う

最終的に行う処理

(ex)

}finally{

  ファイルを閉じる

}

 

例外の伝播

メソッドを呼び出していくと例外が発生した時に途中のメソッドで

try-catch処理をしてしまうとmainメソッドは例外が起きていない

認識になってしまう

スロー宣言・・・例外伝播を許可

書き方

アクセス制御 戻り値 メソッド名() thorows 例外クラス1,

例外クラス2{

     メソッド処理内容

}

(ex)

public static void subSub() throws IOException {

   FileWriter fw = new FileWriter("hoge.txt");

}

 

スロー宣言の影響

1 呼び出される側のメソッドは、メソッド内部での「〜Exception」の

キャッチが義務ではなくなる

2 呼び出す側のメソッドは「〜Exceptionを伝播してくる可能性が

あるメソッド」の呼び出しをtry-catch文で囲む義務が生まれる

 

例外をもみ消さない

空のcatch文を書くなら理由を明確かつコメントで記載すること

 

例外を発生させる

故意に例外を発生させる

書き方 throw 例外インスタンス

※一般的にはthrow new 例外クラス名("エラーメッセージ")のように書く

オリジナル例外を定義できる

 

オリジナル例外

必ずExceptionクラスを継承させる

(ex)

public class Original extends Exception

Javaを支える標準クラス

すべてのクラスの祖先

クラスを定義する時にextendsで親クラスを指定しなければ自動的に

objectクラスを継承したとみなされる

→public class User extends object{  }

 

objectクラス

すべてのクラスにとっての親クラス

なぜ作成されているのか・・・

1 多態性を利用できるようになる

2 すべてのクラスが最低限備えるべき、メソッドを定義できるから

objectクラスのto Stringは「クラス名@英数字」を表示する内容に

なっている

オーバーライドすれば表示内容を変更できる

 

基本データ型に対応するクラス

ラッパークラス

基本データ型にはインスタンスが格納できないが、基本データ型に

対応したクラスがJavaには用意されている

 

ラッパークラスのメリット

1 便利なメソッドを提供

2 インスタンスとして扱えるようにする

 

自動変換機能

→Auto Boxing/Auto Un Boxing

(ex)

Integer in = num 1; //Integer型に変換

int num2 = in;  //int型に変換

 

アノテーション(注釈)→付加情報の追加

1 @Override・・・オーバーライド宣言

2 @Deprected・・・非推奨の宣言

3 @SuppressWarnings・・・警告を抑制する

多態性(ポリモーフィズム)

多態性とは

「あるものをあえてザックリ捉える」ことでメソッドを享受しようとする機能

(ex)

AnimalクラスはHumanクラスの親クラス

Animal a = new Human();

HumanインスタンスをAnimal型に代入する

作成したインスタンスを別の型として捉える機能

 

何でも箱に入れられるのか?

親子関係、つまり継承をしていないといけない

抽象クラスやインターフェイスインスタンスを生成することはできないが

変数の型としては使用することができる

 

多態性の注意点

Aの属性・操作とBの属性・操作を切り替えて使用することができる

(ex)

Animal a = new Human();

Human h = (Human) a;

のようにキャスト演算子を使えばできる

 

キャスト失敗のリスク

キャストしても大丈夫かチェックする

変数 instance of 型名

※is-a・・・継承するという意味

is-a→true

is-aでない→false

 

多態性のメリット

・配列記述の簡素化

・メソッドの引数における汎用性

 

メソッド引数における汎用性

同じ呼び出し方なのに多数の異なる状態を生み出すことがある

多態性

引数を親にすることで

→呼び出し方はザックリで処理は渡すインスタンス次第となる

高度な継承

高度な継承とは

他者のプログラマのために作るという異なる視点が必要になる

 

実現するための弊害

継承先でどんな操作になるのか具体的なことがわからない

newによるインスタンス生成ができてしまうと異常事態

 

弊害の解消

どんな操作になるのか具体的にわからない

→オーバーライドすれば解決できる

newにようインスタンス生成ができてしまうと異常事態

→privateアクセス修飾子をつけるしかない

 

心配事の解消①

詳細未定のメソッドは抽象メソッドという

書き方

アクセス修飾子 abstract 戻り値 メソッド名(引数リスト);

(ex)

public abstract void waru();

abstractはオーバーライドを強制する!

 

心配事の解消②

インスタンス生成ができないクラス

抽象クラス

書き方

アクセス修飾子 abstract class クラス名 {  }

(ex)

public abstract class Kanagata{  }

抽象メソッドを持ったクラスは必ず抽象クラスにする

 

より抽象的なもの

抽象メソッドしか持っていないものをインターフェースというクラスで記載できる

特徴

1 抽象メソッドしか定義できない

2 フィールドは定数のみ記述が許されている

書き方(ex)

public interface Animal{

    public abstract void eat();

}

public abstractを省略してvoid eat();とすることも可能

 

インターフェイスの実装

interfaceはimplementsというキーワードを使い実装してオーバーライドを行う

書き方

アクセス修飾子 class クラス名 implements インターフェイス

(ex)

public class Human implements Animal{  }

実装は親を複数作ることができる(多重実装)

書き方

アクセス修飾子 class クラス名 implements インターフェイス名,

インターフェイス名2{  }

(ex)

public class Human implements Animal,Animal2{  }