« 2010年11月 | トップページ | 2011年3月 »

2010年12月29日 (水)

#JavaScript(promptの入力値をサーブレットに渡すには)

JavaScriptネタの第2弾です。
JavaでWebアプリケーションをつくることになって、そんなに詳しくもないのにチャレンジしてみました。JSPとサーブレットの連携で検索用語が悪いのかなかなかネットから情報が得られなかったので手こずってしまった内容をまとめてみました。
以下にまとめてみます。

■やりたい事
Javascriptのpromptの値を変数に格納するだけならネットで沢山見つかるのですが、その値をFORMタグを使ってサーブレットにPOSTしなくてはいけない。その方法がわかりませんでした。それと同時にFORMタグ内のValue値も送信するケースです。例えば、下に書いたとおりcheckboxのvalue値などです。

■結論
今回は特に画面に表示する必要がなかったのでhiddenを使いましたが、画面に表示する場合は表示部のタグにnameを定義してその要素に値を設定すれば良いでしょう。ポイントは、(1)promptの設定値をdocument.[FORMのname].[hiddenのname].valueに設定すること、(2)hiddenの要素はvalue=と書かなくても(1)で値が設定できる、(3)さらに、FORMタグの内容をサーブレットに渡すという目的を果たすためには、Javascriptの起動はbuttonのactionではなく、submitにしてonSubmitで起動する必要がありそうです。これでないと、FORMタグ内のvalue値がサーブレットに送信されないということがありました。
checkboxでチェックした値の部分は動的な値を設定しつつサーブレットに送信したいという目的がありました。これについては次回Javaネタで書いてみたいと思います。

Javascript側
・・・
function funcEmail() {
     var toAdress = prompt("送信者アドレスを入力してね。\n例:taro@hoge.co.jp","@hoge.co.jp");
     if (toAdress == null) {
          return false;
     } else if (toAdress=="") {
          alert("何も入力されていません!");
          return false;
     } else {
        document.frm1.toAdd.value=toAddress;
        return true;
     }
}
・・・
Prompt


JSP側
・・・
<FORM method="post" name="frm1" action="JavamailServlet" onSubmit="return funcEmail()">
<TABLE  border="1">
<TR>
<TH>CHK</TH>
<TH>名前</TH>
<TH>内容</TH></TR>
<TR>
<TD><INPUT type="checkbox" name="chk" value="次回に説明します"/></TD>
<TD>鈴木一郎</TD>
<TD>こんにちは</TD></TR>
<TR>
<TD><INPUT type="checkbox" name="chk" value="次回に説明します"/></TD>
<TD>松井秀喜</TD>
<TD>こんばんは</TD></TR>
</TABLE>
<INPUT type="submit" value="送信" />
<INPUT type="hidden" name="toAdd" />
</FORM>
・・・
Html

2010年12月19日 (日)

@アニメ(2011冬アニメOP、ED)

2010年もあとわずかとなりました。寒さも本格化してきましたね。ということで2011年冬アニメ特集です。
本数は継続も含めて25本ありました。現時点の情報でまとめてみました。
各楽曲のMP3ファイルや歌詞はこちらから入手できる可能性があります。

注:千葉エリアの開始年月日、発売日は変更の可能性あり

■FAIRY TAIL  2009/10/12 19:30  ~    東京
    OP1:Snow Fairy|FUNKIST 発売日:2009/12/02
    OP2:S.O.W. センスオブワンダー|アイドリング!! 発売日:2010/01/27
    OP3:ft.|FUNKIST 発売日:2010/04/28
    OP4:R.P.G.~Rockin' Playing Game|SuG 発売日:2010/09/01
    OP5:エガオノマホウ|MAGIC PARTY 発売日:2010/11/17
    OP6:Fiesta|+Plus 発売日:2011/01/19
    ED1:完璧ぐ~のね|渡り廊下走り隊 発売日:2009/11/11
    ED2:記憶メリーゴーランド|onelifecrew 発売日:2010/03/03
    ED3:ごめんね、私。|南波志帆 発売日:2010/06/23
    ED4:君がいるから|下川みくに 発売日:2010/07/21
    ED5:HOLY SHINE|Daisy×Daisy 発売日:2010/11/23
    ED6:-Be As One-|w-inds. 発売日:2011/01/26
    挿入歌:悲しき過去|中島愛 

■よりぬき銀魂さん  2010/4/5 18:00  ~    
    OP1:バクチ・ダンサー|DOES 発売日:2010/04/21
    OP2:風のごとく|井上ジョー 発売日:2010/08/04
    OP3:可能性ガール|栗山千明 発売日:2010/11/17
    OP4:カートニアゴ|FLiP 発売日:2011/02/23
    ED1:僕たちの季節|DOES 発売日:2010/04/21
    ED2:WAVE|Vijandeux 発売日:2010/07/14
    ED3:IN MY LIFE|AZU 発売日:2010/11/24
    ED4:桜音|ピコ 発売日:2011/03/09

■SOUL EATER リピートショー  2010/9/30 18:00  ~    
    OP1:カウンターアイデンティティ|UNISON SQUARE GARDEN 発売日:2010/11/24
    OP2:愛がほしいよ|辻詩音 発売日:2011/03/09
    ED1:碧の香り|牧野由依 発売日:2010/11/10
    ED2:ノーザンライツ|HOW MERRY MARRY 発売日:2010/03/02

■バクマン。  2010/10/2 18:00  ~    NHK教育
    OP:Blue Bird|コブクロ 発売日:2011/02/16
    ED1:BAKUROCK ~未来の輪郭線~|YA-KYIM 発売日:2010/11/24
    ED2:現実という名の怪物と戦う者たち|高橋優 発売日:2011/02/23
    挿入歌:超ヒーロー伝説|影山ヒロノブ 
    挿入歌:GET OP|KOOGY(森久保祥太郎) 発売日:2011/02/23
    挿入歌:絶対☆少女主義!!|聖ビジュアル女学院合唱部(starring 早見沙織と聖美女隊) 発売日:2011/03/09
    挿入歌:夜明け寸前のシンフォニー|聖ビジュアル女学院合唱部(starring 早見沙織と聖美女隊) 発売日:2011/03/09
    挿入歌:EUPHORIA|KOOGY(森久保祥太郎) 発売日:2011/02/23

■テガミバチ REVERSE  2010/10/3 0:10  ~    東京
    OP1:小さな魔法|ステレオポニー 発売日:2010/12/08
    OP2:約束|スガシカオ 発売日:2011/02/23
    ED1:勿忘草|ピコ 発売日:2010/12/08
    ED2:ペルセウス|山猿 

■STAR DRIVER 輝きのタクト  2010/10/3 17:0  ~    TBS
    OP1:GRAVITY 0|Aqua Timez 発売日:2010/10/13
    OP2:SHINING☆STAR|9nine 発売日:2011/03/09
    ED1:Cross Over|9nine 発売日:2010/12/01
    ED2:Pride|SCANDAL 発売日:2011/02/09
    挿入歌:モノクローム|気多の巫女(戸松遥) 発売日:2011/01/26
    挿入歌:木漏れ日のコンタクト|アゲマキ・ワコ(早見沙織) 発売日:2011/09/21
    挿入歌:イノセント・ブルー|ヨウ・ミズノ(日高里菜) 発売日:2011/04/27
    挿入歌:木漏れ日のコンタクト(Piano version)|アゲマキ・ワコ(早見沙織) 発売日:2011/09/21
    挿入歌:秋色のアリア|ニチ・ケイト(小清水亜美) 発売日:2011/07/27

■スーパーロボット大戦OG ジ・インスペクター  2010/10/3 22:00  ~    東京MX
    OP1:MAXON|JAM Project 発売日:2010/10/27
    OP2:流星Lovers|JAM Project 発売日:2011/05/11
    ED1:僕らの自由|美郷あき 発売日:2010/11/24
    ED2:最後の旅|美郷あき 発売日:2011/02/23
    挿入歌:Fairy Dang-Sing~月下に妖精は舞う|平井理子&貝原怜奈 

■這いよる!ニャルアニ リメンバー・マイ・ラブ(クラフト先生)  2011/12/11 1:00  ~    BS11
    ED:恋する乙女のカタルシス|LISP(阿澄佳奈、片岡あづさ、原紗友里) 発売日:2010/12/10
    ED:蛍火|RYTHEM 発売日:2007/07/18

■Rio-Rainbow Gate!-  2011/1/4 23:00  ~    TOKYO MX
    OP:世界と一緒にまわろうよ!|らぶ?ルーレッツ(リオ(井上麻里奈)、ミント(竹達彩奈)、リナ(たかはし智秋)、リンダ(日笠陽子)) 発売日:2011/01/26
    ED:みらくる☆ちゃんす|ULTRA-PRISM 発売日:2011/01/26

■君に届け 2ND SEASON  2011/1/5 0:59  ~    日本
    OP:爽風|タニザワトモフミ 発売日:2011/02/23
    ED:君に届け…|MAY'S 発売日:2011/01/19

■インフィニット・ストラトス  2011/1/7 1:25  ~    TBS
    OP:STRAIGHT JET|栗林みな実 発売日:2011/01/26
    ED1:SUPER∞STREAM|篠ノ之箒(日笠陽子) 発売日:2011/02/16
    ED2:SUPER∞STREAM|篠ノ之箒(日笠陽子)&セシリア・オルコット(ゆかな) 発売日:2011/02/16
    ED3:SUPER∞STREAM|篠ノ之箒(日笠陽子)&セシリア・オルコット(ゆかな)&凰鈴音(下田麻美) 発売日:2011/02/16
    ED4:SUPER∞STREAM|篠ノ之箒(日笠陽子)&セシリア・オルコット(ゆかな)&凰鈴音(下田麻美)&シャルル・デュノワ(花澤香菜) 発売日:2011/02/16
    ED5:SUPER∞STREAM|篠ノ之箒(日笠陽子)&セシリア・オルコット(ゆかな)&凰鈴音(下田麻美)&シャルル・デュノワ(花澤香菜)&ラウラ・ボーデヴィッヒ(井上麻里奈) 発売日:2011/02/16

■夢喰いメリー  2011/1/7 1:55  ~    TBS
    OP:Daydream Syndrome|藤原鞠菜 発売日:2011/01/26
    ED:ユメとキボーとアシタのアタシ|メリー・ナイトメア(佐倉綾音) 発売日:2011/01/26

■GOSICK  2011/1/8 1:53  ~    東京
    OP:Destin Histoire|yoshiki*lisa 発売日:2011/03/02
    ED:Resuscitated Hope|コミネリサ 発売日:2011/04/27

■魔法少女まどか★マギカ  2011/1/8 2:10  ~    TBS
    OP:コネクト|ClariS 発売日:2011/02/02
    ED:Magia|Kalafina 発売日:2011/02/16

■カードファイト!! ヴァンガード  2011/1/8 8:00  ~    東京
    OP:Vanguard|JAM Project 発売日:2011/02/23
    ED:ダイヤモンドスター☆|麻生夏子 発売日:2011/02/09

■べるぜバブ  2011/1/9 7:00  ~    日本
    OP:だだだ|グループ魂 発売日:2011/02/02
    ED:Answer|ノースリーブス 発売日:2011/03/02

■お兄ちゃんのことなんかぜんぜん好きじゃないんだからねっ!!  2011/1/9 23:30  ~    チバ
    OP:Taste of Paradise|高梨奈緒(喜多村英梨) 発売日:2011/01/26
    ED:アリアリ未来☆|高梨奈緒(喜多村英梨)、土浦彩葉(井上麻里奈)、近藤繭佳(荒浪和沙) 発売日:2011/01/26

■みつどもえ 増量中!  2011/1/10 0:00  ~    TOKYO MX
    OP1:本気戦隊ガチレンジャー|遠藤正明 発売日:2011/01/12
    OP2:わが名は小学生|みつば(高垣彩陽)、ふたば(明坂聡美)、ひとは(戸松遥) 発売日:2011/01/26
    ED1:またあした|遠藤正明 発売日:2011/01/12
    ED2:ランドセリング☆|のみこ 発売日:2011/01/26
    ED3:主よみもとに近づかん|みつば(高垣彩陽)、ふたば(明坂聡美)、ひとは(戸松遥) 

■フリージング  2011/1/10 0:30  ~    チバ
    OP:COLOR|MARiA 発売日:2011/02/23
    ED:君を守りたい|小林愛香 発売日:2011/02/23

■ドラゴンクライシス!  2011/1/11 1:30  ~    チバ
    OP:インモラリスト|堀江由衣 発売日:2010/02/02
    ED:ミライボウル|ももいろクローバー 発売日:2011/03/09

■レベルE  2011/1/11 1:30  ~    東京
    OP:コールドフィンガーガール|栗山千明 発売日:2010/12/15
    ED:「夢」~ムゲンノカナタ~|ViViD 発売日:2011/01/19

■これはゾンビですか?  2011/1/11 2:00  ~  2011/3/30 3:00  東京MX
    OP:魔・カ・セ・テ Tonight|野水いおり 発売日:2011/02/09
    ED:気づいてゾンビさま、私はクラスメイトです|山口理恵 with manzo 発売日:2011/02/09
    挿入歌:キラキラダイアモンド|サラスバティ(合田彩) 発売日:2011/04/12
    挿入歌:吸血ヴィーナス|セラフィム(日笠陽子)&サラスバティ(合田彩) 発売日:2011/04/12
    挿入歌:そりゃ魔装でしょ!Rock'n Roll|ハルナ(野水伊織) 発売日:2011/04/12
    挿入歌:素顔|ユークリウッド・ヘルサイズ(月宮みどり) 発売日:2011/04/12

■フラクタル  2011/1/14 0:45  ~    フジ
    OP:ハリネズミ|AZUMA HITOMI 発売日:2011/03/09
    ED1:Down By The Salley Gardens|AZUMA HITOMI 発売日:2011/03/09
    ED2:サリーガーデン|AZUMA HITOMI 発売日:2011/04/27
    挿入歌:昼の星 

■放浪息子  2011/1/14 1:15  ~    フジ
    OP:いつだって。|ダイスケ 発売日:2011/03/02
    ED:For You|Rie Fu 発売日:2011/02/16

■スイートプリキュア♪  2011/2/6 8:30  ~    朝日
    OP:ラ♪ラ♪ラ♪スイートプリキュア♪|工藤真由 発売日:2011/03/09
    ED:ワンダフル↑パワフル↑ミュージック!!|池田彩 発売日:2011/03/09

■放課後のプレアデス  2011/2/1 0:00  ~    Youtube

■ダンボール戦機  2011/3/2 19:27  ~    東京
    OP:1ドリーム|Little Blue box 発売日:2011/05/04
    ED:僕の貯金箱|前川紘毅 発売日:2011/05/04

2010年12月11日 (土)

§PostgreSQL(外部キー制約解除/再設定SQLを自動生成する方法(その2))

前回予告したalter table add constraint文の生成方法です。
pg_dumpから出力したファイルから生成します。VBAマクロは以下の通り。
セルにデータベース情報をセットしておくことが前提です。
仕様は、このマクロをmoduleに張り付けると、同じフォルダにpg_dumpの出力ファイルを
出力→読み込んでadd constraint文とdrop constraint文を生成して終了します。
pg_dumpは8.4.5で動作確認済みです。

Sub ボタン1_Click()
    lPgm = """C:\Program Files\PostgreSQL\8.4\bin\pg_dump.exe"""
    lOutTxt = ThisWorkbook.Path & "\pdmp.txt"           'pg_dump出力ファイル
    lAddConst = ThisWorkbook.Path & "\add_const.sql"    'add const文出力ファイル
    lDrpConst = ThisWorkbook.Path & "\drp_const.sql"    'drop const文出力ファイル名
    lhost = Range("C3").Value                           '接続先ホスト名
    lDB = Range("C4").Value                             '接続先データベース名
    lUser = Range("C5").Value                           'ユーザ名
   
    '1.pg_dump実行しDDL文出力
    rtn = Shell("cmd /c " & lPgm & " -U " & lUser & " -h " & lhost & " -s " & lDB & " >" & lOutTxt)
    waitTime = TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5)
    Application.Wait waitTime

   
    '2.DDLファイル開く
    Workbooks.OpenText Filename:=lOutTxt, StartRow:=1, DataType:= _
        xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:= _
        False, FieldInfo:=Array(1, 2)
   
    Set rtn = ActiveSheet.Columns(1).Find("FOREIGN KEY", LookAt:=xlPart)
    If rtn Is Nothing Then GoTo p_end
   
       
    '3.add constraint/drop constraint文生成
    Close #1
    Open lAddConst For Output As #1
    Close #2
    Open lDrpConst For Output As #2
   
    Print #1, "\t"
    Print #2, "\t"
    Print #1, "set client_encoding='SJIS';"
    Print #2, "set client_encoding='SJIS';"
   
    lMax = Cells(65000, 1).End(xlUp).Row
    For i = rtn.Row To lMax
        lVal2 = Cells(i, 1).Value
        If lVal2 Like "*FOREIGN KEY*" Then
            lConstName = Trim(Left(lVal2, InStr(lVal2, "FOREIGN KEY") - 1))
            lConstName = Mid(lConstName, InStrRev(lConstName, " ") + 1)
            lVal1 = Cells(i - 1, 1).Value
            Print #1, "select '■" & Mid(lVal1, InStrRev(lVal1, " ") + 1) & "/" & lConstName & "' from pg_class limit 1;"
            Print #1, lVal1
            Print #1, lVal2
            Print #1, ""
            
            Print #2, "select '■" & Mid(lVal1, InStrRev(lVal1, " ") + 1) & "/" & lConstName & "' from pg_class limit 1;"
            Print #2, Replace(lVal1, "ONLY ", "") & " DROP CONSTRAINT " & lConstName & ";"
            Print #2, ""
            
        End If
    Next
    Print #1, "\t"
    Print #2, "\t"
    Print #1, "select count(*) as ""Constraint Count"" from pg_constraint where contype='f';"
    Print #2, "select count(*) as ""Constraint Count"" from pg_constraint where contype='f';"
   
    Close #1
    Close #2
    ActiveWorkbook.Close
   
p_end:
    Set rtn = Nothing
    MsgBox ThisWorkbook.Path & "に出力しました"
   
End Sub

2010年12月 4日 (土)

§PostgreSQL(外部キー制約解除/再設定SQLを自動生成する方法(その1))

PostgreSQLネタ第2弾です。ORACLEを扱っていた時代はデータディクショナリーというDB管理テーブルがありましたがPostgreSQLにもシステムカタログというテーブル&ビューが存在します。
今回、マスタテーブルへのデータ投入をしようとした際に外部キー制約があってうまくデータが投入できなかったので昔Oracle時代によくやった制約を解除して再設定する手順でやってみようと思いました。
(1)外部キー制約を外し、
(2)更新したいレコードをいったん削除し、
(3)削除したキーと同じレコードを新しい内容で追加し(つまり新規追加または更新ができる)、
(4)外部キー制約再設定する手順です。
一番確実に実行する方法はデータベース構造からalter table文を生成する方法だと思うので
Oracle時代はデータディクショナリからSQLを生成したものです。
例えば、こんな具合。(懐かしいなぁ)
spool dis_const.sql
set echo off
set feedback off
set heading off
set pagesize 0
set linesize 1000
set termout off
set trimspool on
select 'ALTER TABLE ' || table_name || ' DISABLE CONSTRAINTS ' || constraint_name || ';' from user_constraints where constraint_type ='R';
spool off

これに倣ってPostgreSQLでもこんな具合。
\o drop_sql
\t
select 'ALTER TABLE' || t.relname || ' DROP CONSTRAINT ' || c.conname || ';' from pg_class t,pg_constraint c where c.conrelid=t.relfilenode and contype='f';
\o

さて、ここで問題発生です。
Oracleは制約の再設定はENABLE CONSTRAINTSとするSQL文で生成可能ですが、PostgreSQLはADD CONSTRAINTとしなければなりません。何が問題かというと、どの親テーブルと外部キー制約を結ぶかという親テーブルの情報が必要になりますが残念ながらpg_constraint表にはその情報がないようです。いろいろネットで同じ悩みの方がいないか探したのですが見つからずSQL生成をあきらめました。
では、どうするのかというとpg_dumpツールを利用することにしました(これで前回のpg_dumpの話題につながるわけです)。
pg_dumpからDDLだけを出力し、その情報からalter table add constraint文だけを抽出するVBAマクロを作成しました。
そのマクロについては次回ご紹介します。

2010年12月 2日 (木)

§PostgreSQL(pg_dumpでユーザ名とデータベース名と出力ファイル名を併記する方法)

最近、RDBMSのPostgreSQLを扱う機会が多いのですが、ネットで検索してもなかなか見つからない掲題の件があったので書いてみたいと思います。
ご承知の通りPostgreSQLのデータベースをバックアップするツールにpg_dumpがあります。pg_dumpで検索するとリファレンスが取得できますが、ユーザ名とデータベース名と出力ファイル名を併記する方法がいまいちわからないので試行錯誤してしまいました。PostgreSQLには他にpsqlという会話型SQLツールがありますが、こちらのオプションと違うようで戸惑ってしまいました。で、結論は以下の通りです。以下の例はテーブル構造のみ出力したかったので-sオプションを付加しています。勿論オプションは他にもたくさんありますので用途によって付加すればよいですが、基本構造はこれでいけると思います。ポイントは、データベース名は一番最後に記述するでしょうか。
なぜテーブル構造だけ出力したかったかは次回に書いてみたいと思います。

pg_dump -U ユーザ名 -h ホスト名 -s -n スキーマ名 データベース名 > 出力ファイル名
例:pg_dump -U postgres -h 192.168.0.100 -s -n hogehoge chomechome > c:\chome_db.txt

-U:ユーザ名
-h:ホスト名
-s:データは出力しない(DDLのみ出力)
-n:スキーマ名

« 2010年11月 | トップページ | 2011年3月 »