CREATE TABLE "customer" ( "customer_id" INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), "customer_name" VARCHAR(30), "email" VARCHAR(50) );
さらしな日記
2015年2月21日土曜日
JavaDB Create Table文
JavaDB(Client/Server)を使う
JavaDBを使用するには、JDKがインストールされていることが前提。
以下はJDK1.8.0の場合で記載。
1. ライブラリが存在することを確認
次のファイルが存在していることを確認。なければJDKのインストールでJavaDBを含めるようにしてインストールして下さい。
C:\Program Files\Java\jdk1.6.0\db\lib\derbyclient.jar
2. 環境変数classpathへの追加
C:\Program Files\Java\jdk1.6.0\db\lib\derbyclient.jarを環境変数classpathに追加する
3. JavaDBサーバの起動
$ set DERBY_HOME=C:\Program Files\Java\jdk1.8.0\db $ path=%PATH%;%DERBY_HOME%\bin $ start startNetworkServer.bat
ところが下記のようなエラーが発生し、立ち上がりません。
$ start startNetworkServer.bat Sat Feb 21 12:11:43 JST 2015 : セキュリティ・マネージャがBasicサーバー・セキュリティ・ポリシーを使用してインストールされました。 Sat Feb 21 12:11:44 JST 2015 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
Java7u51で、デフォルトソケット権限が変更された模様。(Java™ SE Development Kit 7, Update 51 (JDK 7u51) - Update Release Notes)
JavaDBで使用する1527ポートがエフェメラルポートの範囲外らしく、セキュリティポリシーで明示的に許可しないと使えないらしい。
そこで、セキュリティーポリシーに明示的に指定してやります。
C:\Program Files\Java\jre8\lib\security\java.policyをテキストエディタで開き、以下のコードを追加します。
grant codeBase "file:C:/Program Files/Java/jdk1.8.0/db/lib/*" { permission java.net.SocketPermission "localhost:1527", "listen,resolve"; };
追加後、JavaDBを起動すると正常に起動します。
$ start startNetworkServer.bat Sat Feb 21 12:23:50 JST 2015 : Apache Derby Network Server - 10.10.1.2 - (1495037)が起動し、ポート1527で接続の受入れ準備が完了しました
別の対応方法として、JavaDBがセキュリティーマネージャーを有効にしないように起動する方法があります。
C:\Program Files\Java\jdk1.8.0\db\bin\startNetworkServer.batをテキストエディタで開きます。20行目あたりにCALL "%~dp0derby_common.bat" %*というコマンドがあるので、その次の行に、set DERBY_CMD_LINE_ARGS=-noSecurityManager %DERBY_CMD_LINE_ARGS%を追加します。これにより起動パラメータにセキュリティマネージャを無効にするオプションが含まれ、セキュリティポリシーチェックをバイパスできます。セキュリティ的には当然よろしくないと思いますが。
CALL "%~dp0derby_common.bat" %* set DERBY_CMD_LINE_ARGS=-noSecurityManager %DERBY_CMD_LINE_ARGS%
2014年10月29日水曜日
Bootstrap-selectでセレクトボタンもスタイリッシュに
Bootstrapを利用するとそれだけでかなりフォームデザインがよくなるものの、セレクトボックスはほぼデフォルトのままでいまいちです。別途、Bootstrap-selectというライブラリを追加することで、スタイリッシュなセレクトボックスにしてくれます。
使い方
Bootstrap-selectを公式サイトよりダウンロードし、下記ファイルをHTMLから読み込むようにします。
- "bootstrap-select.css" or "bootstrap-select.min.css"
- "bootstrap-select.js" or "bootstrap-select.min.js"
また、jQueryで動作することが前提ですので、jQueryもダウンロードし、読み込みます。
Code1は"bootstrap-select.css"を"css"フォルダに、"bootstrap-select.js"と"jquery.js"を"js"フォルダに配置した場合の例です。
また、ダウンロードしたり、フォルダ配置とか面倒だという場合はCDNを利用したロードも可能です。(CDNを使う目的は本来別ですが)適当なCDNを探してリンクします。
2014年10月24日金曜日
bootstrap-selectでsubText指定時のtitle属性について
Bootstrap-selectを導入し、showSubtextオプションをオンにしてみたのですが、できあがったSelect Boxにフォーカスしてみると、ツールチップの表示が変です。
Bootstrap-selectで、subTextはsmallタグで指定されますが、タグごとエスケープされてツールチップに表示されています。要素を調査してみると。。。
1行目のbuttonタグのtitle属性にがっつりsmallタグごと入っています。考慮漏れってやつでしょうか。
bootstrap-select.jsの415行目(下記Code3参照)でbuttonタグのtitle属性をセットしているのですが、title属性と、実際にbuttonに表示されるテキスト(上記Code2の3~6行目)と同じ変数titleからセットしています。そのため、showSubtextオプションがオフのときは問題ないのでしょうが、Subtextを表示する場合はsmallタグが入り込んでツールチップ表示が残念な感じになります。
this.$button.attr('title', htmlEscape(title)); this.$newElement.find('.filter-option').html(title);
本来的には実際にbuttonに表示されるテキストとtitle属性の値は別々に生成されるべきですが、面倒なのでtitle属性からはhtmlタグを取ってからセットするようにしました。
this.$button.attr('title', $('' + title + '').text()); this.$newElement.find('.filter-option').html(title);
いい感じにツールチップが表示されました。