2007/09/14

ibatisのはまりどころ:JDBCタイプのARRAYを利用する

いやー、ぜんぜんドキュメントがないのでまいりました。はまること1時間。やっとみつけました。
これはツールadabarで行う方法ですが直接SQLMAP.xmlに記述でもできると思います。
ではそのやりかたですが


javaType="int" jdbcType="INTEGER" />
javaType="String" jdbcType="VARCHAR" />
javaType="int" jdbcType="INTEGER" />
javaType="java.sql.Array" jdbcType="ARRAY"
typeHandler="com.ibatis.sqlmap.engine.type.ObjectTypeHandler" />


ポイントはtypeHandlerの指定とそれをフルパスで指定すること

そうすれば以下のように
ShainDAO dao =
(ShainDAO) daoManager.getDao(ShainDAO.class);
Shain shain = new Shain();
// shain.setShainId(111);
shain = dao.selectByPrimaryKey(111);
System.out.println(shain.getShainName());
String[] a = (String[])shain.getColary().getArray();
System.out.println(a[0]);

で取得できます。
ibatis便利だー。

2007/09/11

ibatisのはまりどころ:データをDAOを利用してインサート時

インサートするテーブルの主キーがシリアルタイプの場合(オートナンバー)
Eclipseツールのabatorを利用してDAO作成時にabatorConfig.xmlの設定ファイルとして
以下のようにする。





但し、PostGresの場合だけあとは固定値のMySQLとかSQLServerとかを設定。

2007/09/03

postgresのはまりどころ:Lower関数に泣く!

initdbのときにロケールなしで指定しておかないとSQL関数のlower等で以下のようなエラーが発生。

ERROR: invalid multibyte character for locale
SQLステート:22021
ヒント:The server's LC_CTYPE locale is probably incompatible with the database encoding.



回避方法はDBのデータを一旦、pgdumpall等で退避しておいて以下のコマンドで再度DB構築
initdb --locale=C 各種オプション...

以上

2007/09/02

phpのはまりどころ:sendmailではまる

linuxでmail関数等を利用する場合にsendmail_pathの設定が必要になるがそのほかに
sendmailのサービスをたちあげておかなければならない。

>sendmail-8.12以降ではセキュリティ強化のため mailコマンドによる
>メール送信の際にも MTA(sendmailデーモン)が必要となっています。

更にapacheユーザーがsendmailのメールキューをためておくディレクトリ
「/var/spool/clientmqueue/」の参照、書込み権限等がないだめ。
/etc/groupのsmnpユーザーにに追加しよう。


2007/08/28

CIのはまりどころ[]

CIのキャッシュは一度よまれるとそれ以降はキャッシュが有効なかぎり実際のメソッドはよばれはない。
あたまえだが、実装としてはさらにメソッド毎にキャッシュするかどうかを設定できるといいな。
とおもって結局自分でつくりました。

2007/08/27

変数に設定した関数名を指定して実行する

function bbbb() {

echo "BBBB";
}

class a1 {

var $m;
var $m2;
var $m3;

function a1() {


$this->m = "aaaa";
$mt = $this->m;
$this->$mt();

$this->m2 = "$this->aaaa";
$mt2 = $this->m2;
$mt2;

/*これはだめうーん
ほかにやり方があるとおもうんだけど・・・
$this->m3 = "bbbb";
$mt3 = $this->m3;
$mt3();
*/
}

function aaaa() {

echo "AAAA";


}

}

$obj = new a1();

2007/08/21

Axis2のAXIOMでXPATHのはまりどころ



1111
2222



これがOMElementのelementに格納されていてaa要素すべてを取得する場合
普通は以下のように思うはず
AXOMXPath xp = new AXOMXPath("//aa");
List lstOmeAA = xp.selectNodes(element);

だがこれだと取得できず。
なぜなら暗黙のプレフィックスが存在していてxpath式の「aa」という要素名は存在しない。
じゃあどのように取得するのかというと

AXOMXPath xp = new AXOMXPath("//xs:aa");
xp.addNamespace("xs", "http://sample.org");
List lstOmeAA = xp.selectNodes(element);

てな感じ。
どこにもかいとらんよ。こんなの。
でもPHP4のXPATH関連の関数使ったときもこれとおんなじ挙動だった。
もしかしてXPATH関連の関数ワールドではあたりまえ?