孫的メモ

戻る

JAVA / eclipse / JavaScript / スタイルシート / perl / ORACLE / OTHER
-------------------------------------------------------------------

【JAVA】

●JAVA - 文字コード一覧
    http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TextEncoder/Charset.htm
    http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TextEncoder/CodePage.htm

●JAVA - 定数フィールド
    http://java.sun.com/j2se/1.4/ja/docs/ja/api/constant-values.html

●JAVA - swing 設定済みキーアサイン一覧(404 Not Found)
    http://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/swing/doc-files/Key-Index.html

●プリミティブ型のlongからLongへの変換

    long a = 5;             //long型のaという変数があるものとする
    Long b = new Long(a);   //プリミティブ型からオブジェクトに変換

    //setAttributeする時はプリミティブ型ではできないのでオブジェクトに変換する必要がある。
    request.setAttribute("longNum",b); 

    //こゆのも同じ事
    request.setAttribute("flg",new Boolean(true));

    //Integer型に変換してさらにStringに変換
    request.setAttribute("cnt",new Integer(userList.size()).toString());

    // int と Integer boolean と Boolean についても同様
    //request.setAttributeの引数は String,Object なのでObjectに変換する必要がある

●lengthとsize()
    配列の要素数を取得するのはlength
    Listの要素数を取得するのはsize()

    str.length;      //strという配列の要素数を取得
    str[0].length(); //strの0番目の文字列長を取得

    lst.size();      //lstというListの要素数を取得

    lst.get(0);      //lstというListの0番目の値を取得

●Iterator値取得サンプル
    boolean b=false;
    List isOwner = new ArrayList();
    while(itrCurrent.hasNext()) {
        
        Folder fol = (Folder)itrCurrent.next();
        b = fol.getOwner(con).contains((User)user);
        isOwner.add(new Boolean (b));
    }

    request.setAttribute("isOwner", isOwner);


●日付を指定のフォーマットで表示したい

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); // 2005年5月13日14時32分2秒の場合 20050513143202 のようになる
    Date date = new Date();
    String dateStr = sdf.format(date);
    System.out.println("フォーマット後日付:"+dateStr);

    ※yyyyMMddHHmmssをyyyyMMddhhmmssにすると時間の表示が12時間周期の表示になる
上記の例の場合 20050513023202 のようになる ●javax.swing.text.DocumentFilterを利用する際に覚えておくとよい事。 ・日本語入力中はinsertStringとremoveが交互に走る。  入力が確定するとreplaceが走る。 ・コピー&ペースト等での入力でCALLされた場合insertStringが走る。 ・英数字の入力で入力した場合replaceが走る。 ・DeleteやBackSpaceで消す場合はremoveが走る。 ちなみに、消す対象が同じ場合offsetの値もlengthの値も変わらない。 DeleteかBackSpaceかの違いが無いので キーで処理を振り分けるならKeyListener等でやる必要がありそう。 以上のことから単純なtoUpperCase()等の処理をするのではなく 「日本語入力確定後」に何か編集を行いたい等のややこしい処理を行うときには 文字列が未確定状態かどうかの判定が必要となる。 その時に役に立つのが「javax.swing.text.AttributeSet」である。 ただ、DocumentFilterのメソッドをオーバーライトするとして insertStringとreplaceには AttributeSetが引数としてわたってくるがremoveには渡ってこないため removeでも何か文字列の編集を行うという時には工夫する必要がでてくる。 解決方法の例を示す。 ------------------------------------------------------------------------------------- public class MyDocumentFilter extends DocumentFilter { //変換中かどうかを判断するフラグを用意する。 private boolean isHenkanChuu = false; public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { //入力文字列変換中フラグを設定! if ( attr != null && attr.isDefined(StyleConstants.ComposedTextAttribute)){ //フラグの値を変更 isHenkanChuu = true; System.out.println("insertString 入力文字変換中!"); super.insertString(fb, offset, string, attr); }else{ //フラグの値を変更 isHenkanChuu = false; //TODO insertStringで文字列編集をするならここに記述。 System.out.println("insertString 入力文字変換中じゃない!"); super.insertString(fb, offset, string, attr); } } public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attr) throws BadLocationException { //入力文字列変換中フラグを設定! if ( attr != null && attr.isDefined(StyleConstants.ComposedTextAttribute)){ //フラグの値を変更 isHenkanChuu = true; System.out.println("replace 入力文字変換中!"); }else{ //フラグの値を変更 isHenkanChuu = false; System.out.println("replace 入力文字変換中じゃない!"); } //TODO 入力変換中に呼ばれる事は多分ないはず・・・ //なので、文字列編集を外に記述しちゃってOKかも super.replace(fb, offset, length, string, attr); } public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { if( isHenkanChuu == true ){ System.out.println("remove 変換中!"); super.remove(fb,offset,length); }else{ System.out.println("remove 変換中じゃない!"); //TODO 文字列編集をするならここで! super.remove(fb,offset,length); } } } ------------------------------------------------------------------------------------- ●swing : ボタンの上でマウスを押しっぱなしにしている(ようはドラッグ)状態の時に ボタンの表示をへこませたい場合のリスナー登録について(マウス限定ではあるが) 次のようなメソッドの実装を行ったMouseListenerを登録するとよい。 public void mousePressed( MouseEvent e ) { //凹 border = BorderFactory.createBevelBorder( BevelBorder.LOWERED ); btn.setBorder( border ); } public void mouseReleased( MouseEvent e ) { //凸 border = BorderFactory.createBevelBorder( BevelBorder.RAISED ); btn.setBorder( border ); } ●swing : 警告ダイアログやエラーダイアログの簡単な表示の仕方 エラーメッセージを表示させたり 警告ダイアログを表示させたい場合次のメソッドを使うとよい。 JOptionPane.showMessageDialog(Component component, Object message, String title, int type); componentの欄には親となるコンポーネントを設定すればよい。 messageの欄には表示させたいエラーメッセージ等を表示する事。 titleの欄に記入した文字列がタイトルのところに表記される。 typeにはJOptionPaneにあるstatic領域を利用すべし JOptionPane.WARNING_MESSAGE …警告用のアイコン表示。 JOptionPane.ERROR_MESSAGE …エラー用のアイコン表示。 JOptionPane.QUESTION_MESSAGE…?マークの吹き出しアイコン表示。 JOptionPane.PLAIN_MESSAGE …アイコンなしのダイアログ。 (ちなみにアイコンはLookAndFeelがWindowsである場合に確認したので デフォルトのMetalではアイコンが異なる可能性有り) ※ちなみにshowMessageDialogではなくshowConfirmDialogを使うと 了解、取消やはい、いいえなどユーザの反応を取得できるダイアログとなる。 ●swing : JListの扱い JListを定義する際DefaultListModelを設定してやらないと リストの編集等を行うのが困難になるので注意しましょう。 JList lstFileList = new JList(); DefaultListModel model = new DefaultListModel(); lstFileList.setModel( model ); リストに項目を追加する場合 model.addElement(Object object); リストから項目を削除する場合 model.addElement( int index ); リストに設定されている項目数を取得する場合 model.getSize() ●swing : jarファイル内の画像を表示させる方法 例)JLabelにcaution.gifを表示させたい。 //[誤り] // これだとJarファイル内部ではなくファイルシステムの方にアクセスしにいってしまう。 JLabel label = new JLabel(); label.setIcon( new ImageIcon( "/image/caution.gif" ) ) ; //[正解] // リソースとして読み込むことによりJAR内部の画像ファイルを取得 JLabel label = new JLabel(); InputStream inStream = getClass().getResourceAsStream( "/image/caution.gif" ); if ( inStream != null ) { try { BufferedImage image = ImageIO.read( inStream ); Icon icon = new ImageIcon( image ); label.setIcon( icon ); } catch (IOException e) { // 画像は使用しない } } ●swing : jarファイルに署名を行う方法 署名をしていないアプリではファイルシステムにアクセスする事ができない。 Antを利用してjarファイルを作成時に署名を行ってしまうと楽。 ちなみにEclipse3.1系の場合、[右クリック]→[エクスポート]→[Ant ビルド・ファイル]を 行うと自動でbuild.xmlを作成してくれるので楽。 ↓の例で追加しなければならない箇所としては initの2行とCareateKeyのところのみ。 <jar jarfile="lib/Test.jar" basedir="bin" /> <signjar jar="lib/Test.jar" alias="ryumago-group" storepass="secret" /> <target name="CreateKey"> (中略) </target> [build.xml例 一部抜粋]---------------------------------------------------------- <!--これを実行するとlib配下に署名済みのjarファイルが作成される。--> <!--署名は先に作っておく事。--> <target depends="init" name="build"> <!-- コンパイル実行 srcからbinへ。また、image/*.gifについても含めるように --> <javac destdir="bin"> <src path="src" /> <include name="image/*.gif" /> <classpath refid="project.classpath" /> </javac> <!-- jarファイル作成 binのファイルをlib配下にTest.jarという名前で作成--> <jar jarfile="lib/Test.jar" basedir="bin" /> <!-- 署名付与 ryumago-groupというエイリアス名で作成した署名をTest.jarに付与--> <signjar jar="lib/Test.jar" alias="ryumago-group" storepass="secret" /> </target> <!-- 署名作成 ryumago-groupというエイリアス名で署名を作成--> <target name="CreateKey"> <genkey alias="ryumago-group" storepass="secret"> <dname> <param name="CN" value="Ant Group" /> <param name="OU" value="Jakarta Division" /> <param name="O" value="Apache.Org" /> <param name="C" value="US" /> </dname> </genkey> </target> --------------------------------------------------------------------------------- ●swing : Java Web Startからjarファイルを起動させたい。 jnlpという拡張子のファイルをとりあえず作成する。 application-desc main-classにはmainメソッドを含むクラス名を パッケージつきで記述すること。 これを用いることによりTest.jnlpからTest.jarを起動可能となる。 また、サーバに配置する場合HTMLファイルからjnlpファイルへのリンクを張ればよい。 例)index.html <html> <body> <h2>Java Web Startのテスト</h2> <a href="Test.jnlp">Launch the application Test</a> </body> </html> 例)Test.jnlp <?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for SwingSet2 Demo Application --> <jnlp spec="1.0+" codebase="http://localhost:8080/test" href="Test.jnlp"> <information> <title>SwingSet2 Demo Application</title> <vendor>Sun Microsystems, Inc.</vendor> <description>SwingSet2 Demo Application</description> <description kind="short">A demo of the capabilities of the Swing Graphical User Interface.</description> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.5"/> <jar href="Test.jar"/> </resources> <application-desc main-class="jp.dragon.ryumago.MainView"/> </jnlp> ●swing : JTreeの初期選択を定義する setSelectionRow(0)を行う事でrootを選択可能。 例) //getFolderTree()はDefaultMutableTreeNodeを返すものとする。 JTree folderList = new JTree( getFolderTree() ); //ルートにフォーカスを持っていく。 folderList.setSelectionRow(0); ●SWT : Textにセットする文字列とスクロールの関係 setTextを行うと記入されている文章が全て入れ替わる。 insertを行うとCaretの後ろに文字列が挿入される。 appendを行うと文字列が最後尾に追加される。 スクロールバーの動き setTextではcaret位置は先頭のままなので最後尾がはみ出していても見えない。 insertでは入力された最後の文字列が見えるよう自動でスクロールしてくれる。 appendもinsertと同じく。 画面へのログ出力とかはappendで実装したらよさげ。 ●Matcherの賢い使い方 このようにすると、m.appendReplacementを実行した段階で sbにreplace完了までのデータまでがappendされ m.appendTailを実行することで残りのデータがappendされる。 文字列を置換しながら検索を続行したい時に便利。 StringBufferにappendされていくので どこまで編集されたのかというlengthも簡単に取れる。 Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString()); ●ファイルのソートサンプル ソース閲覧 ●Listに格納されているデータからCSV形式のデータを作成するサンプルメソッド ソース閲覧 ------------------------------------------------------------------- 【eclipse】 ●プロパティファイル ApplicationResources.propertiesを開くときは Properties File Editorで開くこと ●Eclipseショートカット ・アクティブなエディタを切り替える Ctrl+F6 ・アクティブなビューを切り替える Ctrl+F7 ・ソースのインデント自動整列 範囲を選択して Ctrl+Shift+F ・インポート宣言の編成 Ctrl+Shift+O ・すべてビルド Ctrl+B ・入力補助呼び出し Ctrl+Space ・編集する対象のソースを選択するための小窓(表示し切れていないソースも含む)表示 Ctrl+E ・リソースを開く(ファイル名で検索して該当ファイルをすばやく開く) Ctrl+Shift+R ・参考 http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@E382B7E383A7E383BCE38388E382ABE38383E38388E382ADE383BCE4B880E8A6A7 (ここのサイトはdJUnitの便利な使い方も載ってます。) ●Eclipse3.1からの機能 ・ショートカットキーリスト表示 ヘルプから「Key Assist...」 Ctrl+Shift+L ●implのSetterおよびGetter記述の楽 変数を記述した後 右クリック→ソース→GetterおよびSetterの生成 ●CodeSugarというプラグインを使うと オブジェクトにequals、hasCode、 toString等のメソッドを自動的に実装してくれるので便利。 http://sourceforge.net/projects/codesugar/ ●eclipse で リモートデバッグをする方法 ・websphereの場合 管理コンソール>デバッグ対象サーバ>デバッグサービス 始動のチェックを付けて保管後サーバの再起動を行う ・eclipseの設定 デバッグダイアログで「リモートJava アプリケーション」新規作成 対象プロジェクトが設定されてる事を確認し websphere側で設定したデバッグ用ポート(デフォルトは7777)を 接続プロパティのポート欄に入力する 設定後「デバッグ」ボタンを押下するとwebsphere側にリモート接続する 接続後、新規にブレークポイントを設定した場合でもちゃんと反応してくれる ・参考 http://nakayalog.net/?p=29 ------------------------------------------------------------------- 【JavaScript】 ●よく参考にさせてもらっているページ http://www.openspc2.org/ ●同じ名前のフォームが複数ある場合のlengthの取得について var i=0; //値の初期化 var str=""; i = document.search.inputText.length; //lengthの取得 // この時、inputTextという名前のフォームが1つしかない場合エラーになる // 解決手段としてgetElementsByNameをしようすると良い。 i = document.getElementsByName("inputText").length; //lengthの取得 str = document.getElementsByName("inputText").item(0).value; //値の取得 item(n)の記述で指定 ●フォーム名に.がついてる場合 // こういう風に記述すると正しく認識できる。 str = document.forms["search"].elements["searchDateFromYmd.tagYear"].value; ●サンプル // write[0]〜write[n]という名前のラジオボタンのtrue/false切り替え // パラメータとしてわたってきてるstrの値がwの時は書き込み可の方をチェック // wでないときは読み込み可の方をチェック // HTMLイメージ // <input type=radio name="write[0]" value=true>読み込み可 ... write[0]の0番目という認識 // <input type=radio name="write[0]" value=false>書き込み可 ... write[0]の1番目という認識 // <input type=radio name="write[1]" value=true>読み込み可 ... write[1]の0番目という認識 // <input type=radio name="write[1]" value=false>書き込み可 ... write[1]の1番目という認識 // ※JSPにてcore(コア)タグ使用中 // <c:out value="${cnt}"/>には // java側で request.setAttribute("cnt",sf.getSize()); を行った値が入っているとする // 値的には配列の要素数を格納(ラジオボタンの個数がうまく取得できなかったため苦肉の策ですw;) function allCheck(str){ var i = 0; var cnt = 0; var name="write[0]"; var cntS = "<c:out value="${cnt}"/>"; if ( cntS != null || cnt != "" ){ cnt = eval(cntS); } for ( i = 0 ; i < cnt ; i++ ){ if ( str == "w" ){ document.getElementsByName("write["+i+"]").item(1).checked = true; }else{ document.getElementsByName("write["+i+"]").item(0).checked = true; } } } ●文字の埋め込み <DIV></DIV>とか<SPAN></SPAN>とかには文字を埋め込む?ということが可能 <DIV ID=TEST></DIV>という風に記述しておいてjavascriptにて文字列を代入 document.all.TEST.innerHTML = "テスト";←ここの時点では<DIV ID=TEST></DIV>このタグの個所にテストという文字が表示される document.all.TEST.innerHTML = "てすと";←ここの時点ではてすとという文字が表示される これを使うとオンチェンジイベントとかオンマウスオーバーのイベントとかで 表示する文字を変化させることが可能となる。 ※記述の仕方はSPANでも同様。  多分SPANの方が文章の一部を変更してとかいうのが出来るので使い勝手はこっちのが高いかな ●表示・非表示 <DIV></DIV>タグにはdisplay:none display:blockというスタイルを適用できる これを使うとこの記述のあるDIVタグに囲まれた範囲を表示させたり非表示にさせたりできるので 簡単にエクスプローラ風のメニューとかを作成できる。 HTMLイメージ <input type=button name=test onClick="test(idTEST1)"> <input type=button name=test onClick="test(idTEST2)"> <input type=button name=test onClick="test(idTEST3)"> <DIV ID="idTEST1" style="display:none">TEST1をクリックしたときに表示される個所</DIV> <DIV ID="idTEST2" style="display:none">TEST1をクリックしたときに表示される個所</DIV> <DIV ID="idTEST3" style="display:none">TEST1をクリックしたときに表示される個所</DIV> script的には function (id){ // 渡されたidの個所を展開する if ( id ==null || id == "" ){ //idがわたってきてない場合はそのままreturn(無くても良い) return; } document.getElementById("idTEST1").style.display = "none"; //押されたID以外のメニューを閉じる場合はnoneで閉じてしまう document.getElementById("idTEST2").style.display = "none"; //getElementByIdを使用するのはDIVのIDを指定してあるから document.getElementById("idTEST3").style.display = "none"; document.getElementById(id).style.display = "block"; //押されたIDのメニューを展開したい場合はこのようにblockを代入 } ●動的にフォームオブジェクトの個数が変化するJAVASCRIPTサンプル サンプル ●フォームオブジェクトが存在するかしないかを判断するJavaScript サンプル ●チェックボックスのチェックをつけている分だけオブジェクトを作成し チェックボックスのvalue値をセットするJavaScript サンプル ●チェックボックスを全部チェックしたときと 1つでも未チェックのものがあるときとで文字の表示を切り替えるJavaScript サンプル ●子画面から親画面の関数をコールしたい (親)window.open(〜);であたらしい窓を開く     ↓ (子)opener.関数名()で親の関数をコール。 ※この時子画面でフレームを使用していた場合、 正常に動作しない場合がある(っていうか、イントラマートであったw) その場合は top.opener.関数名()で親の関数をコールしてやると良い。 ------------------------------------------------------------------- 【スタイルシート】 ●よく参考にさせてもらっているページ スタイルシートの裏の裏 文字を折り返させたい場合に使用する word-break:break-all; テーブルの枠幅を固定にする table-layout: fixed; オーバーした個所をスクロールさせる(DIVタグで指定可能) overflow-y: auto; overflow-x: auto; 例)<div style="width:300px;height:300; overflow-y: auto;"> ------------------------------------------------------------------- 【perl】 1.現在の年月日を表示させるCGI -+-------------------------------------------------------+- #! /usr/local/bin/perl ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); @dayname = (San, Mon, Tue, Wed, Thr, Fri, Sat); @m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $date = sprintf("%s, %02d %s %04d %02d:%02d:%02d +0900", @dayname[$wday], $mday, @m[$mon], $year+1900 , $hour, $min, $sec); ### プレビュー print "Content-Type: text/html\n\n"; print "時間 [date>>$date]\n\n"; exit; -+-------------------------------------------------------+- ▲実際にどう表示されるのかについては<こちら2.現在の年月日を表示させるCGIその2 -+-------------------------------------------------------+- #! /usr/local/bin/perl local($sdate) = localtime(time) . ""; ### プレビューその1 print "Content-Type: text/html\n\n"; print "[1]時間[sdate>>$sdate]\n\n"; print "\\n\n"; local($sdate_); @sdate_ = split(/ /, $sdate); $sdate = $sdate_[0] . ", " . $sdate_[2] . " " . $sdate_[1] . " " . $sdate_[4] . " " . $sdate_[3] . " +0900"; ### プレビューその2 print "[2]時間[sdate>>$sdate]\n\n"; print "\\n\n"; ### プレビューその3 print "[3]時間[sdate>>Date: $sdate]\n\n"; print "\\n\n"; ### プレビューその4 print <<"EOM"; [4]時間 Date: $sdate
さて、どう表示されたでしょうか? EOM exit; -+-------------------------------------------------------+- ▲実際にどう表示されるのかについては<こちら3.CGIを設置したディレクトリを閲覧するCGI サンプルについてはCGI実験室に置いてあります。 また、ソースについても同じくです。 -+-------------------------------------------------------+- ▲こっちにもおいとくねw サンプル ソース ------------------------------------------------------------------- 【ORACLE】 ●足りない字数分、指定文字列を追加した状態で値を返却してくれる select lpad('TEST',6,'0') as test from dual ※dualはダミーテーブル 結果> test ------ 00TEST ●DATABASE LINKの使用方法 DATABASE LINKが以下のように作成されているものとする。 CREATE DATABASE LINK TEST.WORLD CONNECT TO DBATEST IDENTIFIED BY USING 'TEST' / 参照対象テーブルはTARGET SQL> select * from DBATEST.TARGET@TEST (TESTというデータベースにあるDBATESTユーザのTARGETテーブルを参照) ↑意味合いが正しいかどうかは微妙です(爆) ●ORACLEでSELECTで抽出されたレコードのうち 指定行を取得するためのSQL SQL> select * from ( select テーブル.*, rownum rn from テーブル ) where rn >= 1 and rn <= 2; (テーブルから1行目と2行目を取得) <備考> postgreSQLでは limit と offset を利用することで出来る。 ●テーブルの構造を取得するSQL SELECT TABLE_NAME , --テーブル名 COLUMN_NAME, --項目名 DATA_TYPE, --項目タイプ NVL(DATA_PRECISION,CHAR_COL_DECL_LENGTH), --長さ DATA_SCALE --小数点 FROM USER_TAB_COLUMNS order by table_name, column_name,data_type ●PLSQLでFOR文を使用する場合 -------------------------------------------------------- FOR cur カーソル LOOP FETCH カーソル INTO cur_out_icno, cur_kinmu_date, cur_kinmu_no, cur_kinitu_flg, cur_after_series_no, cur_syonin_date, cur_after_tori_syubetu; -------------------------------------------------------- このように実行してしまうと 2度カーソル宣言で設定したSELECT文が実行されてしまうため 処理が1行とびの状態になってしまう。 この場合FORではなくLOOPを使うと良い。 ------------------------------------------------------------------- OHTER Excelショートカットキー Alt+Enter … セルに改行を挿入する。 HTML メタタグ一覧 http://www.geocities.co.jp/Hollywood/9752/meta.html c# 便利メソッド クラスオブジェクトのgetter値をすべてログに出力する //using System.Reflection; // DEBUG private bool ParamObjectTraceWriteLog(object data) { try { Type type = data.GetType(); MemberInfo[] infos = type.GetMembers(); Consol.WriteLine("*** Class Type [{0}]", type); foreach (MemberInfo menberInfo in infos) { if (menberInfo.MemberType == MemberTypes.Property) { string str = Convert.ToString(type.InvokeMember(menberInfo.Name, BindingFlags.GetProperty, null, data, null)); Consol.WriteLine("*** {0} [{1}]", menberInfo.Name, str); } } } catch { return false; } return true; }
戻る