SSブログ

ROLLUPで小計・合計を求める [SQL]

前置き

sql_rollup.png

左の表から、右の表を抽出する。
カテゴリ毎の小計行と、全体の合計行が追加されている。
RDBによって若干、文法に差があるので、RDBに合わせて改修が必要。
今回の例は、MariaDB 10.5で動作を確認している。

SQL




nice!(0)  コメント(0) 

CASE文でUNIONを回避する [SQL]

前置き

sql_case_pattern.png

その1

右上段の表は、左の表から売上日を見て税率を適用し税込価格を算出したもの。
2019-10-01から消費税が10%に切り替わるので、売上日がそれを超えたときに 10%の消費税を適用し、税込価格を算出する。切替日以前の税率は8%としている。

8%と10%で別表を抽出してから、UNIONする方法が思いつくが、テーブルを 2回読み込む必要があるためパフォーマンスが悪い。
今回の例の様に、プログラムでIF文が発生するような条件の場合は、 CASE文で解決することができる。

その2

右下段の表は、税込価格の合計を税率毎に算出したもの。
SUM関数の中でCASE文を呼び出している。この例の様にCASE文は様々な場所で呼び出せる。

SQL




nice!(0)  コメント(0) 

ウィンドウ関数でサブクエリを回避する [SQL]

前置き

sql_row_num.png

左の表から、右のデータを抽出するSQL。
サブクエリで別表をJOINしたりseqに対しEXISTSしたりという方法が思いつくが、 それだと同じテーブルを2回読み込みことになり、パフォーマンスが悪い。
ウィンドウ関数を使えば読み込みを1回で済ませることができ、可読性も向上する。
今回の例は、カテゴリ毎にシーケンス番号が最大のデータを抽出している。
この他にも、ウィンドウ関数は様々なシーンで活用できそう。

  • 教科毎の最低・最高得点の抽出
  • 月毎の最低・最高売上店舗の抽出
  • 部門毎の最低・最高売上成績の抽出
  • etc...

SQL




nice!(0)  コメント(0) 

Javaでパスワード付きのExcelファイルを開く [プログラミング]

前置き

前回 のプログラムではパスワード付きのExcelについては考慮されていなかった。
WorkbookFactory.create(java.io.File file, java.lang.String password)で、 ワークブック生成時の引数にパスワードを指定することで開くことができる。
ちなみに、パスワード付きじゃないExcelにパスワードを指定して生成しても普通に開けるっぽい。

実装

FXDemo.fxml


FXDemo.java

実行結果

pwd_poi.png


nice!(0)  コメント(0) 

Javaでファイルの暗号化と復号をしてみる [プログラミング]

前置き

共通鍵でファイル暗号化と復号を実装する。
仕様は下記の通り

  • アプリケーション起動時に暗号キーを生成
    • keygenファイルがある場合は同ファイルからキーを生成
    • keygenファイルがない場合は新たにキーを生成してkeygenファイルに保存する
  • ファイルを選択する
  • 暗号化ボタンで選択ファイルを暗号化
    • 選択ファイルと同じ場所にencディレクトリを作成する
    • encディレクトリ内に暗号化ファイルを.datで保存する
  • 復号ボタンで選択ファイルを復号
    • 選択ファイルが暗号ファイルではない場合は何もしない
    • 選択ファイルと同じ場所に復号ファイルを保存
  • MD5ボタンでハッシュ値を生成

ポイント

セキュリティキーについて

KeyGenerator.generateKey()は生成する度に異なるキーが生成される。
前述のことから、そのまま実装するとアプリケーションの起動毎に異なるキーが生成されてしまい、 初回で暗号化したファイルを、2回目以降に起動したアプリケーションから復号を試みても、エラーが発生してしまう。
なので、同じ生成キーで暗号化と復号をしたい場合は、生成キーを保管する必要がある。 SecretKeyはシリアライズされているので、生成キーはファイル保存しておくことが可能。
今回は、keygenという名前のファイルでセキュリティキーを管理している。

ハッシュ値について

ハッシュ値は改ざん検知のために利用されることが非常にしばしばある。
MD5の他にもSHAなどのアルゴリズムが用意されており、ダウンロードサイトにファイルのハッシュ値が添えられていることがあり、 ダウンロード後にダウンロードファイルのハッシュ値を生成して、改ざんを検知するために利用されている。
今回は、暗号化と復号の前後でハッシュ値を生成して比較する事によって、同じファイルが復号できていることを確認できるようになっている。
また、ハッシュ値の非可逆性を利用して、パスワードのハッシュ値を生成し、認証処理に利用されることもある。

実装

FXDemo.fxml


FXDemo.java

実行結果

encript.png


nice!(0)  コメント(0) 

JavaFXでダイアログ表示 [JavaFX]

前置き

バージョン:JavaFX 8u40 から導入されたコントロール。
それまではダイアログは自炊するか、SwingのJOptionPaneで各種ダイアログを呼び出すしかなかった。
いやいや。。。GUIアプリケーションなのに、こんな高頻度で使用するコントロールを初期装備してないなんて有り得ないから(;^ω^)
タイトル、ヘッダテキスト、コンテントテキスト、ボタン等々の細かい設定ができるのはSwingと同じ。

実装

FXDemo.fxml


FXDemo.java



nice!(0)  コメント(0) 

FileChooser・DirectoryChooser [JavaFX]

前置き

ディレクトリやファイルを選択するダイアログを表示するためのコントロール。
showSaveDialogでファイル保存用のダイアログを表示することも可能。

実装

FXDemo.fxml


FXDemo.java



nice!(0)  コメント(0) 

DatePicker [JavaFX]

前置き

日付をカレンダーから指定できる。意外と便利。

実装

FXDemo.fxml


FXDemo.java



nice!(0)  コメント(0) 

ListView [JavaFX]

前置き

複数の選択肢をリスト表示して、選択しているオブジェクトを取得する時に使う。
コンボボックスと違うところは、最初から選択肢が見えている点、複数選択が可能な点などがある。
今回の例のように複数リストを作成し、選択項目がリスト間を移動するような使い方が一般的?

実装

FXDemo.fxml


FXDemo.java

実行結果

ListView.png


nice!(0)  コメント(0) 

TableView [JavaFX]

前置き

表形式でデータを表示するためのコントロール。
このコントロールを使うとステップ数が爆上がりする。。。

  • TableViewにTableColumnをネストしたり。。。
  • データクラスを用意したり。。。
  • TableColumnにデータクラスをバインドしたり。。。
  • 編集可能にするためにsetCellFactoryしたり。。。
  • セルの編集時にsetOnEditCommitで変更内容を反映させる必要があるし。。。
  • 必要に応じてsetSelectionModeで複数行選択できるようにしたり。。。
  • etc...

  • とにかく面倒くさい。。。なのによく使うコントロール。。。

    実装

    FXDemo.fxml


    FXDemo.java

    実行結果

    TableView.png


    nice!(0)  コメント(0) 

    この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。