ROLLUPで小計・合計を求める [SQL]
前置き
左の表から、右の表を抽出する。
カテゴリ毎の小計行と、全体の合計行が追加されている。
RDBによって若干、文法に差があるので、RDBに合わせて改修が必要。
今回の例は、MariaDB 10.5で動作を確認している。
SQL
CASE文でUNIONを回避する [SQL]
前置き
その1
右上段の表は、左の表から売上日を見て税率を適用し税込価格を算出したもの。
2019-10-01から消費税が10%に切り替わるので、売上日がそれを超えたときに
10%の消費税を適用し、税込価格を算出する。切替日以前の税率は8%としている。
8%と10%で別表を抽出してから、UNIONする方法が思いつくが、テーブルを
2回読み込む必要があるためパフォーマンスが悪い。
今回の例の様に、プログラムでIF文が発生するような条件の場合は、
CASE文で解決することができる。
その2
右下段の表は、税込価格の合計を税率毎に算出したもの。
SUM関数の中でCASE文を呼び出している。この例の様にCASE文は様々な場所で呼び出せる。
SQL
ウィンドウ関数でサブクエリを回避する [SQL]
Javaでパスワード付きのExcelファイルを開く [プログラミング]
前置き
前回
のプログラムではパスワード付きのExcelについては考慮されていなかった。
WorkbookFactory.create(java.io.File file, java.lang.String password)で、
ワークブック生成時の引数にパスワードを指定することで開くことができる。
ちなみに、パスワード付きじゃないExcelにパスワードを指定して生成しても普通に開けるっぽい。
実装
FXDemo.fxmlFXDemo.java
実行結果
Javaでファイルの暗号化と復号をしてみる [プログラミング]
前置き
共通鍵でファイル暗号化と復号を実装する。
仕様は下記の通り
- アプリケーション起動時に暗号キーを生成
- keygenファイルがある場合は同ファイルからキーを生成
- keygenファイルがない場合は新たにキーを生成してkeygenファイルに保存する
- ファイルを選択する
- 暗号化ボタンで選択ファイルを暗号化
- 選択ファイルと同じ場所にencディレクトリを作成する
- encディレクトリ内に暗号化ファイルを.datで保存する
- 復号ボタンで選択ファイルを復号
- 選択ファイルが暗号ファイルではない場合は何もしない
- 選択ファイルと同じ場所に復号ファイルを保存
- MD5ボタンでハッシュ値を生成
ポイント
セキュリティキーについて
KeyGenerator.generateKey()は生成する度に異なるキーが生成される。
前述のことから、そのまま実装するとアプリケーションの起動毎に異なるキーが生成されてしまい、
初回で暗号化したファイルを、2回目以降に起動したアプリケーションから復号を試みても、エラーが発生してしまう。
なので、同じ生成キーで暗号化と復号をしたい場合は、生成キーを保管する必要がある。
SecretKeyはシリアライズされているので、生成キーはファイル保存しておくことが可能。
今回は、keygenという名前のファイルでセキュリティキーを管理している。
ハッシュ値について
ハッシュ値は改ざん検知のために利用されることが非常にしばしばある。
MD5の他にもSHAなどのアルゴリズムが用意されており、ダウンロードサイトにファイルのハッシュ値が添えられていることがあり、
ダウンロード後にダウンロードファイルのハッシュ値を生成して、改ざんを検知するために利用されている。
今回は、暗号化と復号の前後でハッシュ値を生成して比較する事によって、同じファイルが復号できていることを確認できるようになっている。
また、ハッシュ値の非可逆性を利用して、パスワードのハッシュ値を生成し、認証処理に利用されることもある。
実装
FXDemo.fxmlFXDemo.java
実行結果
JavaFXでダイアログ表示 [JavaFX]
前置き
バージョン:JavaFX 8u40 から導入されたコントロール。
それまではダイアログは自炊するか、SwingのJOptionPaneで各種ダイアログを呼び出すしかなかった。
いやいや。。。GUIアプリケーションなのに、こんな高頻度で使用するコントロールを初期装備してないなんて有り得ないから(;^ω^)
タイトル、ヘッダテキスト、コンテントテキスト、ボタン等々の細かい設定ができるのはSwingと同じ。
実装
FXDemo.fxmlFXDemo.java
FileChooser・DirectoryChooser [JavaFX]
前置き
ディレクトリやファイルを選択するダイアログを表示するためのコントロール。
showSaveDialogでファイル保存用のダイアログを表示することも可能。
実装
FXDemo.fxmlFXDemo.java
DatePicker [JavaFX]
前置き
日付をカレンダーから指定できる。意外と便利。
実装
FXDemo.fxmlFXDemo.java
ListView [JavaFX]
前置き
複数の選択肢をリスト表示して、選択しているオブジェクトを取得する時に使う。
コンボボックスと違うところは、最初から選択肢が見えている点、複数選択が可能な点などがある。
今回の例のように複数リストを作成し、選択項目がリスト間を移動するような使い方が一般的?
実装
FXDemo.fxmlFXDemo.java
実行結果
TableView [JavaFX]
前置き
表形式でデータを表示するためのコントロール。
このコントロールを使うとステップ数が爆上がりする。。。
とにかく面倒くさい。。。なのによく使うコントロール。。。
実装
FXDemo.fxmlFXDemo.java