JAVA関連のことを調べてみた2023年07月25日

JAVA関連のことを調べてみた2023年07月25日

【SpringBoot】図書の貸出管理システムを作りたい

# はじめに
前回までの内容で図書管理システムの設計しログイン機能を実装したので、それにChatGPTに質問しながらEclipseを使って開発をした流れを記事にしました

https://qiita.com/EasyCoder/items/d4c5da73ba922fb189e1

https://qiita.com/EasyCoder/items/3a717db1761ddd9d3ae0

## システム実装に必要なリソース

今回は図書の貸出登録機能を実装するため以下が必要になります

### 追加するテーブル
– 図書の情報(Booksテーブル)
– 貸出ユーザー管理(BorrowedBooksテーブル)
– 貸出履歴管理(BorrowHistoryテーブル)

### 追加する機能
– ブラウザで図書の一覧表示
– 図書の検索機能
– 貸出ボタン/返却ボタン
– 図書詳細閲覧

## 一覧表示機能の実装(Booksテーブルの実装)

### ファイル構造図(Booksクラス)
“`java:追加予定図
src/
main/
java/
com/

元記事を表示

[Java] 文字列の変換

# 文字列の変換とは
* Javaで文字列を変換・加工できる
# 基本的な文字列変換方法
## toLowerCase()
* 大文字を小文字に変換する
“`java:toLowCase()
public String toLowCase()
“`
## toUpperCase()
* 小文字を大文字に変換する
“`java:toUpperCase()
public String toUpperCase()
“`
## trim()
* 前後の空白を除去する(半角スペース、改行文字やタブ文字)
* 全角スペースは含まない
“`java:trim()
public String trim()
“`
## replace()
* 文字列を置き換える
* 対象の文字列から“`第1引数“`で指定した文字列を“`検索“`し、マッチした文字列を“`第2引数“`で指定した文字列で“`置換“`する。そして、置換後の文字列を戻り値として返す。
“`java:replace()
public String replace(String before, String a

元記事を表示

【JavaGold】NIO.2②

## 概要
`java.nio.file.Files`クラスは、ファイルの作成・コピー・削除・移動・属性の読み書きなど、さまざまなファイル操作を簡単に行うためのメソッドを提供する。

#### 主なメソッド

– `copy(Path source, Path target, CopyOption… options)`:
指定したファイルを別の場所にコピーする。

– `createFile(Path path)`:
指定したファイルを新規作成する。

– `delete(Path path)`:
指定したファイルを削除する。

– `move(Path source, Path target, CopyOption… options)`:
指定したファイルを別の場所に移動する。

– `exists(Path path)`:
指定したパスにファイルが存在するかどうかを確認する。

– `deleteIfExists(Path path)`:
指定したパスのファイルの存在確認と削除を同時に行う。

– `getAttribute(Path path, String attri

元記事を表示

【JavaGold】NIO.2①

## 概要
Java SE 7から導入された、新しいI/O(Input/Output)APIのひとつである。
NIO.2(JSR 203: More New I/O APIs for the Java Platform)は、従来のJava I/O API(`java.io`パッケージ)よりも高度なI/O操作をサポートしている。

NIO.2ではファイルやディレクトリへのパスを表す`java.nio.file.Path`インタフェースを使用する。

#### 主なメソッド

– `static Path of(String first, String… more)`:
指定された文字列からパスを作成する。

– `Path getParent()`:
パスの親ディレクトリを返す。

– `Path getFileName()`:
パスのファイル名部分を返す。

– `toAbsolutePath()`:
絶対パスを取得して返す。

– `Path resolve(Path other)`:
他のパスと結合して新しいパスを作成する。

– `Path normalize()`:
パス

元記事を表示

Javaの配列について学習してみた

# 概要
Javaの配列について学習してみました。以下のページを参考にしました。

配列

https://www.javadrive.jp/start/array/

配列の宣言と配列の作成

https://www.javadrive.jp/start/array/index2.html

配列要素へのアクセスとインデックス

https://www.javadrive.jp/start/array/index4.html

配列の要素の初期化と規定値

https://www.javadrive.jp/start/array/index5.html

配列の長さを取得する(length)

https://www.javadrive.jp/start/array/index6.html

多次元配列を作成する

https://www.javadrive.jp/start/array/index7.html

多次元配列の初期化

https://www.javadrive.jp/start/array/index8.html

多次元配列の長さを取得する(length)

ht

元記事を表示

【JavaGold】カスタム・シリアライズ

## 概要
Javaのオブジェクトを直列化する際に、自由に書き出し、読み込みを制御できる方法である。

通常、Javaのシリアライゼーションは`Serializable`インタフェースを実装することによって行われる。
カスタム・シリアライズは、全てのフィールドを書き出したくない場合や、特定の方法でカスタマイズしたい場合に使用する。

カスタム・シリアライズでは、以下のメソッドを使用して制御を行う。

– **`private void writeObject(ObjectOutputStream out) throws IOException`**:
シリアライズ(書き出し)時に自動的に呼び出されるメソッド。
引数として`ObjectOutputStream`オブジェクトへの参照を受け取り、各データに応じたメソッドを使用して書き出したいフィールドを出力する。

– **`private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException`**:
デシリアライズ(読み込み)時に自

元記事を表示

【JavaGold】listFilesメソッド

## 概要
指定されたディレクトリ内のファイルとディレクトリの一覧を`File`オブジェクトの配列として取得する。

`listFiles()`メソッドは以下のように定義されている。

“`java
public File[] listFiles()
“`

このメソッドは、呼び出された`File`オブジェクトがディレクトリである場合に使用する。
ディレクトリ内のファイルやディレクトリに対して、`File`オブジェクトの配列を返す。
ディレクトリが空の場合、またはファイルではなくディレクトリが含まれていない場合は、空の配列が返される。

##### 例

以下のようなディレクトリ構造があるとする。

“`
/path/to/directory/
├── file1.txt
├── file2.txt
└── subdirectory/
├── file3.txt
└── file4.txt
“`

“`java
import java.io.File;

public class ListFilesExample {

元記事を表示

ArrayListのcapacityを使いこなしてパフォーマンスを向上させる

## はじめに

Javaでリストを作成するとき、以下のように`new ArrayList<>()`と書いてインスタンスを作成する例をよく目にするかと思います。

“`java
List list = new ArrayList<>();
“`

しかし、以下のように`new ArrayList<>()`の()内に数値を記述してインスタンスを作成することもできます。

“`java
List list = new ArrayList<>(500);
“`

上記例の500にあたる部分が、`initialCapacity`と呼ばれる引数です。この`initialCapacity`を利用することで、リストの操作のパフォーマンスを向上させることができます。
この記事では、`initialCapacity`に関する情報と、その使い方について解説します。

## まとめ

記事が少し長くなってしまったので、先に結論を記載します。詳細については以降で説明していきます。

– **initialCapacityとは**
– ArrayListインスタンスは

元記事を表示

[Java] 文字列の切り出し

# 文字列の切り出しとは
* 文字列の一部を別の文字列(または文字)として切り出すメソッド
# 基本的な文字列の切り出し方
## charAt()
* 指定位置の1文字を切り出す
“`java:chartAt()
public char charAt(int index)
“`
## substring()
* 指定位置から始まる文字列を任意の長さだけ切り出す
“`java:substring(int index)
public String substring(int index)
“`
“`java:substring(int index, int endIndex)
public String substring(int index, int endIndex)
“`
# サンプルコード
“`java:文字列切り出しメソッドの使用例
public class Main {
public static void main(String[] args) {
String s1 = “0123456789”;
System.out.

元記事を表示

【Android/Java】外部アプリ起動(Android11)

## やりたいこと
外部アプリを起動したい。
Android11から[package-visibility](https://developer.android.com/training/package-visibility/declaring?hl=ja)が導入され、外部アプリを起動するためのお作法が変更となった
とりあえず、起動させるためのお作法を記載

#### AndroidManifest.xml
~~~xml









元記事を表示

【JavaGold】Serializableインタフェース

## シリアライズとデシリアライズ

#### シリアライズ
メモリ上にあるインスタンスをストリームとして出力すること。
これにより、オブジェクトをファイルに保存したり、ネットワーク経由で送信したりすることができる。

##### 特徴

– データの永続化:オブジェクトをファイルに保存することで、後で再び読み込むことができる。
– ネットワーク通信:オブジェクトをバイトストリームに変換して送信することで、別のプログラムや別のマシンとデータをやり取りできる。

#### デシリアライズ
ファイルに書き出された情報を元にインスタンスを作り直すこと。
これにより、ファイルから保存したオブジェクトを読み込んだり、ネットワーク経由で受信したデータを元のオブジェクトに戻したりすることが可能となる。

シリアライズ、デシリアライズを行う場合、`Serializable`インタフェースを実装したクラスを使用する。

## Serializableインタフェース
オブジェクトのシリアライズ(直列化[^1])を行うインタフェースである。
[^1]:複数のインスタンスを1つにまとめること。

“`jav

元記事を表示

JavaでPostgreSQLのエラーコードを取得する

PostgreSQLには、エラーの種類に応じてエラーコードがある。
詳細は[公式ページ](https://www.postgresql.jp/docs/9.0/errcodes-appendix.html)を参照。
数えてみたら199種類あった。
とはいってもお目にかかるのはほぼ「23 クラス — 整合性制約違反」だとは思う。

このエラーコードをMyBatisでクエリ実行したときに取得したい。
※試してはいないが、別にMyBatisでなくてSpring JDBCやJPAなど他のデータベースマッパー、ORマッパーであっても同じようにできるはず。

catch節をこのようにする。

“`java
}catch(Exception e){
String errorCode = ((SQLException)e.getCause()).getSQLState();
System.out.println(errorCode);
}
“`

MyBatisでの一例

“`java
Articles articles = new Articles(){{
setArt

元記事を表示

非SpringBootプロジェクトでRestTemplateを使ってWebAPIを呼ぶ

SpringBootをのせないMavenプロジェクトにおいて、ResTemplateを使ってWebAPIを呼びたい。

### pomに下記を追加。

“`xml

org.springframework
spring-web
5.3.13


com.fasterxml.jackson.core
jackson-databind
2.15.2

“`

※jackson-databindがないと、実行時、
org.springframework.web.client.RestClientException: No Ht

元記事を表示

SpringBatch

Spring-Batchについて自分なりに学習したことをまとめます。(自分用)
今回はcsvファイルを一括でDBへ保存するといった内容です。
前提条件は以下の通りです。

Java8
SpringBoot2.7
MySQL5.7

## プロジェクトの作成

https://start.spring.io/

・Lombok
・SpringWeb
・SpringBatch
・MySQL Driver
・Spring Data JPA
上記を追加してプロジェクの作成。
ディレクトリは以下の通りです。

## ディレクトリ

~~~java
├── main/
├── java/
├── com/javabatch/spring/
│ ├── batch/
│ ├── config/
│ │ ├── CustomerProcessor.java
│ │ ├── SpringBatchConfig.java
│ ├── con

元記事を表示

【Java?】プリミティブ型

Java Silver?の試験対策として、Javaのプリミティブ型についてまとめました。
– ?間違いやすい! 見直しポイント
– ⭐ずばり出題される
– ?‍?着眼点・理由

# リテラル
ソースコードに直接記載される値のこと

## 整数リテラル
ソースコードに直接記載される数値を表す数字

### 2・8・16進法表記
||2進法|8進法|10進法|16進法|
|:—:|:—:|:—:|:—:|:—:|
|先頭の文字|`0b`|`0`|(なし)|`0x`|
|例|`0b1010`|`0777`|`42`|`0xCAFE`|
– ?先頭に`0`をつけると8進法になる
– `0999`などはコンパイルエラー
– うっかり先頭を`0`でパディングしないように注意!

### 区切り文字”`_`”
– 整数リテラルは`_`で区切ることができる
“` java
// 使用例)Byteごとに区切って分かりやすくする
int mask = 0x00_00_FF_FF;
int hogeFlagBit = 0b00000000_00000000_00001000_000

元記事を表示

[リサーチ・メモ] Mavenとは

## 背景
仕事でeclipseを使用して、「Maven install」や「Maven clean」を実行したが、正直Mavenが何者なのか理解せず、何となく使用していた為整理する。

## Mavenとは
Javaのプロジェクト管理ツール
Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、プロジェクトのライフサイクル(計画、設計、実装、テスト、デプロイ、メンテナンス)全体を管理するもの。

## POMとは
XML形式のファイル(通常pom.xmlという名前)に記述され、プロジェクトのビルド設定や依存関係、プラグイン、プロジェクト情報(例:プロジェクト名、バージョン、作者等)など、プロジェクトに関するすべての情報を定義する。
MavenはPOMを読み込み、定義に従ってプロジェクトをビルドすることにより、開発者は複雑なビルドプロセス(ソースコードから実行可能なソフトウェアアプリケーションまたはシステムを作り出す一連の手続き)を簡単に管理し、また他の開発者がプロジェクトを理解しやすくすること

元記事を表示

【Java?】Collectorのつかいかた(Java SE 8 -)

`java.util.stream.Collector`を使うと、配列のすべての要素どうしを計算する処理(数列の総和計算など)を効率化できるようだ。

# 総和計算を効率化したい
Q. 数が$+$で連結されている式$1+2+ \cdots +10$を効率よく(計算ステップ数が少なくなるように)3人で分担して計算するにはどのようにすればいいですか?
A. 以下の表のように『並列処理による効率化』をして計算すると4ステップで計算できる。

|計算者\ステップ数|1|2|3|4|
|:—:|:—:|:—:|:—:|:—:|
|A|$a_1=1+2$|$a_2=a_1+3$|$a_3=a_2+b_2$|$\sigma=a_3+c_3$|
|B|$b_1=4+5$|$b_2=b_1+6$|-|-|
|C|$c_1=7+8$|$c_2=c_1+9$|$c_3=c_2+10$|-|

この効率化は、与えられた式
$\sigma = 1+2+3+4+5+6+7+8+9+10$

$\sigma = (((1+2)+3)+((4+5)+6))+(((7+8)+9)+10)$
のよう

元記事を表示

ABC311A~Eの解答[Java]

## はじめに
今回はコンテスト中にEまで解けたのでそれを載せようと思います。

僕のライブラリは[提出結果](https://atcoder.jp/contests/abc311/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。

## A – First ABC
問題文は[こちら](https://atcoder.jp/contests/abc311/tasks/abc311_a)

一文字ずつ受け取って、HashSetのsizeが3になったところを出力しました。
“`A.java
final class Main {

private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimplePrinter

元記事を表示

『もういい加減「nullチェックをしたら安全」とかわけのわからないことを言うのはやめよう』をうろ覚えで書いた記事

## 前書き

昔のQiitaに「Nullチェックはいらない。むしろNullPointerExceptionは前向きに発生させるべきだ。」みたいな簡潔な内容の記事(※)があって感銘を受けたのですが、それが今現在全く見つからない(多分消えた)のでうろ覚えで書き起こしてみます。


・2019年くらい?に見た記憶。記事自体はそれ以前に書かれたかもしれない。
・ブラウザの1画面で完結するような短い内容。

(追記)
見つけた。いい記事なので読みましょう。消えたのが残念。

https://web.archive.org/web/20170605024132/https://qiita.com/hecateball/items/e0a8f8902ee7f5adda39

https://b.hatena.ne.jp/entry/s/qiita.com/hecateball/items/e0a8f8902ee7f5adda39

## 本文

最近の言語はNull安全が取り込まれているのに対し、JavaはいちいちNullチェックをしないといけないから面倒と言われている。

“`java
pu

元記事を表示

[Java] 文字列検索

# 文字列検索とは
* 文字列の内部から、別の文字列(または文字)を探す
* 1.含まれるか否かだけを判定するもの
* 2.「文字列のどこに含まれているか」という位置情報を返すもの
# 基本的な文字列操作(検索)
## contains()
* 一部に文字列sを含むか調べる
“` java:contains()
public boolean contains(String s)
“`
## startsWith()
* 文字列sで始まるかを調べる
“` java:startsWith()
public boolean startsWith(String s)
“`
## endsWith()
* 文字列sで終わるかを調べる
“` java:endsWith()
public boolean endsWith(String s)
“`
## indexOf()
* 文字列strが最初に登場する位置を調べる
“` java:indexOf()
public int indexOf(String str)
“`
## lastIndexOf()
* 文字列strを後ろから検

元記事を表示

OTHERカテゴリの最新記事