日本語についてまで考えると、まだまだやんないといけないことありそうだけど、
とりあえず、今の段階で、書いておきます。
mySQLから、JDBC経由でデータをとってきて、それをOpenOffice Calcに書き出す、Javaプログラムです。
■仕様
現在、mySQLのDB名testの中に、userテーブルがあり、以下のように
データが入っている。
このとき、1桁1レコードで、
項目名=値
の形で、以下のように、OpenOfficeCalcに書き出す
Javaアプリプログラムを作成する
■事前準備
(1)まず、mySQLをインストールして、userテーブルを作成し、データを入れます。
といって、どーやるの(>_<!)という場合は、
JavaでHello World > JDBC(MySQL)編
http://www.hellohiro.com/jdbcmysql.htm
を参考にしてくださいませ
(2)JDBCドライバをとってきて、それを、Eclipseで、プロジェクトのパスに通します。
JDBCドライバも上記の「JavaでHello World > JDBC(MySQL)編」に書いてあるので、それをとってきて、クラスパスをとおしてね(^^)
(3)OpenOfficeのjarをEclipseのパスに通します
ここの1に書いてあるOpenOfficeのjarをクラスパスにとおしてね。
(4)mySQLを起動します
mysqld --default-character-set=sjis
で起動します。
(5)OpenOfficeを起動します
"C:¥Program Files¥OpenOffice.org 2.1¥program¥soffice.exe" "-accept=socket,port=8100;urp;"
(¥は、本当は半角)みたいなかんじ
■ソース
前に書いたSample01.java,OpenOffice.java,Calc.javaの一部を修正します。
●Sample01.java
プログラムは以下のとおり
/** * サンプルプログラム * 参考にしたサイト * http://www.okapiproject.com/java/java_tools/openoffice/ * developer/openoffice_program1.htm * (本当は1行です。長いので、きりました) * */ import com.sun.star.lang.*; import com.sun.star.bridge.*; import com.sun.star.uno.*; import com.sun.star.frame.*; import com.sun.star.sheet.*; import com.sun.star.container.XIndexAccess; import com.sun.star.table.*; import com.sun.star.beans.PropertyValue; import java.sql.*; import java.util.*; /** * OpenOffice.org の表計算(Calc)に「Hello World」と出力する。 */ public class Sample01 { /** * 起動パラメータなし。 * @param args String */ public static void main(final String[] args) { OpenOffice of = null; Calc cl = null; //======================================// // OpenOfficeと接続 // //======================================// XMultiServiceFactory xMSF = null; try { of = new OpenOffice(); xMSF = of.connect(); } catch (java.lang.Exception e) { e.printStackTrace(); System.out.println("OpenOfficeの起動に失敗"); } //======================================// //Calc を起動 // //======================================// XSpreadsheetDocument myDoc = null; try { cl = new Calc(xMSF); myDoc = cl.open("private:factory/scalc","_blank"); } catch (java.lang.Exception e) { e.printStackTrace(); System.out.println("表計算の起動に失敗"); } //======================================// //シートを取得 // //======================================// XSpreadsheet oSheet = null; try { oSheet = cl.getSheetByPosition(myDoc,0); } catch (java.lang.Exception e) { e.printStackTrace(); System.out.println("シートの取得に失敗"); } //======================================// //DB接続 // //======================================// Vector allData = new Vector(); //データをここに入れておく try { // ドライバクラスをロード Class.forName("org.gjt.mm.mysql.Driver"); // データベースへ接続 String url = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=sjis"; Connection con = DriverManager.getConnection(url,"root","rootのパスワード"); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM user"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData meta = rs.getMetaData(); // 検索された行数分ループ while(rs.next()) { HashMap mp = new HashMap(); for(int i = 1 ; i <= meta.getColumnCount(); i ++ ) { mp.put(meta.getColumnName(i), rs.getString(meta.getColumnName(i)) ); } allData.add(mp); } // データベースから切断 stmt.close(); con.close(); } catch (java.lang.Exception e) { e.printStackTrace(); } //======================================// // セルに書き出し // //======================================// XCell oCell = null; try { for(int i = 0 ; i < allData.size() ; i ++ ) { HashMap mp = (HashMap)allData.elementAt(i); String[] key = (String[]) mp.keySet().toArray(new String[0]); for(int j = 0 ; j < key.length ; j ++ ) { oCell = cl.getCell(oSheet,i,j); oCell.setFormula(key[j] + "=" + (String)mp.get(key[j])); } } } catch (java.lang.Exception e) { e.printStackTrace(); System.out.println("セル書き出しで失敗"); } //処理終了 System.exit(0); } } |
(上記< > ¥は、本当は半角)
前に書いたSample01.javaとは、DB接続が追加され、セル書き出しが一部違います。
なお、
String url =
"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=sjis";
ですが、localhostにホスト名、testにDB名が入ります。
また
Connection con =
DriverManager.getConnection(url,"root","rootのパスワード");
は、rootにユーザー名が、"rootのパスワード"にパスワードが入ります。
●OpenOffice.java
前のものとまったく同じですので、省略します。
●Calc.java
前のものに、以下のメソッドを追加します。
/** * セルをとってきます。 * @param oSheet とってくるシート * @param x 桁(0から始まる) * @param y 行(0から始まる) * @return XCell */ public XCell getCell(XSpreadsheet oSheet,int x,int y) throws java.lang.Exception { return oSheet.getCellByPosition(x,y); } |
(上記< > ¥は、本当は半角)
とりあえず、今回はここまで。