データベース基礎
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
select データ取得
insert データ登録
update データ修正
delete データ削除
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)
:
Iterator <String> it = names.iterator();
while(it.hasNext()){
String name = it next();
Syetem.out.print(name);
}
・取り出し方法の1つ
・next();→要素を取得してカーソルを1つ下げるnextメソッド
①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 インスタンスとして扱えるようにする
自動変換機能
(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{ }