- - PR -
DBデータをプロパティ.xmlに格納
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-14 14:17
ttskと申します。
お世話になります。 別スレでいただいた情報をもとに "http://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/TinyTips/Properties/Properties.html" "http://www.hellohiro.com/property.htm"を参考にさせてもらい MyProperties.xmlを読み込んで、MysSQL:test.hogeテーブルにアクセスして 値を出力するコードにしてみました。 try { Properties prop = new Properties(); InputStream stream = new FileInputStream("MyProperties.xml"); prop.loadFromXML(stream); String driver = prop.getProperty("myprop.jdbc.driver"); String url = prop.getProperty("myprop.jdbc.url"); String user = prop.getProperty("myprop.jdbc.user"); String password = prop.getProperty("myprop.jdbc.password"); stream.close(); Class.forName(driver); Connection con = DriverManager.getConnection(url,user,password); Statement stmt = con.createStatement(); String sql = "SELECT * FROM hogetable"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String mono = rs.getString("mono"); String bango = rs.getString("bango"); System.out.println(mono + " " + bango); } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); このコードでDBのデータ(mono,bango)を出力する部分をproperties.xml様式 ( <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> )のxmlに格納したいのですが、 可能でしょうか。 [ メッセージ編集済み 編集者: ttsk 編集日時 2005-04-14 14:19 ] | ||||||||||||
|
投稿日時: 2005-04-14 17:10
自己レスです。
試してませんが, System.out.println("<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>"; System.out.println("<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">"); System.out.println("<entry key=\"" + mono + "\">" + bango + "</entry>"); ........ こんな感じで書き出していくしかないでしょうか? | ||||||||||||
|
投稿日時: 2005-04-14 17:28
単純に、Propertiesのインスタンスを生成して、DBのデータをputし、
Properties#storeToXML()でファイル出力してやればよさそうな気がします。
[編集] ちなみに。。。ですが、ttskさん提示のコードでは、標準出力にXML形式の 出力がされるだけで、ファイルには出ませんよ。 (標準出力をファイルにリダイレクトしていれば別ですが...) あと、私が書いた上記コードはあくまで即興のサンプルで、このままでは 実用に耐えませんのであしからず。。。(ストリームのクローズはfinally句でする、等) [/編集] [ メッセージ編集済み 編集者: YOU@IT 編集日時 2005-04-14 17:37 ] | ||||||||||||
|
投稿日時: 2005-04-14 18:46
ご回答ありがとうございます。
さっそく,提示されたコードを一部コメントアウトして --始め Properties props = new Properties(); props.put(mono, bango); FileOutputStream out = new FileOutputStream("hoge.xml"); props.storeToXML(out, "ほげ"); //out.flush(); //out.close(); --終わり 以上を while(rs.next())句の中にいれてみましたが、出力された hoge.xml には 最後のレコードの値だけ入っていました。 どこでfor句を使うか見当がつきません。 --出力:hoge.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>ほげ</comment> <entry key="最後のmono">最後のbango</entry> </properties> >>>ちなみに。。。ですが、ttskさん提示のコードでは、標準出力にXML形式の >>>出力がされるだけで、ファイルには出ませんよ。 >>>(標準出力をファイルにリダイレクトしていれば別ですが...) > hoge.xml にリダイレクトするつもりでした。 | ||||||||||||
|
投稿日時: 2005-04-14 18:54
for文というか、Propertiesの特性(より正確には、Mapの特性)だと思います。 もし、Propertiesのキーになるmonoの値が常に同じなのであれば 値がどんどん上書きされるだけですので、最後のデータのみ出力される ことになりますよね。 monoの値がデータによって異なるのであれば、ループ処理がおかしいのだと思います。 | ||||||||||||
|
投稿日時: 2005-04-14 19:10
FileOutputStreamのインスタンス化もループの中ですか? #以下編集追加 String引数だけのFileOutputStreamをインスタンス化しても 追加書き込みされました。(Java1.5では) (FileOutputStreamを何度もインスタンス化するのは良いとは思いませんが) ただ、プロパティの値が一緒だと1行しか出なかったので、そこに原因があるのでは? [ メッセージ編集済み 編集者: 夏椰 編集日時 2005-04-14 19:28 ] | ||||||||||||
|
投稿日時: 2005-04-14 21:44
YOU@IT様より引用: -------------------------------------------------
monoの値がデータによって異なるのであれば、ループ処理がおかしいのだと思います。 -------------------------------------------------------------------------------- いえ、最後のデータだけですので、上書きされているのだとおもいます。 夏椰様より引用: -------------------------------------------------------- FileOutputStreamのインスタンス化もループの中ですか? String引数だけのFileOutputStreamをインスタンス化しても 追加書き込みされました。(Java1.5では) ただ、プロパティの値が一緒だと1行しか出なかったので、そこに原因? -------------------------------------------------------------------------------- はい、"FileOutputStream out = new FileOutputStream("hoge.xml");" をループの中にいれています。 私の希望する出力ファイル形が以下のようなxmlなので追加上書きが無理なのかもしれないと、 思いはじめています。 <properties> <comment>Temporary Properties</comment> <entry key="子">2000</entry> <entry key="牛">2001</entry> <entry key="寅">2002</entry> <entry key="卯">2003</entry> .......... </properties> いちど、key=value 平テキストのpropertiesファイルにして試してみます。 結果でましたら報告します。 | ||||||||||||
|
投稿日時: 2005-04-15 10:07
ループ処理の中に入れるものはProperties.putだけでした。
を実行すると
と出力されました。 ただ、やはり値( 上記例でいうと2000とか2001)の重複は許されなかったです。 追加上書きをするっていうのはまだ実験していないのですが、 感じ的にファイルを読み込んで、値をPropertiesに保持し、 追加のデータをputしてファイルに新規書き込みする って感じじゃ駄目ですかね? #YOU@IT様のご指摘をうけ、出力結果を修正(04/15 11:35) [ メッセージ編集済み 編集者: 夏椰 編集日時 2005-04-15 11:31 ] |
1|2|3
次のページへ»