SQLiteメモ:オートインクリメントするカラムの値をINSERT直後に取り出すには

| コメント(0) | トラックバック(0)

SQLiteで自動でインクリメントするカラムを定義するには

「カラム名 INTEGER PRIMARY KEY」

という風にしてCREATE TABLEします。下が例になります。下の例ではカラム名IDXという名前のオートインクリメントされるカラムを定義しています。下のサンプルで作成されたテーブルにINSERTするとIDXは自動でインクリメントされていきます。インサートするたびに1,2,3・・・と勝手にインクリメントされるわけです。ユニークな値ですのでこれをキーとして利用したりします。最後のほうのバグ回避のおまじないは現在のバージョンのSQLiteに不具合があるらしくらしくクローズエラーになるのでハンドルをundefで開放してあげています。やらないとエラーが表示されますが動かないというわけではないようです。

#!/usr/bin/perl
#
# テスト用テーブルTEST_TBLを作成するサンプル
#
#1 IDX INTEGER PRIMARY KEY,
#2 NAME
#3 ADDR
#
use DBI;

my $mydb = "TEST.DB";

my $hDB = DBI->connect(
"dbi:SQLite:dbname=$mydb","","",{PrintError=>0}
);

if(!$hDB){
print "$DBI::errstr \n";
exit(-1);
}

my $sql = "CREATE TABLE TEST_TBL(
IDX INTEGER PRIMARY KEY,
NAME,
ADDR
)";

my $hst = $hDB->do($sql);
if(!$hst){
print $hDB->errstr . "\n";
exit(-1);
}

$hDB->disconnect;


そして、データをINSERTした直後にこのIDXの値が欲しい場合があります。INSERTした後にSELECTして取り出すのは面倒です。そういう場合は、「last_insert_rowid」を使います。
これで、INSERTしたデータに割り振られたIDXの値を取得可能です。
下が例になります。

#!/usr/bin/perl
#
# TEST_TBLにインサートするサンプル
#
#1 IDX INTEGER PRIMARY KEY,
#2 NAME
#3 ADDR
#
use DBI;

#DBファイル名
my $mydb = "TEST.DB";

#DB接続
my $hDB = DBI->connect(
"dbi:SQLite:dbname=$mydb","","",{PrintError=>0,AutoCommit=>0}
);

#エラーチェック
if(!$hDB){
die $DBI::errstr,"\n";
}

#データ挿入のSQL文
my $SQL = "INSERT INTO TEST_TBL VALUES(NULL,?,?)";

#BEGIN
$hDB->do('BEGIN');

#バインド
my $hst = $hDB->prepare($SQL);

#エラーチェック
unless($hst){
die $hDB->errstr,"\n";
}

#インサート実行
my $retval = $hst->execute("TANAKA","EHIMME");
$hst->finish();

#エラーチェック
unless($retval){
die $hDB->errstr,"\n";
}

#COMMIT
$hDB->do('COMMIT');

my $ret = $hDB->func('last_insert_rowid');

#バグ回避おまじない
undef $hst;
#切断
$hDB->disconnect;


print "IDX:$ret\n";


色々と手抜きが有りますが、INSERT時にエラーが発生した場合、本来はrollbackとかするべきです。

上のサンプルを使って、テーブルを作成し、インサートのほうのサンプルを何回も実行するとIDXの値がインクリメントされて行くのがわかります。

ブログランキング←何かお役にたてましたら、応援クリックおながいします。
ブックマークに追加する

トラックバック(0)

ここだよ

トラックバックスパム対策の為この記事にトラックバックを行うにはトラックバック元の記事中にこのページのURL「http://blog.kumacchi.com/2008/04/sqliteinsert.html」を含めてください。

コメントする

機械翻訳

よく読まれている記事

アクセス解析

アクセス元ランキング

QRコード

フィードメーター

フィードメーター - KUMA TYPE

スカウター

スカウター : KUMA TYPE

 
track feed KUMA TYPE
あわせて読みたい
ブログタイムズ

ブログパーツ

超立体マスクマン

アンテナ

■日刊スレッドガイド ■【2ch】ニュー速クオリティ ■痛いニュース(ノ∀`) ■アルファルファモザイク ■越えられない壁( ゚д゚) ■未定なブログ ■何でもありんす ■2chスポーツニュースナビ ■【2ch】ニュース速報アワーズ ■ベア速 ■小太郎ぶろぐ ■ひろぶろ ■GIGAZINE ■せと弘幸Blog『日本よ何処へ』 ■岸部シローの四郎マンション ■しょこたん☆ぶろぐ ■パソコントラブル出張修理・サポート日記 ■【楽天ブックス】DVD アニメ ベストセラーランキング ■呟き

iA

このブログ記事について

このページは、くまっちが2008年4月19日 06:13に書いたブログ記事です。

ひとつ前のブログ記事は「フリーのFTPクライアントFFFTPがいつのまにかVer 1.96bになってて使いやすくなってる件」です。

次のブログ記事は「時事ドットコム:たばこ自販機、免許証でも購入可能に=財務省が容認検討」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。