Windows10で音量アイコンをクリックしても何も出てこない時

タスクマネージャから、explorer.exe を終了させてから、「新しいタスクの実行」で explorer.exe を起動させると復活する

VPN経由でBacklogにアクセスできない時の対処法

よくある環境だけど、お客さんとこの開発サーバにアクセスしたいのだが、IP制限がかかっていて特定のIPからしかアクセスできないってことがあると思います。そんな時、お客さんに「このIPアドレスは自社サーバですので、このIPからのアクセスは許可してくだ…

IOのまとめ

たぶんruby2.0から IO.read、IO.foreach、IO.readlines、IO.write などが思ったように使えるようになった IO.readはエンコーディングを指定しなければ、「Encoding.default_external」がセットされる なので、ファイルの中身のエンコーディングと一致してな…

先読み後読み

ずっと勘違いしてた模様・・。いやーもう20年近くプログラマしてるけどきちんと理解できてないことがなんと多いことかhttp://d.hatena.ne.jp/a_bicky/20100530/1275195072 http://takahashikzn.root42.jp/entry/20090810/1249906831

Windows10を使いやすくする

Windows10の評判はイマイチだけどこうすれば使いやすくなります(必死に過去のWindowsへ戻してるだけ・・) エクスプローラの行選択 以前紹介した方法で戻せます デスクトップとかタスクバー、エクスプローラの外観や設定 昔のWindows風にカスタマイズしてくれ…

パフォーマンス確認

簡単にパフォーマンスチェックをしてみます。 id、name を持つテーブルに1万件insertしてみました。 特に意外な結果にはならなかったので、問題ないかなと思います。結果はソース中にコメントで書いておきました Dao019.java public interface Dao019 { @Sql…

ログ出力

log4j で簡単にログ出力できます。 DBIにログ設定したり、Handleにもログ設定できます。 必要なところだけロギングしたければHandleに設定すればよいでしょう。 log4j.jar をクラスパスに加えないとコンパイルできないかもしれませんのでご注意を。 Sample02…

insertした時のidを取得する その2

一応こんなこともできるというご紹介で、前回は1レコードだけinsertしたIDを取得する処理でしたが、今回は複数レコード対応です。 insert select で複数レコード登録した際に、それらのIDがListで返ってきます。 Dao017.java public interface Dao018 { @Sql…

insertした時のidを取得する その1

よくあるRESTのパターンとして、IDはシーケンスを設定しておき、APIから指定された内容を登録したらIDを返す、というもの。JDBIではどうやればいいのかというサンプルです。 Dao017.java public interface Dao017 { @SqlUpdate("CREATE SEQUENCE seq") void …

トランザクション その10 DaoからHandleを取得する with Mixin

今まで、DBIオブジェクト or HandleオブジェクトからDaoを取得してきましたが、今度は逆にDaoからHandleオブジェクトを取得してみましょう。取得するには、「getHandle」メソッドを宣言すればいいのですが、今回は予めJDBI側で用意されているMixin用のinterf…

トランザクション その9 Daoからbegin〜commit〜rollbackを呼べるようにする

Handleから自前でトランザクション制御するのは以前やりましたが、Daoでもできますのでそのサンプルです。敢えてこの方法でトランザクション処理を書く必要は無さそうですけど、一応こんなこともできますよーという意味で。 Dao015.java public interface Da…

トランザクション その8 例外を発生させずにRollbackしたい

今までトランザクション中に例外が発生すれば自動的にRollbackされることを確認してきましたが、例外が起きなくてもRollbackさせたい場合があるので、そのサンプルです。 Sample023.java public static void main(String[] args) { String url = "jdbc:postg…

トランザクション その7

前回の続きです。ObjectAPI形式とFluent形式を融合させてトランザクション処理をしてみますが、やってはいけないサンプルです。 Daoのメソッドに Transaction アノテーションを付けるとどうなるかやってみます。 Sample022.java public static void main(Str…

トランザクション その6

今回からObjectAPI形式とFluent形式を融合させてトランザクション処理をしてみましょう。まずは簡単なサンプルを。 2つ Handle を作って、1つは inTransaction メソッドでトランザクション処理を書きます。こいつは勝手にbegin〜commit〜rollbackをしてくれ…

トランザクション その5

前回、複数Daoにまたがる場合のトランザクション処理をやってみましたが、あの設計だと複数人で開発した場合早晩破綻するのでもうちょっと工夫してみましょう。 登場人物は以下の3つ。 単純なDao。基本的にテーブルに付き1つのDaoが作られる。これには Trans…

トランザクション その4

今度は、複数Daoにまたがる場合のトランザクション処理をやってみましょう Dao013.java public interface Dao013 { @SqlUpdate("insert into table001 (id, name) values (:id, :name)") int insert(@Bind("id") int id, @Bind("name") String name); } Dao0…

自前でバインドする

前回からの続きですが、ObjectAPI形式で引数を自前でバインドする方法です Dao012.java public interface Dao012 { @SqlUpdate("insert into table001 (id, name) values (:id, :name)") void insert(@BindMap Map<String,Object> map); @SqlQuery("select name from table0</string,object>…

Beanをバインドした時に接頭辞を付ける

ObjectAPI形式の場合、引数にBeanがいくつもあった場合、同じフィールド名がかぶってしまう可能性があるので、そんな時にどのBeanがどのパラメータにバインドさせるかちゃんと指定できるようします Dao011.java public interface Dao011 { @SqlUpdate("inser…

トランザクション その3

次はDaoに@Transactionアノテーションを付けてトランザクション制御してみます Dao010.java public abstract class Dao010 { @SqlUpdate("insert into table001 (id, name) values (:id, :name)") public abstract int insert(@Bind("id") int id, @Bind("na…

トランザクション その2

お次はバカ正直に自分でトランザクションを制御します Sample015.java public static void main(String[] args) { String url = "jdbc:postgresql://192.168.52.128/jdbi"; DBI dbi = new DBI(url, "jdbi_user", "jdbi_pass"); Handle h = dbi.open(); Syste…

トランザクション その1

実は SqlBatch アノテーションを付ければ勝手にトランザクション処理をしてくれます Dao008.java public interface Dao008 { @SqlBatch("insert into table001 (id, name) values (:id, :name)") int[] insertBatch(@Bind("id") List<Integer> ids, @Bind("name") List<String></string></integer>…

複数行のinsert

配列とかListを引数に渡せば、勝手にその配列数分ループして実行してくれます Dao007.java public interface Dao007 { @SqlBatch("insert into table001 (id, name) values ((select count(*)+1 from table001), :first || '-' || :last)") int[] insertBatc…

ObjectAPI形式でinsert文やupdate文でモデルを指定する

前回はselectの結果を任意のモデルに変換する処理をやってましたが、当然insertやupdateでもできます。 Dao006.java public interface Dao006 { @SqlQuery("select name from table001 where id = :id") String findNameById(@Bind("id") int id); @SqlUpdat…

ObjectAPI形式で戻り値を自分でハンドリングする その2

JDBIを普通に使ってると、DaoとModelが別ファイルになっちゃうのですが、一応こうやれば同じクラスで実装できます。でもあまりよろしく無さそうですね。 Table002.java public class Table002 { private int id; private String name; public Table002(){} p…

ObjectAPI形式で戻り値を自分でハンドリングする その1

前回の続きでObjectAPI形式の場合に自分で戻り値の型をマッピングする処理を書いてみましょう Dao004.java public interface Dao004 { public static class SimpleMapper implements ResultSetMapper<Map<String,Object>> { public Map<String,Object> map(int index, ResultSet r, StatementCo</string,object></map<string,object>…

ObjectAPI形式で戻り値を勝手に推測してもらう

今までもずっと使ってたんですけど、ObjectAPI形式の場合は @SqlQuery アノテーションを付けたメソッドの戻り値によって、JDBIが勝手に推測して相応の処理をしてくれます。 Dao003.java public interface Dao003 { @SqlQuery("select id from table001") List<Integer></integer>…

必要な時だけコネクションを張る

ObjectAPI形式だけを使用する場合、DBI.onDemand で勝手にopen、closeしてくれます。 Dao002.java public interface Dao002 { @SqlUpdate("create table IF NOT EXISTS table002 (id int primary key, name varchar(100))") void createTable(); @SqlUpdate(…

ある指定した列だけListで取得する

例えば name 列だけ一覧でほしいという場合、前回の方法だと一度全部取得してから、name列だけを再度取得する、という2段階になるので少し面倒です。そんな時に使うテクニック Sample006.java public static void main(String[] args) { String url = "jdbc:…

検索結果をListで取得する

今までは1行目の検索結果だけ取得してましたが、検索結果の全行を取得してみましょう Sample005.java public static void main(String[] args) { String url = "jdbc:postgresql://192.168.52.128/jdbi"; DBI dbi = new DBI(url, "jdbi_user", "jdbi_pass");…

Handle.close を自動で呼ぶ方法

DBI.withHandle メソッドを使えば、コールバックでHandleをもらって、自動的にcloseしてくれます。ruby みたいで便利ですね。 それ以外は特に説明不要かな。 Sample004.java public static void main(String[] args) { String url = "jdbc:postgresql://192.…