2011年8月27日土曜日

MYSQLでのトランザクション処理

MYSQL 5.2 を使用してAndroidからDB操作している。

使い方は、Javaと同じで特にAndroidだから何か特別な事が必要と言う事もない。

テーブルを作成しデータを作成し、レコードへ書き込む(Insert、Update)

うまく書き込めた。


・サンプル(大体こんな感じ)

public Connection mConn = null;
// SQLサーバ ユーザー名
public static final String DATABASE_USER = "user";
// SQLサーバ パスワード
public static final String DATABASE_PASSWORD = "password";
// キャラクターコード
public static final String CHARACTER_ENC = "characterEncoding";




Class<?> driverClass = Class.forName("com.mysql.jdbc.Driver");
// サーバーマシンのIPアドレスを設定
// ローカルにMySQLがある場合、10.0.2.2 を指定
String strCon = "jdbc:mysql://192.168.100.100:3306/test_tbl?useUnicode=true";

Driver driver = (Driver)driverClass.newInstance();
Properties prpt = new Properties();
prpt.put(DATABASE_USER, "root");
prpt.put(DATABASE_PASSWORD, "123");
prpt.put(CHARACTER_ENC, "utf8");

mConn = driver.connect(strCon, prpt);
// オートコミットの解除(トランザクション制御がしたい為)
mConn.setAutoCommit(false);

Statement stmt = _conDB.mConn.createStatement();
stmt.executeUpdate("UPDATE persondata SET age=10");


しかし、後で気づいた。

mConn.setAutoCommit(false);これ、やってるんだから更新されてはいけない。

更新する為には明示的にCommitが必要のはず。

Commitの前にExceptionが出たらRollbakしないといけない。

Exceptionになったら、Rollbakするように記述してみた。

mConn.rollback();

executeUpdateした後、わざとExceptionを発生させロールバックしてみるも、正常に更新されてしまう。

調査して分かった事。

テーブル作成時のストレージエンジンの種類を全部「MyISAM」で作成していた。

「MyISAM」はトランザクション処理をサポートしていない。

トランザクション制御するなら有名な「InnoDB」がセオリーか。

なので、テーブルを全部「InnoDB」にしようと思ったが、それぞれ特徴があるので良く考えて変えるべき。

「MyISAM」はスピードが速いので更新しないSelectしかしない様なテーブルや更新が少ないテーブル(マスター系等)に使う。
「InnoDB」はトランザクション処理に対応しているので更新系(明細系)のテーブルに使う。


「MyISAM」はテーブルロックする
「InnoDB」はレコードロックする


まぁ、主流が「InnoDB」なので例外的に「MyISAM」を使用する機会がなければ全部「InnoDB」でもいいと思う。


とりあえず、コミットとロールバックは出来るようになって解決。

 
   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年8月26日金曜日

eclipseのAndroidデザイナ

eclipseで使用できるAndroidのvisualなデザイナがある。

フォルダ的には"\res\layout"にあるファイルが対象になる。

レイアウトファイルをパッケージエクスプローラー等からダブルクリックすると、「Graphical Layout」と言うタブで、レイアウトデザイナが起動する。

Android[2.1]や[2.2]、[2.3]向けに作成している時に、デザインがくずれてうまく表示されない。

デザイナ上ではくずれるが、実行するとうまく表示される。

そこで、2.1向けだとしてもデザイナの対象バージョンを3.2にしてやる。












そうすると、ほとんどのデザインバグが直る。

   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村