- 投稿日:2020-06-29T22:25:14+09:00
所有図書のデータ管理(ポートフォリオ)
初投稿をいたします。中小企業に勤務している新卒1年目の者です。勉強のためにポートフォリオを先輩社員からアドバイスをいただきながら作成しています。使用するコードの意味や働きを誤解していたらご指導のほどよろしくお願いします。使用している開発ソフトは「Eclipse」です。太字がコード、//が下のコードについて解説しています。
ポートフォリオ内容
・所有している本の簡易管理システム(所謂My図書館)
コードでしたいこと
・所有している本の検索
使うファイル
・Own.java(jspから最初に入るjavaファイル)コード
Own.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//ownBook.jspで受けとった3つのデータの型を指定 送られてきたデータ(request.getParameterの後のデータ名とその中に格納されているデータのこと)にそれぞれString型のこのメソッドで使うデータ名に置き換える 送られてきたのは検索したい本のタイトル、著者、出版社↓
//書いていて思った。request.getParameterは親インターフェースでHttpServletRequestの定義がされてる必要があるのなら、いつ満たした?上のHttpServletRequestでいいのか?↓String bookTitleSerch = request.getParameter(“bookTitleSearch”);
String bookWriterSerch= request.getParameter(“bookWriterSearch”);
String bookCompanySerch= request.getParameter(“bookCompanySearch”);//book型のownBookList変数を作成 取り出したいデータ型がString型のみ、int型のみとは限らないためbookというデータ型を作成(voidと定義していることもあって型の名前は分かりやすければなんでもいい) ArryListはデータの集まりを配列のように取り扱うもの。当てはめて詳細に説明するとbook型のownBooksListというメソッドを作成。
ArrayList ownBooksList = new ArrayList();//例外処理 エラーの起こるであろう場所を指定 なぜここだったのだろう?
try {
// リストを取得 =メソッドに格納する情報 OwnDBAccess.javaのSelectに処理を委託し、その際に上記のownBookList変数を一緒に引数として渡す。ownBooksList = OwnDBAccess.Select(bookTitleSerch, bookWriterSerch , bookCompanySerch);
//例外処理 エラー発生時にフロント側には何も表示されない
} catch (SQLException e) {
e.printStackTrace();
}
// リクエストに設定 リクエストスコープを使ってインスタンスを保存。これにより、検索したい3つのワードを受け取るまで所持できる
request.setAttribute(“ownBookList”, ownBooksList);//リクエストしたsetAttributeを表示したいjspファイルの指定 決まり文句の為省略
ServletContext context = getServletContext();
RequestDispatcher dis = context.getRequestDispatcher(“/OwnReslut.jsp”);
dis.forward(request, response);
}・DBAccess.java
public static ArrayList Select(String bookTitleSerch , String bookWriterSerch , String bookCompanySerch) throws SQLException {
//Daoファイルのdao変数にはなにも入れない 明日、Daoについてアウトプットします。Dao型の変数(?)を定義。Daoは主にデータベースの操作に関するコマンドを入力する為のファイル。ここでnullとするのは処理したいこと、送られたものを広義に受け取るため。メソッド内で変数の定義をしていないと突然現れた変数に対する処理が出来ない為。Dao dao = null;
//上記に同意味。resultという名前の変数を作成、受け取りたいがためにnull。また、検索結果によって返ってくるデータが変わるため。
ArrayList result = null;//例外処理。
try {
//daoインスタンスを作成。ここで作る意味は検査例外が発生する可能性がある処理を含むため。データベースとの接続を行い、SQlのパスワード等の不一致により例外が発生しやすい。
dao = new Dao();//DaoファイルのOwnメソッドに引数として()内の変数を渡す。並びに受け取ったデータを上記result変数に代入
result = dao.Own(bookTitleSerch , bookWriterSerch , bookCompanySerch);
}finally {//リソースの開放。必要な情報のみを取り出す為。
if(dao != null) dao.close();
}//一つ上のreslutに渡す。
return result;
}・Dao.java
//以下のメソッドではデータベースの操作と取り出したいデータの指定を行っております。あと、例外処理がしたいのでthrowsを書いてもらいました。()内は引数としてDBAccessから送られてきた三つの変数です(受け取ったら戻り値になるんでしたっけ?)。public ArrayList Own(String title , String writer , String company) throws SQLException{
// SQLで行う処理を記入 今回はbooksテーブルの条件に合致するすべてのデータを取り出したいので以下のコードです。
sql = “select * from books where title like ? and writer like ? and company like ?”;//以下はSQLを実行するためのコードだったと思います(うろ覚え)。これ書かなきゃいけない理由は分かりません。調べてもこう動く、こう書くとしか出てきませんでした。ご教示よろしくお願いします。
PreparedStatement ps = null;
//これが確か、dtoにつなげるためのコードだったと思います。結果が検索内容によって変わるのでnull。
ResultSet rs = null;// Listメソッドの作成 メソッドには上記sqlの?に入れるカラム名が入る
ArrayList list = new ArrayList();
//例外処理ですね。起こりそうな例外を書きます。
try {
// プレースホルダを設定 やはりprepareStatementがあるためSQLを動かしたい
ps = con.prepareStatement(sql);//上記sql=の中の?に入る変数。昨日のファイルにもあるtitleという引数を入れます。
ps.setString(1, “%”+title+”%”);//上記にほぼ同様の処理です。
ps.setString(2, “%”+writer+”%”);//上記にほぼ同じです。
ps.setString(3, “%”+company+”%”);// SQL実行
rs = ps.executeQuery();
//検索したデータがすべて表示されるまで繰り返し取り出す
while(rs.next()) {
//itemメソッドの作成 ここでdtoファイルのitemインスタンスを作成。dtoファイルにとびます。
book item = new book();
// 本のタイトルを取得してitemへ格納
item.setTitle(rs.getString(“title”));
//本の著者を取得、itemへ
item.setWriter(rs.getString(“writer”));
//本の出版社を取得、itemへ
item.setCompany(rs.getString(“company”));
//itemメソッドに格納
list.add(item);
}//これもリソースの開放
rs.close();
}finally {//これもリソース(ry
ps.close();
}
//呼び出し元の上記listメソッドに返す
return list;
}Dto
//このファイルは今まで登場した三つの変数を一つの箱として結果に渡すダンボール箱の役割を持っています。変数を受け取ってもどこに格納するかを指定します(自信あり)。//前言撤回です。こんな感じだろうなとかいたので細かいところは説明できません。
public class book implements Serializable{
private static final long serialVersionUID = 1L;// タイトル
public String title;
// 著名
public String writer;
// 出版社
public String company;// ゲッター/セッター
public String getTitle() {
return title;
}public void setTitle(String title) {
this.title = title;
}public String getWriter() {
return writer;
}public void setWriter(String writer) {
this.writer = writer;
}public String getCompany() {
return company;
}public void setCompany(String company) {
this.company =company ;
}}
本の検索に関してはこの辺で。 諸先輩方、ご意見や間違いの指摘、お願いします。
- 投稿日:2020-06-29T21:34:03+09:00
マッスルJavaオブジェクト指向 2日目 ~継承~
継承とは
- クラスの定義内容を受け継ぐこと
- メソッド・フィールドを定義し直さなくてもそのまま使える:便利
Javaにおける継承
- 拡張:継承したクラス(子クラス)で独自のメソッドやフィールドを追加
- 再定義(オーバーライド):継承したクラス(子クラス)で元のメソッド・フィールドの定義を変更できる
継承のイメージ
- 親よりも子の方が強い
- 亀仙人(親クラス)と弟子の悟空(子クラス)
- 弟子の悟空は かめはめ波(親の定義をそのまま使える) + 3倍かめはめ波(オーバーライド) + 舞空術(拡張)
継承の用語
元のクラス(継承されるクラス)
- 親クラス
- スーパークラス
- 継承元
元のクラスを継承したクラス
- 子クラス
- サブクラス
- 派生クラス
- 継承クラス
- 継承先
継承のコード例:定義の仕方
- extendsキーワード
- 子クラスでは、親クラスのフィールドやメソッドを書かなくても使える
- 親クラスは1つしか指定できない
class 子クラス名 extends 親クラス名{ }継承のコード例
- 親クラス
public class Animal{ public void eat(String f){ System.out.println(f+"を食べます"); } public void sleep(){ System.out.println("眠ります"); } public void wakeUp(){ System.out.println("起きます"); } }
- 子クラス
- Birdクラスは、親クラスのAnimalクラスのsleepメソッドやwakeUpメソッドを呼び出せる
- ①:拡張
- ②:オーバーライド
public class Bird extends Animal{ // ①:拡張 public static int wing = 2; pulic void fly(){ System.out.println("飛びます"); } // ②:オーバーライド(上書き) // 親と同じメソッド名 pulic void sleep(){ System.out.println("木の上で眠ります"); } }「super」 キーワード
- オーバーライドを行う際に、親クラスの定義を利用できる
- オーバーライドした子クラスのメソッドの中から、親クラスのメソッドやフィールドにアクセスしたいときに用いる
public class Bird extends Animal{ pulic void sleep(){ System.out.println("木の上で眠ります"); // super super.sleep(); }
- 投稿日:2020-06-29T14:32:37+09:00
私の学習記録
私の学習記録
4月から6月にかけて、自己学習をする機会がありました。
私はシステムエンジニアとして、自宅学習ならではの学習テーマを選びました。以下の点を踏まえるように心がけました。・プログラミング(コーディング)がプロジェクトの全てではない ・プログラミングはスキルの全部ではなく一部である ・業務の幅の拡大あるいは業務効率化のために役立つが、今の自分に抜けがあるものは何か実際に学んだのは以下のテーマです。OSは
Windows 10 Home
です。(Github)
プログラミング "周り" のスキルに関する学習
- 優秀なエンジニアとはどんな人か
優秀なSEに必要な考え方
技術系カンファレンスにいこう
働きがいとキャリアの高め方
エンジニアのキャリアと組織内での働き方の話- エンジニアとしての「ヒューマンスキル」
ヒューマンスキル
質問力
対人力
システムエンジニアのための文章力を向上させるコツ
ビジネスメール問題集- プロジェクトマネジメント関連
これからはじめるWebプロジェクトマネジメント
プロジェクト・マネジメントのメカニズムとプロセス設計
プロセス設計- ITサービスマネジメント
ITサービスマネジメント
情報セキュリティ- エンジニアとしての経営学
エンジニアの経営学- エンジニアとしての英語との向き合い方
IT英語
英文メール- マークダウンの書き方
Markdown
プロジェクトの "流れ" に関する学習
- IT企画及び要件定義(いわゆる「上流工程」)
IT企画~要件定義
最速で身につく要件定義入門- 設計に関する学習
サクッとわかる外部設計入門
サクッとわかる内部設計入門
画面遷移図
ER図
機能定義書
テーブル設計・データベース設計- Webデザインに関する学習
Webデザイン入門
Bootstrap
Sass- ソフトウェアテストに関する学習
ソフトウェアテスト- ログ収集に関する学習
ログ収集・分析基盤構築
"コンピュータサイエンス" に関する学習
"業務自動化" に関する学習
- Excel VBAに関する学習
(ExcelVBA)基礎
(ExcelVBA)エキスパートへの道
(ExcelVBA)ファイル出力編- Google Apps Scriptに関する学習
GoogleAppsScript
"Javaが一定以上できるようになったときに合わせて身に付けたい技術" に関する学習
- Go言語に関する学習
Golang
- Dockerに関する学習
Docker&Kubernetesによる開発- Scalaに関する学習
Scala- Groovyに関する学習
Groovy
"JavaScriptフレームワーク" に関する学習
- VueJS及びFirebaseに関する学習
Vue.js学習(速習編)
Vue.js学習(詳細編)
Firebase- TypeScriptに関する学習
typescript-lesson
typescript-type
interfaceの使い方
ジェネリクスの仕組み
デコレーターの使い方
TypeScriptの応用的な使い方
健康管理アプリを作る- AngularJSに関する学習
AngularJS- ReactJSに関する学習
React
iTunes楽曲検索アプリ
"Java関連のスキルアップ" に関する学習
- アルゴリズムに関する学習
Javaアルゴリズム- コレクションフレームワークに関する学習
コレクションフレームワーク- インターフェース・ラムダ式・ストリームに関する学習
インターフェース・ラムダ式・ストリーム- 日付の扱い方及び国際化
日付の扱い方
プロパティファイルの読み込み・国際化- データベースアクセス・CSV出力
Spring BootでMySQLにアクセス・CSV出力今後は、資格取得を目指したり、これらの学習内容を線で結んで(勿論、抜けのある、身に付ける必要のある技術はまだまだ盛沢山です)大規模なアプリケーションを自分の手で実装してみる(Githubで星の数を上げられるようにしたい)といったことをしようと考えています。さらには、ITの専門職大学院で専門性をさらに極めていくということも検討しています。
- 投稿日:2020-06-29T08:52:32+09:00
Java Silverに合格するのに必要な知識まとめ
はじめに
仕事でJavaを使う必要があり、とりあえず体系的に学ぶためにJava Silverを取ろうと思ったので、そこで学んだことをキーワード的に簡単にまとめて行きます。
Javaの基本
クラス宣言
クラス宣言はフィールドとメソッドで構成される。コンストラクタはメソッドの一部
パッケージの目的
- 名前空間を提供し、名前の衝突を避ける
- アクセス修飾子と組み合わせてアクセス制御機能を提供する
- クラスの分類を可能とする
パッケージ宣言
- パッケージ宣言は、必ずソースコードの先頭行に記述する
- パッケージ宣言よりも前に記述出来るのはコメントだけ
クラスのインポート
- java.langパッケージは基本的なクラスがまとめられたパッケージであり、インポート宣言省略可能
- 指定したパッケージに属するクラスはインポートされるが、サブパッケージはインポートされない
パッケージとアクセス制御
パッケージに属するクラスは、同じパッケージのクラスからしかアクセスできない。無名パッケージに属するクラスは同じ無名パッケージに属するクラスからしかアクセスできない
staticインポートの書式
本来、staticなフィールドやメソッドは、クラス名.フィールド名(メソッド名)の書式でどのクラスのものか明示する必要がある。それらを名称だけで省略表記するようにするための物がstaticインポート
import static パッケージ名.クラス名.フィールド名(メソッド名)メソッドのstaticインポート宣言では、メソッド名にかっこや引数をつけない
staticインポートの仕様
- インポートしたクラスに、インポートされたメソッドやフィールドと同名の物が存在した場合、そのインポートは無視される
- 複数の同名のフィールドや、メソッドをインポートした場合、コンパイルエラーになる
mainメソッド
クラスには複数のメソッドを定義出来るが、処理を始めるためのメソッド、エントリーポイントの記述やルールは以下のようになる
public static void main(String[] args) { }
- 公開されてること(Public)
- インスタンスを生成しなくても実行出来ること(Static)
- 戻り値は戻せない(Void)
- メソッド名はmain
- 引数はString配列型を1つ受け取ること
javaコマンド
javaコマンドは、JVMを起動するためのコマンド。構文は以下の通り
java 完全修飾クラス名 [引数 引数 ・・・]Javaのデータ型の操作
Javaのデータ型
Javaのデータ型は、プリミティブ型(整数、浮動小数点数、真偽値、文字)と参照型(オブジェクト型、列挙型、配列型)がある。
プリミティブ型のデータ型は以下の通り
bool型はない
データ型 値 boolean true,false char 16ビットUnicode文字 short 16ビット整数 int 32ビット整数 long 64ビット整数 float 32ビット単精度浮動小数点数 double 64ビット単精度浮動小数点数 整数リテラル
リテラルとはソースコードに記述する値のことで、Javaでは、整数値はint型、浮動小数値であれば、double型、真偽値であれば、boolean型、文字であればchar型で扱われる。
接尾辞、接頭辞
接尾辞、接頭辞をつけることで、データ型を明示したり、10進数以外の表記が可能
・接尾辞の例
long型・・・L、float型・・・f・接頭辞の例
0・・・8進数
0x・・・16進数
0b・・・2進数アンダースコア
アンダースコアを使った数値表記は、桁数の多い数値リテラルの見やすさを向上させる目的で使用され、以下のルールがある
- リテラルの先頭と末尾には記述ができない
- 記号の前後には記述できない
文字リテラル、文字列リテラル
charは文字を表すデータ型
chara型に代入できるのは以下の通り
- シングルクォーテーションで括った文字(文字リテラル)
- シングルクォーテーションで括った¥uから始まるUnicode番号(文字リテラル)
- 0~65535までの数値(数値リテラル)
文字リテラルはシングルクォーテーションで括る
文字列リテラルはダブルクォーテーションで括る識別子の命名規則
識別子とは、変数、メソッド、クラスなどの名前の事。基本は自由に決められるが、以下の規則がある
- 予約語は使えない(int,ifなど文脈表現など)
- 使える記号は、アンダースコアと通貨記号($)のみ
- 数字から始めてはいけない(2文字目以降)
null
nullは参照型の変数が参照を保持していないことを表現するためのリテラル。空文字("")とは異なる
メソッドの呼び出し方
メソッドの呼び出し方は以下となる
- メソッド名(引数)・・・同じインスタンスに定義されているメソッド
- 変数.メソッド名(引数)・・・インスタンスに定義されているメソッドの場合
- クラス名.メソッド名(引数)・・・staticなメソッドの場合
シグニチャ
シグニチャとは、メソッド名と引数のリストのセットのこと。Javaにはオーバーロードという仕組みがあり、同名のメソッドが複数存在する可能性があるため、シグニチャを使って、メソッドを見分ける。
ガーベッジコレクション
C言語などではメモリを確保したり、解放したりするコードをプログラムに記述する必要があるが、Javaには自動メモリ管理機能がある。
カーベッジコレクタが不要なインスタンスを探し、破棄することをガーベッジコレクションという。ガーベッジコレクションの対象は、どこからも参照されなくなったインスタンスで、代表的なタイミングとして、変数にnullが代入されたとき。演算子と判定構造の使用
代入演算子
代入演算子の種類と意味は以下の通り
演算子 使用例 意味 = a = 10; aに10を代入する += a += 10 aにa+10を代入する -= a -= 10 aにa-10を代入する *= a *= 10 aにa*10を代入する /= a /= 10 aにa/10を代入する マイナス演算子
マイナス演算子(-)には、引き算と正負反転の2種類がある。
型変換
大きな範囲の値を小さな変数に代入するときは、明示的なキャストが必要
int a = 15; short b = (short) a;整数の数値リテラルはint型、浮動小数点の場合はdouble型が基本のため、その値を小さな変数にいれる場合、原則明示的なキャストをしなくてはならない。byte型、short型の変数に代入する変数リテラルの場合、その値が方の範囲内であれば、コンパイルエラーとならない。
・byte型とshort型の範囲
型名 範囲 byte -128~127 short -32768~32767 インクリメントとデクリメント
インクリメント(++)とデクリメント(--)は変数の値に1を加算したり、減算するための演算子。
他の演算子と組み合わさった場合、前置きした場合、インクリメント(デクリメント)されてから代入され、後置きした場合、代入されてからインクリメント(デクリメント)される。int a = 10 int b = 10 int c = ++a //aをインクリメントしてからcに代入 a=11,c=11 int d = b++ //bを代入してからインクリメント d=10,b=11随時追記しています。