sqlite> copy テーブル名 from 'CSVファイル名' using delimiters ',';
sqlite3 -separator , データベース.db ".import csvファイル名 テーブル名"
CREATE TABLE schedule(date REAL NOT NULL, task TEXT NOT NULL); INSERT INTO schedule( date, task ) VALUES( julianday( 'now' ), 'Meeting' ); SELECT task FROM schedule WHERE date BETWEEN julianday( '2007-04-19' ) AND julianday( '2007-04-20' ); SELECT strftime( '%m-%d %H:%M', date, 'localtime' ) FROM schedule WHERE task='Meeting';
select datetime(time, 'unixepoch', 'localtime') from ticket; select datetime(time, 'unixepoch', 'localtime') from ticket where date(time, 'unixepoch', 'localtime') >= '2007-01-01'; select datetime(time, 'unixepoch', 'localtime') from ticket where date(time, 'unixepoch', 'localtime') BETWEEN '2007-01-01' and '2007-06-01';
select strftime('%Y/%m/%d', project.ordertime, 'unixepoch', 'localtime') from project;# sqlite database .dump | sqlite3 database.3
# sqlite3 database .dump | sqlite database.2
sqlite データベース名.db sqlite> pragma integrity_check; ok sqlite>
sqlite データベース名.db .dump >backup.sql sqlite データベース名.db < backup.sql
シーケンス表の替わりとして使える。
nullをINSERTすると、自動インクリメントされる。
が、他のデータベースとの移植性が下がるので、注意。
CREATE TABLE foo ( id INTEGER UNSIGNED PRIMARY KEY ) INSERT INTO foo VALUES (NULL)
$aType = array(
'master',
'tables',
'schema',
'schemax',
'schema_x',
'alter',
);
echo "<pre>";
foreach($aType as $type){
$data = $db->getListOf($type);
if (DB::isError($data)) {
continue;
}
echo "$type => ";
var_export($data);
echo "\n";
}
結果:
master => array ( 0 => 'table', ) tables => array ( 0 => 'foo', ) schema => array ( 0 => 'CREATE TABLE foo (bar varchar(10))', ) schemax => array ( ) schema_x => array ( )
データベースファイルの情報を得ます。
「size」を見る事で、データベース作成済みかどうかをチェックする等に使えるはず。
print_r($db->getDbFileStats());
結果:
Array
(
[0] => 770
[1] => 3113726
[2] => 33206
[3] => 1
[4] => 48
[5] => 48
[6] => -1
[7] => 0
[8] => 1135670667
[9] => 1135670667
[10] => 1135670667
[11] => -1
[12] => -1
[dev] => 770
[ino] => 3113726
[mode] => 33206
[nlink] => 1
[uid] => 48
[gid] => 48
[rdev] => -1
[size] => 0
[atime] => 1135670667
[mtime] => 1135670667
[ctime] => 1135670667
[blksize] => -1
[blocks] => -1
)
SQLiteは通常、SQL発行毎にBEGIN 〜 END を実行するので、処理が遅い場合がある。
大量のINSERT等を高速に行いたい場合は、以下のようにトランザクション内で実行すること。
BEGIN; 大量のINSERT処理... END;
$db->autoCommit(false); $db->query(); // 大量に発行 $db->commit();
dateフィールドに「current_timestamp」を使うと、apacheが「Segmentation fault」で落ちる。
*1
「# pear install sqlite」でインストールすると2.8.xがインストールされるので注意。
よって、datetime()関数を使うと良い。
select datetime('now','localtime')
| Apache | 2.0.51 |
| PHP | 4.3.11 |
| SQLite | 2.8.14 |
# pear install sqlite
# vi /etc/php.d/sqlite.ini --------------------------- ; Enable sqlite extension module extension=sqlite.so --------------------------- +httpdの再起動 # service httpd restart # php -m | grep sqlite --------------------------- sqlite ---------------------------
<?php
if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
sqlite_query($db,'CREATE TABLE foo (bar varchar(10))');
sqlite_query($db,"INSERT INTO foo VALUES ('fnord')");
$result = sqlite_query($db,'select bar from foo');
var_dump(sqlite_fetch_array($result));
} else {
die ($sqliteerror);
}
?>
<?php
/**
* SQLiteサンプル2
*
* @note
* - PEAR DB使用
* - インストール
* @code
# pear install sqlite
# pear install DB
* @endcode
*/
require_once 'DB.php';
$dsn = 'sqlite:///mysqlite.db?mode=0666';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (DB::isError($db)) {
die($db->getMessage());
}
$aStats = $db->getDbFileStats();
if($aStats["size"] <= 0){
$result =& $db->query('CREATE TABLE foo (bar varchar(10))');
if (DB::isError($result)) {
die ($result->getMessage());
}
}
$result =& $db->query("INSERT INTO foo VALUES ('fnord')");
if (DB::isError($result)) {
die ($result->getMessage());
}
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$res =& $db->query('select bar from foo');
$row =& $res->fetchRow();
var_dump($row);
$db->disconnect();
?>
http://www.sqlite.org/datatypes.html
| BLOB |
| BOOLEAN |
| CHARACTER |
| CLOB |
| FLOAT |
| INTEGER |
| KEY |
| NATIONAL |
| NUMERIC |
| NVARCHAR |
| PRIMARY |
| TEXT |
| TIMESTAMP |
| UNIQUE |
| VARCHAR |
| VARYING |
CREATE TABLE ex2( a VARCHAR(10), b NVARCHAR(15), c TEXT, d INTEGER, e FLOAT, f BOOLEAN, g CLOB, h BLOB, i TIMESTAMP, j NUMERIC(10,5) k VARYING CHARACTER (24), l NATIONAL VARYING CHARACTER(16) );