JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

Java アプリケーション2

差分比較が遅い場合、いくつかの方法でパフォーマンスを向上させることができます。特に、以下の方法を試してみることをお勧めします:

1. インデックスの作成:
テーブルにインデックスを作成することで、検索と比較のパフォーマンスを大幅に向上させることができます。
2. 適切なデータ型の使用:
テーブルのカラムに適切なデータ型を使用することで、パフォーマンスを向上させることができます。
3. 一時テーブルの使用:
一時テーブルを使用して、データの読み込みや比較を効率的に行うことができます。

以下のコード例では、上記の改善を適用しています。

改善したコード例
“`Java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io

元記事を表示

Javaで「配列のすべての要素を指定した値で埋める(fill)」の動作を確認してみた

# 概要

Javaで「配列のすべての要素を指定した値で埋める(fill)」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample12_1.java
import java.util.Arrays;

class JSample12_1{
public static void main(String[] args){
int[] a = new int[3];
Arrays.fill(a, 10);

System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample12_1.java
$ java JSample12_1
10
10
10
“`

# まとめ

何かの役に立てばと。

元記事を表示

(調査中)AJava 11のHttpClientを使用してAWS Cognitoのトークンエンドポイントからトークンを取得する例

## 必要な依存関係の追加
プロジェクトがMavenプロジェクトの場合、pom.xmlに以下の依存関係を追加します。
“`xml


com.fasterxml.jackson.core
jackson-databind
2.13.3


org.apache.httpcomponents
httpclient
4.5.13


“`
## Javaコード例
以下のコードは、Java 11のHttpClientを使用してAWS Cognitoのトークンエ

元記事を表示

(調査中)Javaの HttpClient を使用したKeycloakからBearerトークンを取得

“`java
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class KeycloakService {

public Res

元記事を表示

メモ

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import com.opencsv.CSVReader;
import com.

元記事を表示

アプリケーション

了解しました。以下は、比較元ディレクトリパスと比較先ディレクトリパスを選択し、それぞれを`before`テーブルと`after`テーブルに取り込み、差分を抽出してSJISエンコーディングで`差分.csv`として出力するJava Swingアプリケーションのコードです。

### コード例

“`java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import ja

元記事を表示

java アプリケーション

Java Swingを使ってディレクトリ選択ダイアログを表示し、選択したディレクトリ配下のCSVファイルを同じテーブルにインサートする機能を追加します。このためには、`JFileChooser`を使ってディレクトリを選択する方法を実装します。

以下に、ディレクトリを選択してCSVファイルを同じテーブルにインサートする機能を持つJava Swingアプリケーションの完全なコード例を示します。

### コード例

“`java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import

元記事を表示

AtCoder Beginner Contest 358 をJavaで解けるところまで

## 概要
AtCoder主催のAtCoder Beginner Contest 358が、
2024年6月15日(土)21時から開催されました。
私は失念しており不参加です。

解説なし、時間無制限で解けるところまでやってみます。

## A
“`Java
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
var sc = new Scanner(System.in);
String S = sc.next(), T = sc.next();
if(S.equals(“AtCoder”) && T.equals(“Land”)) {
System.out.println(“Yes”);
} else {
System.out.println(“No”);
}
}
}
“`
文字列が2つ入力されるので、比較する。

## B
“`Java
import java.util.Scann

元記事を表示

イミュータブルってなに?

# イミュータブルとは何か

### 説明

イミュータブル(immutable)とは、「不変」という意味です。

イミュータブルオブジェクトは、インスタンス作成後に内部状態を変更できないオブジェクトを指します。

一度値が設定されると、その値が変更されることがなく、新たに設定し直すこともできません。

### 例

– boolean、int等のプリミティブ型
– String、Integer等のラッパークラス
– java.util.Collectionsの不変コレクション

などがあります。

### 特徴

– 初期化時にのみ値を設定できる
– 設定された値は変更不可
– 値を変更する操作は新しいオブジェクトを生成する

### 対比

イミュータブルに対して、ミュータブル(mutable)オブジェクトは、その内部状態を自由に変更できるオブジェクトです。ArrayListやStringBuilder、Calendarなどがミュータブルオブジェクトです。

# なぜイミュータブルオブジェクトを使うのか

イミュータブルオブジェクトを使用する主な理由には以下のものがあります。

#

元記事を表示

【Java】文字列⇔数値の相互変換

# はじめに
Javaを学びたくて読み始めた本、

「[プロになるJava ―仕事で必要なプログラミングの知識がゼロから身につく最高の指南書](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8BJava%E2%80%95%E4%BB%95%E4%BA%8B%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E7%9F%A5%E8%AD%98%E3%81%8C%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E6%9C%80%E9%AB%98%E3%81%AE%E6%8C%87%E5%8D%97%E6%9B%B8-%E3%81%8D%E3%81%97%E3%81%A0-%E3%81%AA%E3%81%8A%E3%81%8D/dp/429712

元記事を表示

SpringAIを利用してOpenAIのAPIと連携する方法

今回はSpringの一つのプロジェクトで、SpringAIの紹介とOpenAI社のAPIとの接続方法についてまとめました。
(2024/6/17 現在の内容となります)

## SpringAIとは
OpenAIなどの生成AIのAPIとの繋ぎこみを容易にするJavaのライブラリになります。
2024/6/16現在でOpenAI直接だけでなくAzure経由のOpenAIやAmazonのBedrockやGoogle Geminiなどの各種APIとの繋ぎこみが利用できます。

対応についてはこちらをご覧ください。

https://spring.io/projects/spring-ai

今回はOpenAIのAPIとの接続方法について説明します。

## OpenAIとの連携準備
今回はGradleで構築して、OpenAIの一番よく使われるチェットのAPIを使って応答を取得する方法です。
OpenAIのAPIキーは事前に順をしておいてください。

### 0.準備 
ライブラリの読み込み設定を定義します。gradleの設定は以下の通りです。
SpringBootも利用して実行するサンプルの

元記事を表示

【Java】ABC081A_ Placing Marbles #AtCoder

自分用にAtCoderの解答をまとめていきます。誤った情報があったら、申し訳ございません。

## 覚えること
– charAtメソッド
文字列からn番目の文字列を引き出すためのStringクラスのメソッド。文字列の先頭は0文字目。

## コード
“`java:ABC081A_PlacingMarbles
import java.util.Scanner;

public class ABC081A_PlacingMarbles {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
String str = sc.next();
System.out.println(cal(str));
}
}

public static int cal (String str) {
int count = 0;
for (i

元記事を表示

登壇は意外と怖くない(JJUG CCC 2024 Spring登壇体験記)

# はじめに

JJUG CCC 2024 Springで登壇しました。こういうカンファレンスで登壇したのは初めてです。

https://ccc2024spring.java-users.jp/

せっかくなのであれこれ記録しておこうかなと思います。一応、これから登壇したいという人の役に立つことを目指しており、何かの参考になれば幸いです。

なお、セッションの資料はこちらです。

# 書いている人について
社内LTみたいなことは一応やったことがあるので、人前で話すこと自体は多少できます。ただ、カンファレンスで登壇したことがなかったので、そもそもどういう準備をすればいいのかもよくわからず、という感じでした。

# 経緯
JJUG CCCに初めて参加したのは2016年くらいで、それから何度も聴講者として参加してきました。参加を重ねるにつれて、自分も登壇してみたいという気持ちが少しずつ強くなっていきました。しかし、ハードルが高い。

元記事を表示

JavaアプリからTLS対応のDb2へ接続する方法を試してみた

## はじめに
JavaアプリケーションからTLS対応のDb2へ接続する方法を試してみました。確認したかったのはクライアント側の構成方法だったのですが、確認用に接続先データベースが必要になるので、Db2に付属のSAMPLEデータベースをTLS対応にして接続先データベースとしました。
手順と設定方法を備忘録として残しておくことにします。

## 環境
本投稿内容は以下の環境で動作確認しています。

|ソフトウェア|バージョン|備考|
|:———-|:———|:———|
|Windows 11 Pro|23H2||
|Db2 for Windows (x64)|11.5.8|Db2 Community Edition|
|Java |17||
|Open Liberty |23.0.0.10||

## Db2サーバーのTLSサポート構成
Db2に付属のSAMPLEデータベースをTLS対応にします。
サーバー側の構成作業として以下を実施します。
1. 鍵ストアの作成
2. 証明書(自己証明書)の作成
3. 証明書の抽出(配布用)
4. データ

元記事を表示

ポリモフィズムを理解する

ここでは、ポリモフィズムについて初心者が理解できるようにわかりやすく説明します。
使用する言語はJavaです。

# 実現したいこと
ポリモフィズムが実現したいことは、**機能を交換可能**にすることです。
例えば、あなたが次のようなセンスあふれるかっこいいロボットを作ったとしましょう。

![ポリモフィズム1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130099/6313f67c-fa2c-076b-e1dd-cbe9df3f3026.png)

現在、手には丸いものがついていますが、これを「ドリルにしてください」という依頼があったとします。
しかし、この手は腕に完全に接着されており、手を変えようと思ったら腕ごと胴体から切り離さないといけません。
これでは困るわけです。

![ポリモフィズム2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130099/64093a36-14af-93a1-d13f-2798b

元記事を表示

MetadataValue について

# MetadataValue とは
MetadataValue とは Block など多くのクラスが持つ、文字通りメタデータそのものです。
プラグインのインスタンスを利用してデータの保存空間を作成し、鍵となる文字列を用いてデータを識別します。

https://jd.papermc.io/paper/1.20.6/org/bukkit/metadata/MetadataValue.html

**サーバーを止めると、ブロックに保存された MetadataValue は消去されます!**

# 操作
Metadatable を実装したクラスで
– `hasMetadata`
– `getMetadata`
– `removeMetadata`
– `setMetadata`
の各種メソッドを用いて操作します。

has はそのプラグインの名前空間に指定された鍵に対応する MetadataValue が存在するか否かを返します。

get は与えられた文字列に対応するキーを持つメタデータを詰めたリストを返します。対応するデータが1つもない場合は空のリストが返ります。

remove は

元記事を表示

【Java】ラムダ式とStream APIメモ

## はじめに
Javaの案件の面談でよくラムダ式、Stream APIについて知見があるか質問されるのでまとめました。

## ラムダ式、StreamAPIのメリット
ラムダ式のメリット:
1. 可読性の向上
2. 簡潔な構文
3. 無名の関数を作成

Stream APIのメリット:
1. 可読性の向上
2. 並列処理によるパフォーマンスの改善

## ラムダ式
Java 8以降で導入された機能です。
主に関数型インターフェースの実装を簡潔に書くために使用されます。
関数型インターフェースとは、抽象メソッドが1つだけ定義されているインターフェースのことを指します。
抽象メソッドとは、詳細未定(中身が無い)のメソッドのことを指します。

構文
“`
(引数) -> {処理内容};
“`
* 引数の型を記述する必要はありません
* 引数は複数可能です
* 引数が1つの場合は()を省略できます

サンプルコード

“`java
// 関数型インターフェース
public interface SampleInter

元記事を表示

Javaで「多次元配列の長さを取得する(length)」の動作を確認してみた

# 概要

Javaで「多次元配列の長さを取得する(length)」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String[] args){
int[][] num = {{87,54}, {76,92,48,58,84}};

for (int i = 0; i < num.length; i++){ for (int j = 0; j < num[i].length; j++){ System.out.println("num[" + i + "][" + j + "] = " + num[i][j]); } } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample9_1.java $

元記事を表示

Spring Data JPA(Java Persistence API)のクエリメソッドの種類一覧

# ■ 概要
Spring Data JPAの機能であるクエリメソッドで使いそうなメソッドをまとめた
– [基本的なクエリメソッド](#-基本的なクエリメソッド)
– [リポジトリで定義できる単純なクエリメソッド](#-リポジトリで定義できる単純なクエリメソッド)

# ■ 基本的なクエリメソッド
### ● 全てのエンティティ
“`java
List items = itemRepository.findAll();
“`
“`sql:生成されるクエリ
SELECT i FROM Item i
“`

### ● 指定されたIDに対応するエンティティ
“`java
Optional item = itemRepository.findById(1);
“`
“`sql:生成されるクエリ
SELECT i FROM Item i WHERE i.id = :id
“`

### ● 指定されたIDのエンティティが存在するかを確認
“`java
boolean exists = itemRepository.existsById(1);
“`

元記事を表示

SELECT文でデッドロックするパターン

# SELECT文でデッドロックになるパターン
PostgreSQL+Springを使用しているシステムにて、いくつかの特殊な状況が重なりデッドロックが発生した。
ざっくり言うと以下の順序で処理が発生した結果、デッドロックが発生。

+ トランザクションAがSELECT * FROM user_attr;
+ トランザクションBがTRUNCATE user_attr;
+ トランザクションAを発生させたJavaプログラムが別のトランザクションCを発生させ、SELECT * FROM user_attr;

## PostgreSQLのTRUNCATE周りの仕様
PostgreSQLのTRUNCATEはOracle/MySQLと違いロールバックが可能。
ただし、TRUNCATEの実行によりAccessExclusiveLockを獲得し、TRUNCATE実行中のSELECT文をブロックする。

## PostgreSQLのSELECT仕様
SELECT文を実行すると、AccessShareLockを獲得する。
これはAccessExclusiveLock(=TRUNCATE)をブロックし、

元記事を表示

OTHERカテゴリの最新記事