まずは環境作りから・・・。
MySQLインストールでは以下にはまった。「Cannot start SSH tunnel manager」

Home>View>Outputよりログを参照すると同様のメッセージが多発。
ImportError: DLL load failed: �w�肳�ꂽ���W���[����������܂���B
Traceback (most recent call last):
File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\sshtunnel.py”, line 6, in
import socket
File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\Python\socket.py”, line 46, in
import _socket
Tracはインストールしてなかったが、Pythonhome環境変数をセットしてみた。
Traceback (most recent call last):
File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\sshtunnel.py”, line 6, in <module>
import socket
File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\Python\socket.py”, line 46, in <module>
import _socket
ImportError: DLL load failed: �w�肳�ꂽ���W���[����������܂���B¥
断念。。。
ただ、DataModelingは使えたのでER図を書いてDDLを自動生成してテーブルを作る。

DDLはテーブルを選んで右クリックで自動生成。ついで、Eclipse。JPAプロジェクトを作成し、右クリック>新規作成>エンティティでエンティティを作成。こんなクラスができた。
import java.io.Serializable;
import javax.persistence.*;
import java.util.Date;
import java.util.Set;
/**
* The persistent class for the tbl_update database table.
*
*/
@Entity
@Table(name=”tbl_update”)
public class TblUpdate implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name=”Trac_ID”)
private int trac_ID;
@Column(name=”Play_Count”)
private String play_Count;
@Column(name=”Type”)
private String type;
@Temporal( TemporalType.TIMESTAMP)
@Column(name=”Update_data”)
private Date update_data;
//bi-directional many-to-one association to TbmTrack
@OneToMany(mappedBy=”tblUpdate”)
private Set<TbmTrack> tbmTracks;
public TblUpdate() {
}
public int getTrac_ID() {
return this.trac_ID;
}
public void setTrac_ID(int trac_ID) {
this.trac_ID = trac_ID;
}
public String getPlay_Count() {
return this.play_Count;
}
public void setPlay_Count(String play_Count) {
this.play_Count = play_Count;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
public Date getUpdate_data() {
return this.update_data;
}
public void setUpdate_data(Date update_data) {
this.update_data = update_data;
}
public Set<TbmTrack> getTbmTracks() {
return this.tbmTracks;
}
public void setTbmTracks(Set<TbmTrack> tbmTracks) {
this.tbmTracks = tbmTracks;
}
}
クラスの自動生成とともに、persistence.xmlも更新されている!
<?xml version=”1.0″ encoding=”UTF-8“?>
<persistence version=”2.0″ xmlns=”http://java.sun.com/xml/ns/persistence” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>
<persistence-unit name=”JPA_test”>
<class>TblUpdate</class>
<class>TbmTrack</class>
</persistence-unit>
</persistence>
DBへの登録は下記のようなクラスで可能。
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class test {
public static void main(String[] args) {
TbmTrack track = new TbmTrack();
EntityManagerFactory emf = Persistence.createEntityManagerFactory(“JPA_test”);
EntityManager em = emf.createEntityManager();
track.setTrack_id(1);
track.setArtist(new String(“test”));
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(track);
tx.commit();
em.close();
emf.close();
}
}
予想通りDBからDDLを抽出してしまえば、残るソースで書くのはほんと僅か。これじゃあ言語毎の生産性も違いはあまりでない気がする。
iTunesのXMLファイルからは真・plist形式のxml読み込み用digester-rules(およびクラス)があったので、ここから拝借して秒殺。
面倒なのは前回のダンプとの差分をとってチャートを出したりする、データの持ち方の設計あたり。
簡単に作れるフレームワークが無いものか。