言語・開発
Javaでは、アプリからデータベースに接続するためのAPIとして、JDBCと呼ばれるライブラリを標準で提供しています。JDBCとは、データベース製品ごとの仕様差を吸収し、共通した操作手段を提供するAPIです。JDBCを利用することで、アプリ開発者は(たとえば)…
トランザクションを利用する – setAutoCommit/commit/rollbackメソッド public void setAutoCommit(boolean auto) throws SQLExceptionpublic void commit() throws SQLExceptionpublic void rollback() throws SQLException auto:自動コミットを有効にす…
データベースを検索する – executeQueryメソッド ResultSet executeQuery() throws SQLExceptionT getXxxxx(String column throws SQLException) T:データ型(String、int、double、Blobなど) column:フィールド名 SELECT命令を実行するには、PreparedSta…
データベースに登録する – prepareStatement/executeUpdateメソッド PreparedStatement prepareStatement(String sql) throws SQLExceptionvoid setXxxxx(int index, T value) throws SQLException int executeUpdate() throws SQLException sql:発行するS…
public static Connection getConnection(String url, String user, String password) throws SQLException url:データベース接続文字列 user:ユーザー名 password:パスワード データベースを操作するためには、まずはデータベースに接続しなければなりま…
Javaは、旧サン・マイクロシステムズ社(現在はOracle社の完全子会社)が1995年に発表したプログラミング言語の一種です。発表直後は、主にブラウザー上で動作するJavaアプレットとして利用されていましたが、現在ではサーバーサイド開発を中心に、家電への…
Eclipseを利用して、「こんにちは、世界!」と表示するだけの簡単なアプリを作成してみましょう。Eclipseの基本的な使い方を理解すると共に、Javaアプリの文法を概観します。 [1]Eclipseを起動する Eclipseは、Pleiadesを展開した/pleiades/2024-09フォル…
執筆時点でEclipseに同梱されているJavaのバージョンは21です。ここでは、これをJava 23.0.1に変更します。以降も本稿では、Java 23.0.1を採用します。 Javaのバージョンを変更するには、メニューバーの[ウィンドウ]-[設定]を選択します。[設定]画面…
Eclipse(Pleiades)を利用しない場合、もちろん、JDKを単体でインストールすることもできます。JDKには、Oracle社が提供するOracle JDK(商用ビルド)もありますが、本サイトではオープンソース実装であるOpenJDKを採用します。OpenJDKのインストールには、…
Javaでアプリを開発するには、一般的に、以下のソフトウェアをインストールしておきます。 (1)JDK(Java Develpment Kit) Javaアプリを実行するためのJava仮想マシンをはじめ、コンパイラーやデバッガーなどのツールを備えたJava開発環境です。コードその…
以下は、JavaSEの大まかな歴史です。 Javaのバージョン バージョン 時期 主な新機能など JDK 1.0 1996年1月 初期バージョン JDK 1.1 1997年2月 国際化対応、JDBC API J2SE 1.2 1998年12月 コレクションフレームワーク、Swing、リフレクション J2SE 1.3 2000…
Javaでは、目的に応じて、もともとは以下のようなエディションが用意されていました。 Javaのエディション エディション 概要 Java SE(Java Platform, Standard Edition) Javaの基本となるエディション Java EE(Java Platform, Enterprise Edition) サー…
以下に、Java言語の主な特徴をまとめます。 (1)オブジェクト指向言語である オブジェクト指向とは、アプリケーションの中で扱う対象をオブジェクト(モノ)と見立てて、その組み合わせによって機能を作り上げていく手法のことを言います。Javaに限らず、多…
クラウドエンジニアとして転職・キャリアアップを目指すなら必読。未経験からIT業界へ転身したG-gen CTO杉村勇馬氏が、基礎力の重要性やAWS・Google Cloudの学び方、AI時代に求められるスキルを語ります。
スレッド(thread)とは、プログラムを実行する際の最小単位です。デフォルトで、Javaのアプリケーションはメインスレッドと呼ばれるスレッドひとつで動作しています(シングルスレッド)。しかし、たとえばネットワーク通信など時間のかかる処理をシングル…
スレッドプールを利用する – Executorsクラス public static ExecutorService newFixedThreadPool([int t [,ThreadFactory factory]])public static ExecutorService newSingleThreadExecutor([ThreadFactory factory])static ExecutorService newThreadPerT…
ロックフリーな同期処理を実装する – AtomicXxxxxクラス java.util.concurrent.atomicパッケージでは、値の代入/取得といった処理をハードウェアレベルでアトミックに実行する手段を提供します。 AtomicBoolean AtomicInteger AtomicIntegerArray AtomicLon…
明示的にロックを獲得する – ReentrantLockクラス public void lock()public void unlock() synchronizedブロックによる同期は、アプリ開発者がロックの獲得/解除を意識しなくても良いことから「暗黙的なロック」と呼ばれます。対して、メソッドを跨る処理…
マルチスレッド環境における排他制御 – synchronized修飾子/ブロック マルチスレッド環境で、共有のデータを操作する際には、処理の競合に注意です。 たとえば以下は、インスタンス変数countを複数のスレッドから同時にインクリメント操作する例ですが、こ…
スレッドを実行する – Threadクラス/Runnableインターフェイス スレッドを実行するには、Threadクラス(java.langパッケージ)を継承したサブクラスを用意する方法と、Runnableインターフェイス(java.langパッケージ)を実装したサブクラスを用意する方法…
ここまでの節では扱えなかった役立つ機能を、以下にまとめます。 ユーティリティ_目次 getPropertiesメソッド Randomクラス DateFormatクラス NumberFormatクラス Timerクラス Optionalクラス
Optionalクラス(java.utilパッケージ)は、nullチェックを簡単化し、NullPointerExceptionの発生を未然に防ぐためのクラスです。 たとえば以下は、メンバー情報をMapで管理するUtilMemberListクラスと、これを利用するためのサンプルです。まずは、Optional…
タイマーで定期処理する – Timerクラス public void schedule(TimerTask task, long delay[, long period])public void scheduleAtFixedRate(TimerTask task, long delay, long period) task:定期実行するタスク delay:タスクを実行する前の遅延時間(ミリ…
数値を整形する – NumberFormatクラス public static NumberFormat getInstance([Locale loc])public static NumberFormat getCurrencyInstance([Locale loc])public static NumberFormat getIntegerInstance([Locale loc])public static NumberFormat getPe…
日付/時刻を整形する – DateFormatクラス public static final DateFormat getInstance()public static final DateFormat getDateInstance([int dStyle [,Locale loc]])public static final DateFormat getTimeInstance([int tStyle [,Locale loc]])public …
乱数を取得する – Randomクラス Random([long seed]) seed:シード値 乱数を生成するには、Randomクラス(java.utilパッケージ)を利用します。Randomクラスでは、取得したい引数の型に応じて、以下のようなメソッドが用意されています。 Randomクラスの主な…
システムプロパティを取得する – getPropertiesメソッド public static Properties getProperties() System.getPropertiesメソッドを利用することで、現在のプラットフォームにおけるシステムプロパティの情報を取得できます。 UtilProp.java package com.ex…
HTTP(HyperText Transfer Protocol)で外部のサービス/コンテンツにアクセスするには、Java 10以前であれば、URLConnectionクラス(java.netパッケージ)やApache HttpComponents(https://hc.apache.org/)を、Java 11以降であればHttpClientクラス(java…
public static HttpClient newHttpClient() HttpClientクラスはJava 11で追加された新しいHTTPクライアントで、以下のような特徴を持っています。 HTTP 2に対応 WebSocket通信(=軽量な双方向通信)に対応 非同期メソッドを提供 以下では、指定されたURLか…
HTTP通信を実行する – URLConnectionクラス public URLConnection openConnection([Proxy proxy]) throws IOException proxy:接続に利用するプロキシ URLConnectionクラス(java.netパッケージ)を利用することで、HTTP経由でWebページにアクセスできます。…
ソケットとは、通信するアプリケーション同士の出入り口のことで、IPアドレスとポート番号の組み合わせで表現できます。Javaでは、このソケットに対するデータの入出力をストリームを利用して行います。 ソケット通信では、TCP(Transmission Control Protoc…
クライアント側のソケットを操作する – Socketクラス Socket(InetAddress address, int port)Socket(String host, int port) address:接続先のアドレス host:接続先のホスト port:ポート番号 同じくクライアントソケットを生成します。サーバーソケットが…
サーバー側のソケットを操作する – ServerSocketクラス public ServerSocket(int port) throws IOException port:ポート番号 ソケット通信では、通信を試みるコンピューター(クライアント)と待ち受けるコンピューター(サーバー)とが存在します。サーバ…
Stream APIは、繰り返し処理のためのAPIです。コレクション、ファイルなどのデータソースから個々の要素を取り出して、これを処理の流れ(=Stream)に引き渡すためのしくみを提供します。Streamの中ではデータが加工されていき、出口で加工した結果を得られ…
終端処理では、Stream内で加工/フィルターされた値を最終的に出力/集計します。Streamでは、中間処理の時点では処理をストックします。そして、終端処理が呼び出されたところでまとめて加工/フィルターなどを実施します(遅延処理)。その性質上、中間処…
Streamの中を流れる値(個々の要素)を加工/フィルターするプロセスが、中間処理です。ひとつのStream処理につき、中間処理は0個以上複数持つことが可能です。 値を加工する – mapメソッド public <R> Stream<R> map(Function mapper) T:元の要素の型 R:加工後</r></r>…
以下に、Streamを生成する基本的な方法をまとめます。 オブジェクトをStreamに変換する リスト、文字列など、クラスによっては現在のインスタンスをもとにStreamを生成できます。以下に主なものをまとめます。 Streamに変換するための主なメソッド メソッド …
Stream APIによる処理は、大雑把に以下のように分類できます。 データソースからStreamを生成 加工/フィルターなどの中間処理 最終的な集計/出力などの終端処理 たとえば以下は、リストから5文字以上の文字列だけを抽出し、その頭文字だけを順に出力する例…
Java 8からは日付/時刻を扱う新しいAPIとして、Date and Time APIが導入されました。Date-Time APIの実体は、java.timeパッケージです。 日付/時刻(Date-Time API)_目次 日付/時刻(Date-Time API) now/of/parseメソッド formatメソッド betweenメソ…
Date/Calendarクラス⇔DateTime-APIのクラスを相互変換する public static Date from(Instant instant) … Datepublic Instant toInstant() … Date/Calendarpublic static LocalDateTime ofInstant(Instant instant, ZoneId zone) … XxxxxDateTime instant:…
public LocalDateTime plus(long value, TemporalUnit unit)public LocalDateTime minus(long value, TemporalUnit unit) value:増減分 unit:単位 plus/minusメソッドを利用することで、日付時刻要素を加算/減算できます。引数unitには、TemporalUnitイ…
日付/時刻値の差を求める – betweenメソッド public static Period between(LocalDate start, LocalDate end) … Periodpublic static Duration between(Temporal start, Temporal end) … Duration(※) start:開始日時 end:終了日時 Period/Duration#bet…
public String format(DateTimeFormatter formatter) formatter:整形に利用するフォーマッター formatメソッドを利用することで、日付時刻値を規定の形式に整形できます。引数formatterには、DateTimeFormatter型のフォーマッターを指定できます。フォーマ…
日付/時刻値を生成する – now/of/parseメソッド public static LocalDateTime now()public static LocalDateTime of(int year, int month, int day,int hour, int minute [,int second [,int nano]])public static LocalDate parse(CharSequence text) ye…
Java 8からは日付/時刻を扱う新しいAPIとして、Date and Time APIが導入されました。Date-Time APIの実体は、java.timeパッケージです。以下に、java.timeパッケージで提供されている主なクラスをまとめます。 LocalDateTime/LocalDate/LocalTime:時差情…
Javaで日付 / 関連の操作を行うには、Calendarクラス(java.utilパッケージ)を利用します。 日付/時刻_目次 日付/時刻 getTimeメソッド getメソッド setメソッド addメソッド rollメソッド clearメソッド before/equals/afterメソッド
日付を比較する – before/equals/afterメソッド public boolean after(Object when)public boolean before(Object when)public boolean equals(Object when) when:比較するカレンダー カレンダーの大小を比較するには、before/equals/afterメソッドを利…
日付/時刻要素をクリアする – clearメソッド public final void clear([int field]) field:クリアする時刻/日付フィールド clearメソッドを利用することで、指定された日付/時刻要素(getメソッドの表を参照)の値をクリアします。クリアされたフィール…
日付/時刻要素を加算/減算する(ローリング) – rollメソッド public void roll(int field, int amount)public abstract void roll(int field, boolean up) field:加算/減算する日付/時刻フィールド(getメソッドの表を参照) amount:増減分 up:増加…
日付/時刻要素を加算/減算する – addメソッド public abstract void add(int field, int amount) field:演算する日付/時刻フィールド amount:増減分 現在の日付/時刻要素を基準に、値を加算/減算するには、addメソッドを利用します。addメソッドでは…