07/10/23 14:40:37 2Ih164Og
URLリンク(www.sqlite.org)
過去スレ
sqliteを語るスレ
スレリンク(db板)
SQLite 2
スレリンク(db板)
SQLite 3
スレリンク(db板)
SQLite 4
スレリンク(db板)
SQLite 5
スレリンク(db板)
2:NAME IS NULL
07/10/23 16:17:16
ツール等
【GUIツール】 TkSQLite
URLリンク(reddog.s35.xrea.com)
【ADO.NET 2.0 Provider】 System.Data.SQLite
URLリンク(sqlite.phxsoftware.com)
【ODBC】 SQLite ODBC Driver
URLリンク(www.ch-werner.de)
3:NAME IS NULL
07/10/23 23:11:53
【ネタ】
OS X ハッキング! SQLiteが広げるこれからのアプリケーション
URLリンク(journal.mycom.co.jp)
SQLite Java Wrapperのコンパイル
URLリンク(syo.cocolog-nifty.com)
SQLiteへの大量のINSERT処理が厳しい (CodeZine編集部ブログ):
URLリンク(blog.codezine.jp)
SQLite性能評価その1
URLリンク(www.sutosoft.com)
Fulltext index on SQLite
URLリンク(www.dodgson.org)
SQLite の全文検索を Python から使ってみる (1)
URLリンク(plaza.rakuten.co.jp)
SQLite Full Text Search with MeCab
URLリンク(reddog.s35.xrea.com)
4:NAME IS NULL
07/10/25 23:16:53
乙
なんか前スレいつの間にかなくなってた
しかし、語ることがないDBMSてのは安定してて優れている証かね。
退屈だねぇ
たまにはサーバーとかが爆発して、ちょっと修理して頼れるところとか見せてやりたいよ!
SQLite関係ないけどな!
5:NAME IS NULL
07/10/26 15:22:46
php5徹底攻略という本の通りに、
COPY zip FROM '13tokyo.txt';
とやると、
SQL error: near "COPY": syntax error
とでるのですが、何故でしょうか?
6:NAME IS NULL
07/10/26 15:58:48
COPYという命令はSQLiteにはない
7:NAME IS NULL
07/10/26 17:11:59
2.8 以前では存在したんだけど 3.0 で撤去されたとかなんとか
URLリンク(www.sqlite.org)
PHP5 徹底攻略もって無いからあれだけど
zip っていうテーブルがあることを前提として
sqlite3 を起動して対話型シェルから
sqlite> .import 13tokyo.txt zip
とかやればいいと思うよ
8:NAME IS NULL
07/10/27 10:39:12
C++でSQLiteを使っています。
sqlite_execでSELECTしたときに呼ばれるコールバック関数内でUPDATEしたいのですが、できませんでした。
実際ドキュメントにもsqilte_execの再帰呼び出しは問題があるように書かれてました。
これを解決するには、UPDATEするための情報を一旦保持しておいて、後から実行するしかないのでしょうか?
メモリ使用量が気になるので、別な手段があったら教えていただけると嬉しいです。
9:NAME IS NULL
07/10/27 10:43:59
メモリ使用量が気になるほどのデータをドカっとSELECTしてドカっとUPDATEするのか
それを通常の運用でやる必要があるのならテーブル設計が間違ってる気がする
10:NAME IS NULL
07/10/27 11:03:10
>>9
レスありがとうございます。
テーブル設計ですか…見直してみます。
11:NAME IS NULL
07/10/27 11:14:22
実はSQL一発でできる処理だったりとか
12:8
07/10/27 11:55:24
>>11
どうなんでしょう…
今やろうとしていることを簡単化すると、
id, name, strカラムを持つテーブルに対して、
nameとstrが特定の条件を満たすとき(文字列処理をした上で判定)に、
UPDATEでstrを書き換えるという処理です。
13:NAME IS NULL
07/10/27 12:07:40
使ったことないけどユーザ定義関数というのはそういう為にあるんではなかろうか。
14:NAME IS NULL
07/10/27 15:01:56
もう1回sqlite_open()すればできないことはない
15:8
07/10/27 17:46:20
>>13
sqlite_create_function を使ってユーザ定義関数COND, CHANGEを定義して、
UPDATE table SET str=CHANGE(str) WHERE COND(str)=1;
とすることによって、うまくいきました。
ありがとうございます。
>>14
今度試してみます。
16:NAME IS NULL
07/10/28 19:07:03
>>8
sqlite3_exec() はパフォーマンスが悪いから、面倒でも
sqlite3_prepare_v2() と sqlite3_step() を使った方がいい。
sqlite3_exec() も結局内部で prepare と step を実行してるだけだし
コールバックなんぞに頼らずに自力で step するようにすれば
行を読みながら別の処理を行うのも簡単にできる。
17:NAME IS NULL
07/10/28 19:32:10
sqlite3_prepare_v2でも、パフォーマンスはそんなに変わらんな
URLリンク(www.sutosoft.com)
18:NAME IS NULL
07/10/29 14:18:47
sqliteで標準偏差を計算するにはどのようにしたらいいのでしょうか?
19:NAME IS NULL
07/10/29 14:59:11
どこまで自分で考えたか(調べたか)くらい書こうぜ
20:18
07/10/29 16:01:37
はい。すみませんでした。
平方根の計算をどうやるのかなーと。
専用の関数も無いみたいだし、自分で作らなくちゃなんですよね?
2乗してxになる数を求める方法が知りたいです。
出来ればsqlだけで計算したいのです。
(個々の値 - 平均点)^2 の総和 / 総数
までは求めました。
table test
num value
1 723
2 743
3 234
4 532
5 789
6 334
7 124
8 888
select sum(a*a) / (select max(num) from test)
from
(select value - ( select round(avg(value),3) from test) a
from test)
21:NAME IS NULL
07/10/29 17:24:59
2乗が計算できるのであれば、-(1/2)乗すれば平方根が出るんじゃね?
やったこと無いのでハズしてるかもしれないが。
22:NAME IS NULL
07/10/29 17:37:44
すまん、-(1/2)乗ではなく、(1/2)乗だった。
23:NAME IS NULL
07/10/29 18:30:18
組み込みでは冪乗演算子も無いよね。
ちょっとぐぐってみたところ、 extension-functions.c なるモノがある模様。
Contributed Files
URLリンク(www.sqlite.org)
24:NAME IS NULL
07/10/29 21:25:01
何が何でもすべてSQLでやらなかきゃいかんもんなの?
分散求めといて、ホストプログラムで平方根取れば良いのでは?
25:NAME IS NULL
07/10/30 12:53:02
CodeZine:SQLiteを操作できるFirefox拡張機能「SQLite Manager 0.2.4」リリース(アドオン, DB)
URLリンク(codezine.jp)
26:NAME IS NULL
07/10/30 15:09:57
そのうちjavascriptだけでsqliteを操作出来るようになって、
完全にサーバー不要のウェブアプリケーションが出来るかもしれないな。
27:NAME IS NULL
07/10/30 15:24:37
サーバなしって…
データをローカルに置いたらウェブアプリケーションのメリットねーだろ‥
28:NAME IS NULL
07/10/30 16:09:15
>>27
プログラム配布が無いのは良いな
29:NAME IS NULL
07/10/30 16:11:44
ウェブアプリケーションというより、ブラウザアプリケーションって感じだね。
これならCD-ROMに入れて配布とか出来るし
30:NAME IS NULL
07/10/30 17:44:20
つ[Google Gears]
31:NAME IS NULL
07/10/30 22:26:41
sqliteとmysqlだけで運用してるけど、なんかsqliteだけでいいような気がしてきた。
二つをわける意味ってあるのかね?
32:NAME IS NULL
07/10/30 23:02:56
さあ。エスパーじゃないもんで。
33:NAME IS NULL
07/10/30 23:27:20
エスパーだけど、いいんじゃないかな。
34:NAME IS NULL
07/10/30 23:58:41
エスパーが言うなら間違いないな
35:NAME IS NULL
07/10/31 00:17:57
さては伊藤だな
36:NAME IS NULL
07/10/31 00:23:12
ぱわーろっく、つでぃ!
37:NAME IS NULL
07/10/31 00:47:09
>>31
マジレスすると、そんな疑問を持つくらいなら意味ないだろうな
38:NAME IS NULL
07/10/31 06:57:53
>>36
嵐の中ボンジョビとヘリに同乗して来い
39:NAME IS NULL
07/10/31 09:38:11
政則表現サポートまだー?
40:NAME IS NULL
07/11/01 00:12:08
まさのりって誰だよw
41:NAME IS NULL
07/11/01 00:19:59
呼んだ?
42:NAME IS NULL
07/11/07 17:03:15
リリースきた
2007 Nov 05 (3.5.2)
* Dropped support for the SQLITE_OMIT_MEMORY_ALLOCATION compile-time option.
* Always open files using FILE_FLAG_RANDOM_ACCESS under windows.
* The 3rd parameter of the built-in SUBSTR() function is now optional.
* Bug fix: do not invoke the authorizer when reparsing the schema after a schema change.
* Added the experimental malloc-free memory allocator in mem3.c.
* Virtual machine stores 64-bit integer and floating point constants in binary instead of text for a performance boost.
* Fix a race condition in test_async.c.
* Added the ".timer" command to the CLI
43:NAME IS NULL
07/11/08 14:51:02
Dropped support for~
↑どういう意味?
44:NAME IS NULL
07/11/08 15:03:13
無くしたってことじゃん?
45:NAME IS NULL
07/11/11 23:00:33 2YsJoDVT
インクリメントの最新の値を得る方法って知らない?
MySQLのLAST_INSERT_IDみたいなやつ。
46:NAME IS NULL
07/11/11 23:08:19
sqlite3_last_insert_rowid()かな?
47:NAME IS NULL
07/11/12 14:30:33
テーブルの列を削除する方法ってないでしょうか?
alter table テーブル名 drop column 列名
としても出来ませんでした
48:NAME IS NULL
07/11/12 15:02:22
>>47
URLリンク(www.sqlite.org)
49:45
07/11/12 20:55:21 6IOGFgpn
>>46
トンクス
select last_insert_rowid();
で行けた。
50:NAME IS NULL
07/11/13 13:35:28
Androidに載るのが確定したね。
51:WdUyLgrrXIRwiSMg
07/11/13 14:42:19
hVSJwN <a href="URLリンク(padikzvudjco.com) [url=URLリンク(xgqhogakudkn.com) [link=URLリンク(syimejtdnxhn.com) URLリンク(usveqseywzan.com)
52:NAME IS NULL
07/11/13 15:49:05
~ロイドと聞いただけで俺の頭の中に「とかちつくちて」が流れた!
53:NAME IS NULL
07/11/13 15:54:53
俺の頭にはR2D2がハイテンションで何かを語りかけてかけてきたお。
54:NAME IS NULL
07/11/13 21:12:48
アンドロイドってなんでつか。人工知能でつか
55:NAME IS NULL
07/11/13 21:26:18
サムスは出てこないものか
56:NAME IS NULL
07/11/13 22:54:39
>>54
URLリンク(ja.wikipedia.org)
57:NAME IS NULL
07/11/14 16:41:24
Bento
URLリンク(www.filemaker.co.jp)
DBエンジンはSQLite
Mac の Address Book や iCal のデータをそのまま利用できてリレーションも設定できるみたい。
58:NAME IS NULL
07/11/14 18:43:05
弁当
59:NAME IS NULL
07/11/14 18:58:15
>>58
そう。弁当。
なんでもつっこめる10年前のOpen DocのBENTO(弁当)フォーマットを今風にしたアプリケーション。
60:NAME IS NULL
07/11/14 19:01:51
ギガナツカシス
61:NAME IS NULL
07/11/14 19:06:58
おれけっこう長いことCyberdog使ってたわw
62:NAME IS NULL
07/11/17 21:08:10 N1iehPDr
まんぱん商事社長だ
63:NAME IS NULL
07/11/17 21:09:18
ゴバクった。スマン。
64:NAME IS NULL
07/11/27 07:09:30 2e8MM+HH
インサートした行のキーを取得する関数とかありましたっけ。
65:NAME IS NULL
07/11/27 07:19:21
>>49あたりの話がそうではないの?
66:NAME IS NULL
07/11/29 17:59:23
どっかにVS2005+ADO.NET2.0ProviderをつかったGUIアプリのサンプル転がってないですか?
67:NAME IS NULL
07/11/30 13:04:38
SharpDevelopでBoo使ったやつならあるよ。
68:NAME IS NULL
07/11/30 23:03:22
突然ですが、SQLiteは何と発音すればいいのでしょうか??
69:NAME IS NULL
07/11/30 23:07:01
スクライト
ストライクでも通じる
70:NAME IS NULL
07/11/30 23:40:16
漏れはえすきゅーぇらいと
71:NAME IS NULL
07/12/01 00:09:38
スプライトでも通じる
72:NAME IS NULL
07/12/01 01:22:00
前スレより。
348 名前:NAME IS NULL[sage] 投稿日:2007/06/04(月) 09:47:11 ID:???
前スレ 734 です。参考になれば。
> From: [734] NAME IS NULL <sage>
> Date: 2007/02/21(水) 11:09:08 ID:???
> 「えすきゅーらいと」か「えすきゅーえ (る) らいと」くらいかなあ?
>
> URLリンク(video.google.com)
> URLリンク(www.mail-archive.com)
349 名前:NAME IS NULL[sage] 投稿日:2007/06/04(月) 12:08:49 ID:???
新めのスレッドあった。
URLリンク(www.mail-archive.com)
読み方もPublic Domainでいいんじゃね? ってのに同意。
73:NAME IS NULL
07/12/01 01:23:32
PostgreSQLとおなじキモさを感じる。
74:NAME IS NULL
07/12/01 01:25:03
結論は通じればいい。
75:NAME IS NULL
07/12/01 01:38:57
スクライトで通じたことはないな
76:NAME IS NULL
07/12/01 02:22:16
スクリテも通じにくいね
77:NAME IS NULL
07/12/01 14:11:49
>>75
アルター使いがいっぱいいそうだな
78:NAME IS NULL
07/12/01 14:56:29
>>76
酢くりティポリティ思い出した
79:NAME IS NULL
07/12/02 13:59:27
tksqliteは、つーかスクライトと読みます。
80:NAME IS NULL
07/12/02 14:21:03
たかすクリニックかとおもた
81:NAME IS NULL
07/12/05 02:37:22 jVN3kHRw
ロリポップってレンタルサーバにSQLiteをうpしたんですが
PHPから読み込みしかできないんですOTZ
書き込みってどうすればいいんですかねぇ(´・ω・`)?
82:NAME IS NULL
07/12/05 03:16:33
属性を変えます
83:NAME IS NULL
07/12/05 09:25:17
ディレクトリの書き込み属性も変えた方が良いかもね。
84:NAME IS NULL
07/12/06 05:38:13
OSはMac OS Xです。
sqlite3コマンドについてなんですが、
日本語が通りません。
例えば、テーブル higebu にnameというフィールドが有ったとして、
UPDATE higebu SET name = 'メソ' WHERE number = 666;
みたいなことができません。
ただし、PHPなどからでは、nameにマサルやフーミンといった
日本語を格納することは出来ます。
何か対処法はないでしょうか?
85:NAME IS NULL
07/12/06 05:46:00
ついでににシェルスクリプト作って、
cat hoge.db
UPDATE higebu SET name = 'メソ' WHERE number = 666;
sqlite3 higebu < hoge.db
みたいなことをやれば、ちゃんと格納されます。
sqlite3コマンドに日本語が通らないんです。
86:NAME IS NULL
07/12/06 08:51:55
日本語のエンコードの問題じゃね?
シフトJISの"ソ"は、0x835c だから、下位バイトの 5c がバックスラッシュ扱いされている気がする。
DB格納データもコンソールも UTF8にしてやってみ。
87:NAME IS NULL
07/12/06 11:44:08
どれどれと思ってOSX10.4.11で試してみた。
確かにterminalからだとsqlite3のコマンドラインに日本語が入力できないね。
これ、emacsのshellバッファの中でsqlite3動かすとちゃんとお望みの動作ができてるので、
日本語入力の問題臭い。どうやって解決するかは知らん。
88:87
07/12/06 11:47:16
追試。
terminal上からだと日本語が入力できないていうか、
\nnnの形でエスケープされた文字になるけど、
それなりに動作はしてるようだ。
selectで表示すればちゃんと日本語になってる。
89:NAME IS NULL
07/12/06 13:04:12
違うフロントエンド使うか作るかすりゃいいじゃん。
sqlite3コマンドなんてサンプルプログラムみたいなもんでしょ。
90:NAME IS NULL
07/12/06 13:08:27
sqlite3コマンドに原因があるわけじゃないような
91:NAME IS NULL
07/12/06 15:35:54
明らかにsqlite3コマンドの問題
92:NAME IS NULL
07/12/06 15:42:32
それならemacsの中で実行してもダメなんじゃないの?
端末はshift-jisだけどemacsのprocess-coding-systemはeucかなんかってこと?
93:NAME IS NULL
07/12/06 15:48:31
いやだから環境にあったフロントエンドを使えってこと
そのEmacsの中はsqlite3が想定している環境なんだろ
94:NAME IS NULL
07/12/06 15:50:09
aho?
95:NAME IS NULL
07/12/06 16:03:04
マカだもの
96:NAME IS NULL
07/12/06 16:06:18
>>95
またおまえか
97:87
07/12/06 16:36:15
>>92
私が試したのはterminalもemacsもUTF8だよん。
98:NAME IS NULL
07/12/06 18:11:30
ソースがあるんだから、何が起きてるかくらい追いかけろよ
99:NAME IS NULL
07/12/06 18:15:50
Terminal ってソースあるの?
100:NAME IS NULL
07/12/06 18:51:13
馬鹿ばっかだな
101:NAME IS NULL
07/12/06 18:53:01
>>99
sqlite3のソースはあるんだから、どういうコードで渡ってきてるかくらい追えるのでは?
ターミナルがバグってるって話をしたいならスレチ&イタチ。
102:NAME IS NULL
07/12/06 19:14:59
どうでもいいけど、windowsでsqlite3.exeをコマンドプロンプトから
使うとutf-8じゃなくてshiftjisで文字が格納される。これ豆知識な。
103:NAME IS NULL
07/12/06 20:16:15
× Windowsで
○ 日本語版Windowsで
104:NAME IS NULL
07/12/06 22:39:17
ctrl+]
set codeset japanese euc
105:87
07/12/07 11:17:11
とりあえずわかったこと。
~/.editrc に edit off って書いておくと terminal 上でも sqlite3 のコマンドラインに
日本語を入力できるので、 editline ライブラリの問題らしい。
でもこうしちゃうと行の編集とかヒストリが使えなくなるのでおいしくない。
106:NAME IS NULL
07/12/08 12:06:25 FZp8Cjdm
DBファイルのサイズに上限を設ける方法を教えれ
107:NAME IS NULL
07/12/08 15:45:17
>>106
ディスクのパーティションサイズを変更。
108:NAME IS NULL
07/12/08 17:05:14
quota
109:NAME IS NULL
07/12/08 17:21:49
>>108
今それでやってるんだけど
こんな消極的な方法しかないの?
110:NAME IS NULL
07/12/08 17:49:07
そんなことまでDB任せにする時代なの?
111:NAME IS NULL
07/12/08 18:40:27
池沼の時代来る!
112:NAME IS NULL
07/12/08 19:00:37
もっと積極的に行こうよ
113:NAME IS NULL
07/12/08 20:54:51
書き換えがあったとき
変更中はfileのcopyが作られて
COMMITでrenameされるタイプだと
実際はquotaの半分のサイズまでしか伸びない?
114:NAME IS NULL
07/12/08 22:51:46
クエリをJavascriptで行番号順に取得することを考えているのですが、
var i = 2;
res = db.Query("SELECT * FROM data WHERE ROWID = i ");
の様にすると、iという行を探しに行ってしまい失敗してしまいます。
res = db.Query("SELECT * FROM data WHERE ROWID = 2 ");
のように書くと取得できるのですが、どうしてなのでしょうか。
115:NAME IS NULL
07/12/08 22:58:30
君にはJavascriptの勉強がお勧め
116:NAME IS NULL
07/12/09 05:58:11
`i`
117:NAME IS NULL
07/12/09 06:23:37
~(`i`)rz
118:NAME IS NULL
07/12/09 14:57:49
>>109
自分で積極的に、
ソースコードを読んで、
考えるべし。
119:NAME IS NULL
07/12/10 03:08:49
view を作るときに、 where 節があると
parameters are not allowed in views
と言われるんだけど、これって SQLite の制限?
×: create view ほげ as select * from ふが where 条件
○: create view ほげ as select * from ふが
120:NAME IS NULL
07/12/10 09:55:15
>>119
んと、うちでは再現しないんだけど、その「条件」によるのでは?
121:114
07/12/10 12:37:45
お騒がせしました。おかげさまで解決しました。
必要ないとは思いますが、参考までに。
for (i = 1;i < TotalRow + 1 ; i++ ) {
add = database.Query("SELECT * FROM data where rowid = '" + i + "' ;");
word = add.Current().At(0);
で、望み通りの処理ができました。
122:NAME IS NULL
07/12/10 13:24:43
>>121
そんなに親の仇のように激しくクエリを発行するのはどうなの
123:NAME IS NULL
07/12/10 19:01:20
典型的な糞プログラムだなwwwワロタw
124:NAME IS NULL
07/12/10 19:06:00
>>122
使用サイトは「仇討ち.com」ですので安心です。
125:NAME IS NULL
07/12/11 02:33:44
>>120
where id = 数字
とか、簡単な条件。色々試してみたけど、 where 節がある時点で駄目っぽいんだよな。
もちろん create table に置き換えると動くことは確認してる。
諸事情で SQLite 3.4.x なのがいけないのかな。
126:NAME IS NULL
07/12/11 09:43:45
やっぱうち (3.4.1) では再現しないなあ。
test/view.test には "parameters are not allowed in views" が出る例は
あるみたいだけど。
% sqlite3
sqlite> CREATE TABLE t1(a,b,c);
sqlite> CREATE VIEW v12 AS SELECT a FROM t1 WHERE b=?;
SQL error: parameters are not allowed in views
sqlite> CREATE VIEW v12 AS SELECT a FROM t1 WHERE b=1;
sqlite>
(↑最後の行は成功する)
127:NAME IS NULL
07/12/11 16:55:54
>>125
view作成のSQL文をパラメータありでprepareしてるんじゃね?
例えば、
sqlite3_prepare(db, "CREATE VIEW v1 AS SELECT * FROM t1 WHERE id = ?;" , -1, &s, NULL); // NG
てな感じに "~ id = ?" とパラメータ使ってるとエラーになるよ。
でも、table作成はOKだったりする。
sqlite3_prepare(db, "CREATE TABLE v1 AS SELECT * FROM t1 WHERE id = ?;" , -1, &s, NULL); // OK
んで、後で sqlite3_bind_int(s, 1, 20); とかすると "~ WHERE id = 20;" と解釈してくれる。
128:NAME IS NULL
07/12/11 17:04:00
>>126
どうも Python binding のバグで、 SQLite は無罪っぽい。 SQLite と >>126 さんごめん。
もうちょっと追跡してバグ報告しときます。
129:NAME IS NULL
07/12/11 23:37:22
sqlite> CREATE VIEW v12 AS SELECT a FROM t1 WHERE b=?;
SQL error: parameters are not allowed in views
これで性交する環境なんてあるの?
130:NAME IS NULL
07/12/12 01:19:46
>>127
ああそれだ。 "?" って Python binding 側で行っている単なるエスケープ処理だと思ってた。
SQLite 側の機能で、 SQL 文のコンパイル後に値を変えているのか。
Python binding のバグとか恥ずかしー。
thx.
131:NAME IS NULL
07/12/12 01:21:16
>>125 じゃないけど Python の sqlite3 で再現できた。
# this line will cause an error: "sqlite3.OperationalError: parameters are not allowed in views"
cur.execute('create view foods_view as select * from foods where id > (?)', (1,))
でもなんで >>127 みたいな挙動になるのか気になるなあ。
ドキュメントあさってみたけど見つからなかった。
132:126
07/12/12 01:58:25
>>129
ないでしょ。
133:127
07/12/12 09:18:49
>>131
cvs漁ってみたら src/build.c の version 1.324 がもろに該当してた。
2005-Jun-06 15:32 1.324 Check-in [2492] : Do not allow parameters in VIEW definitions. Ticket #1270.
URLリンク(www.sqlite.org)
134:131
07/12/12 10:13:23
>>133
おお、ありがとう。ぜんぜん調べが足らなかった。
pParse->nVar はクエリに含まれる ? の数だろうから
CREATE VIEW ... に ? が含まれていた時点でエラー発生させるっぽいね。
135:NAME IS NULL
07/12/15 13:22:51
マカって本当に馬鹿だよな。
136:NAME IS NULL
07/12/15 13:57:28
SQLite Release of 2007 Dec 14 (3.5.4)
137:NAME IS NULL
07/12/16 04:28:56
最新版落としてみたけど
tclsh: No such file or directory
error code 1
って出てmakeできない・・・なぜ?
138:NAME IS NULL
07/12/16 04:39:51
NO_TCLを#defineしてる?
139:NAME IS NULL
07/12/16 05:32:17
>>138さん
具体的にどうすればいいのでしょうか?
configureで--disable-tclやらいろいろ試してみましたがどうやっても結果がかわりません。
tclを入れなきゃだめなんでしょうか。
140:NAME IS NULL
07/12/16 09:28:36
makeなら、-DNO_TCLじゃないかな
141:NAME IS NULL
07/12/18 23:10:00
VB 2005+Jetでスタンドアロン環境用のアプリを組んでたんですが、
DBデータファイルの最大値が2GBなので、SQLiteに移行しようかな
と思ってます。
でも、最新版のSQLiteの日本語解説が見あたらずに困っています。
市販本はバージョンが古そうで… 英語は全くダメなので、どこか
良い日本語のサイトがあれば教えてください。
142:NAME IS NULL
07/12/18 23:54:04
別に最新版の解説じゃなくても取っ掛かりにはなるんじゃないの?
俺も英語ダメだけどこの手の資料なら出てくる単語は見慣れた専門用語ばっかりだし、
慣れたらそれなりには読めるよ。
143:NAME IS NULL
07/12/19 00:48:17
つーか、翻訳してもカタカナ語になるだけだからな
英語も日本語も大差ない
144:NAME IS NULL
07/12/19 01:07:21
>>141
英語が駄目なんて言ってるうちは今の階級から上がれないよ。
格差社会なんだからがんばろうぜ。
145:NAME IS NULL
07/12/19 20:56:54
>>141
YouにはSQL Serverがおにあいだ
146:NAME IS NULL
07/12/19 23:44:09
>>141
ソフトウェアの世界で、英語が全くダメな奴に「最新情報」がゲットできるとでも思ってんのか?
147:NAME IS NULL
07/12/19 23:45:09
>>145
SQL Server だって、2008 の最新情報は英語しかないよw
148:NAME IS NULL
07/12/19 23:52:48
日本語プログラミングみたいに日本語SQLを作ったらいい
選ぶ 全部 どこから?それは 出席簿 と 成績表 どれ?それは 出席簿 の 学籍番号 は 成績表 の 学籍番号
それと 成績表 の 平均 国語 に 算数 に 理科 に 社会 は大きい 80 それと 死亡フラグ はヌル
みたいなの
149:NAME IS NULL
07/12/20 00:28:58
>>148
単語だけじゃん。
成績表 の 国語 と 算数 の 平均 が 80 以上 で
出席簿 の 学籍番号 は 成績表 の 学籍番号 で
出席簿 と 成績表 から 全部 選ぶ
150:NAME IS NULL
07/12/20 01:53:33
ぴゅう太w
151:NAME IS NULL
07/12/20 02:49:26
>>141
何も最新版でなくても
SQLite が認識できるクエリー言語
URLリンク(www.net-newbie.com)
で十分だろ。
152:NAME IS NULL
07/12/20 11:33:32
>>141が何を知りたいのか良く分からん
SQLiteのクエリ文法が知りたいのか、
VBやC/C++からSQLiteを使う方法を知りたいのか?
いずれにしても、最新ドキュメントに拘る理由はない罠
153:NAME IS NULL
07/12/20 13:24:32
あそびならそれでいいな。仕事なら最新ドキュメント読まない奴はクビにするが。
154:NAME IS NULL
07/12/20 13:35:25
仕事なら英文ドキュメント読まない奴もクビにするが。
155:NAME IS NULL
07/12/20 13:35:37
まあ最新ドキュメントはたまに間違ってたりするが
ドキュメントにも枯れてる/枯れてないはあるから
156:NAME IS NULL
07/12/20 13:48:36
SQLite のドキュメント程度なら
プログラミングの知識と高卒レベルの英語力と辞書がありゃ余裕で理解できるっしょ。
英語は全くダメとか言って、読めないんじゃなくて読もうとしてないだけ。
157:NAME IS NULL
07/12/20 15:00:28
クビにするだのなんだのって勢い良く言うやつに限ってそんな権限は持ってないペーペー
158:NAME IS NULL
07/12/20 15:42:31
英語が読めない以前に日本語も読めない日本人が増殖中
159:NAME IS NULL
07/12/20 15:54:10
毎回英語の話題は盛り上がるね。それだけコンプレックス持ってる奴が多いのかな。
160:NAME IS NULL
07/12/20 16:00:46
多少古いのでも日本語で読めるのがあるなら読めばいいんだよ。
英語の最新版を理解するための予備知識にもなるだろ。
英語が得意でないならなおさら。
仕事なら遊びならなんて線引いてるやつはどっちも中途半端だよ。
仕事で仕入れたネタは遊びで役に立つし、遊びで仕入れたネタは仕事で役にたつんだよ。
161:NAME IS NULL
07/12/20 16:03:17
>>158
鋭い自己分析ですねw
162:NAME IS NULL
07/12/20 17:39:16
>>161
俺日本人じゃないし
163:NAME IS NULL
07/12/21 01:44:28
俺は生粋の日本人ニダ
164:NAME IS NULL
07/12/21 02:23:15
俺はハワイ在住のロシア人だ
165:NAME IS NULL
07/12/21 22:44:23
シュールw
166:NAME IS NULL
07/12/26 11:38:20
SQLite3でMySQLのexplain相当のものは無いのでしょうか?
自分の発行したSQLが問題ないのか確かめたいんですけど。
167:NAME IS NULL
07/12/26 15:28:36
あれexplain無かったっけ?
168:166
07/12/26 15:51:59
SQLiteのexplainは、単に検索結果表示のタイトルの表示方法の指定のようです。
MySQLのexplainは、クエリーの実行内容解析用なので意味合いが全然違うようです。
169:NAME IS NULL
07/12/26 17:19:28
>>168
??言ってる事が良く分からない
SQLiteのexplainはクエリ解析後のopcodeを表示してくれるよ
opcodeの意味は URLリンク(www.sqlite.org)
少なくとも表示方法の指定などでは無い、何がしたいの?
sqlite> explain select * from t1;
addr opcode p1 p2 p3
---- -------------- ---------- ---------- ---------------------------------
0 Goto 0 12
1 Integer 0 0
2 OpenRead 0 3
3 SetNumColumns 0 3
4 Rewind 0 10
5 Column 0 0
6 Column 0 1
7 Column 0 2
8 Callback 3 0
9 Next 0 5
10 Close 0 0
11 Halt 0 0
12 Transaction 0 0
13 VerifyCookie 0 2
14 Goto 0 1
15 Noop 0 0
170:NAME IS NULL
07/12/26 23:54:25
explain query plan
てのもある。
171:166
07/12/27 10:43:37
>>169
あ、すみません。.explainの方と勘違いしていました。
sqlite> explain select * from user;
Segmentation fault
orz...
SQLite version 3.3.3です...
172:NAME IS NULL
07/12/27 10:55:47
>>171
うちの環境では再現しないなあ。
おそらく、多くの環境では再現しないと思うので、
* 3.3.3 以降 explain に関するバグフィックスが入って無いか調べる。無ければ、
* SEGV する場合の schema の詳細や OS や SQLite のインストール手順の詳細を晒す
* デバッガ (GDB とか) でデバッグにチャレンジ
173:NAME IS NULL
07/12/27 13:12:50
>>171
「sqlite 3.3.3 explain」でググると↓が引っかかるね
>SQLite 5
>呼ぶなバカ; 70 :NAME IS NULL:2007/04/24(火) 09:02:08 ID:Ma6C8bPt: PHPにバンドルされているSQLite3(3.3.3)なんですが、
>explain select * from user where id=1; みたいなクエリーを発行すると、Segmentation faultしてしまいます。 ...
前スレの5でそういう話があったみたい。俺過去スレ読めんのでこれ以上は分からんが・・
174:NAME IS NULL
07/12/27 13:21:28
>>173
それ以降は、特にSEGVに関する話はないよ。
175:NAME IS NULL
07/12/30 18:04:46
コンパイルのエラーメッセージすら読めない香具師は、アクセス使っとけ。
176:NAME IS NULL
08/01/04 13:08:36
sqlite3 on PHP 5をサイトのアクセスログの保管庫に使っているのですが、
エラーログ見るとほぼ毎日のように、database is lockedのエラーがでているのですが、
順序だっていないアクセスが集中するケースには、sqliteはやっぱり弱いのでしょうか。
趣味でやってるサイトなので、多少の漏れは別に構わないっちゃかまわないんですが。
しっかり記録しようと思うなら別のDBに乗り換えた方が良いんでしょうか。
177:NAME IS NULL
08/01/04 13:41:25
SQLite3 は、複数プロセスから同時に更新はできない (参照はおっけー) ので、
更新の操作が頻繁に発生するケースには弱いかもね。
ロックやエラーの処理をしっかりやってればデータが飛ぶことはないとは思うけど、
パフォーマンスはあまり良くならないかも。
「アクセスログ」の保存方法を工夫するとマシになるかも知れない。
一行一行保存するのは厳しいので、定期的にバッチ処理的にまとめて保存するとか。
178:NAME IS NULL
08/01/04 15:21:51
ログに保存する専門のプロセスを立てればいくね?
179:176
08/01/04 15:59:13
>>177,178
>ロックやエラーの処理をしっかりやってればデータが飛ぶことはないとは思うけど、
う、そうですね..例外処理はエラーを記録するだけしかやってません...
>一行一行保存するのは厳しいので、定期的にバッチ処理的にまとめて保存するとか。
>ログに保存する専門のプロセスを立てればいくね?
生ログをテキストに貯めといて、正規化してDBに入れるのは後でまとめて、
てな感じでしょうか。
その方向でちょと検討してみます。ありがとですた~
180:NAME IS NULL
08/01/04 16:13:55
いやそうじゃなくてsyslogdみたいなやつってこと。
181:176
08/01/04 17:46:56
PHP(httpd)から直接sqliteを叩かないで、専用プロセスを経由してログればおk
てことですよね><
182:NAME IS NULL
08/01/04 20:26:20
test
183:NAME IS NULL
08/01/04 20:31:59
dll版なんだけど、更新競合時のエラーが
sqlite3_stepでSQLITE_BUSY になるか
その前のsqlite3_prepare_v2 でLockedエラーになるか
ランダム感があって困る
184:NAME IS NULL
08/01/04 23:37:06
WEBで2年近く使ってるけどDBでトラブルが起きなかったのはsqliteだけ
最初は不安だったけどなんか不思議
185:NAME IS NULL
08/01/05 05:01:03
C#2008とSQLiteを使ってwinアプリを作ろうとしているのですが、
GUIツールを使うと第三者にdbファイル丸見えで困っています。
これを回避できる方法はないのでしょうか?
186:NAME IS NULL
08/01/05 09:13:56
>>185
具体的になにがどう困っててどうしたいんだ?
どんなファイルフォーマットにしても暗号化しないかぎり第三者にも
データは読めるわけなんで秘匿したいのなら暗号化するしかないと思うが…
# そもそもそのPCを使える人は第三者なのか?
187:NAME IS NULL
08/01/05 16:43:24
完全な暗号化なんて無理。
メモリの中をのぞくソフトを使われたら終了。
188:NAME IS NULL
08/01/05 17:20:05
C#からSQLite使う方法を詳しく、、、
189:NAME IS NULL
08/01/05 19:08:08
Googleで「C# SQLite」って打ち込む。以上。
190:NAME IS NULL
08/01/05 20:14:58
>>186,187
回答ありがとうございます。第三者って言い方が間違っていました。
複数ユーザで使うソフトなのですが、
GUIツールを使うとユーザAがユーザBのデータを見れてしまうので困っています。
Accessであればdb接続時(mdbを開く時)にパスワードを要求できますが、
SQLiteでは無理なのでしょうか?
C#2008なら簡単に逆コンパイルできてコードを見れてしまうので
dbへの接続パスワードがばれてしまうという点は諦めています。
191:NAME IS NULL
08/01/05 20:37:27
>>190
あー。そういうときどうすんだろ。
別々にログインして使うならDBファイルにアクセス権限をセットしちゃうとか。そのユーザだけW/R可能に。
192:NAME IS NULL
08/01/05 21:09:51
>>190
そのDBファイルをユーザーAはフルアクセス、ユーザーBはアクセス拒否に設定すればいいだけだろアホ
193:NAME IS NULL
08/01/05 21:13:26
>>177
SQLiteで複数のプロセスから更新をかけたいようなケースでは、
各プロセスが直接DBを触るのではなく、DBを管理する専用プロセスを作って
RPCか何かで各プロセスから更新コマンドを送るのが SQLite の作法。
194:NAME IS NULL
08/01/05 21:28:56
インメモリデータベースは?
とか思ったけど、データを外部ファイルに出力しなきゃいけないし、
そもそも複数ユーザじゃ使えないだよな。
他に考えられる方法は物理的に複数のファイルに分けるとか。
DB1 ユーザAのみ
DB2 ユーザBのみ
DB3 ユーザA,Bともに使える
195:NAME IS NULL
08/01/05 21:48:51
接続パスワードがばれるのを諦めてるなら結局同じことではないのか
196:NAME IS NULL
08/01/05 22:15:32
>>190
気休めレベルなら、
・DBファイルはパスワード付きZIPに圧縮して保存。拡張子は適当に変えておく。
・使うときテンポラリフォルダにSQLite3って分からない変な名前で解凍して読み書き。
・ユーザの保存操作時に接続を切ってパスワード付きZIPで圧縮。
・アプリ終了時にテンポラリは掃除。
とか。たしかWindowsのテンポラリって別ユーザから読み取り不可だったよな?
197:NAME IS NULL
08/01/05 22:44:01
>196
>Windowsのテンポラリ
デフォルトの%TMP%,、%TEMP%はそーらしい。
自分以外にもAdministratorsとSYSTEMにはフルコントロール付いてるけど。
もっとも%TMP%なんて何処指してるか分からんから、
%USERPROFILE%\Local Settings\Tempを直で指定するほーが良いかも
198:190
08/01/05 22:56:49
みなさんありがとうございます。
パスワードをかけるにはひと手間かかってしまうようなので、
ユーザごとにdbファイルを分けることにしました。
もう中身見られても気にしません。
199:NAME IS NULL
08/01/05 23:14:31
VistaなんかはProgram Filesには簡単にアクセスできないらしいからそのほうがいいかもね。
200:NAME IS NULL
08/01/05 23:21:54
>>198
たぶんそれで正解。隠し事すると手間ばかりかかるもんね。
秘密な情報は金を湯水のように使って管理すべし。
201:NAME IS NULL
08/01/06 00:08:50
>>193
そんな手の込んだことするくらいなら最初から MySQL や Postgres 使うわな
202:NAME IS NULL
08/01/06 00:12:53
それでもちゃんとしたRDBMS使う方がよっぽど手の込んだ事だと思う。
203:NAME IS NULL
08/01/06 23:17:34
>>201
それらじゃ組み込みDBの代替にはならないし。
204:NAME IS NULL
08/01/07 03:05:05
確かにSQLiteならDBごと分けるってのも
別に荒業ってわけじゃないしいいかも
なるほど
205:NAME IS NULL
08/01/07 13:08:41
Windows向けだけになるのだろうが、SqlServerCompactEditionがターゲットかぶるんだろうが試してみた人おる?
開発環境、データベースのスケールアップ(Express,普通のSqlServer)に対してはSqlServerのほうがよさげだけど、パフォーマンスなどどないなものかと。
まだ余裕なくて試せてないので教えてエロイ人
206:NAME IS NULL
08/01/07 17:17:55
何故それをSQLiteのスレで聞くのかね。
SQLServerのスレで聞いてこいよ。
207:NAME IS NULL
08/01/07 18:44:06
組み込み向け DB 比較スレなんてあっても良いかもね。
208:NAME IS NULL
08/01/08 10:31:35 mWbQwFY3
C++でSQLiteを使っています。
以下のコードのように_resultsを使いまわすとメモリリークしますでしょうか?
もしメモリリークするならばsqlite_free_tableをその都度やれば解決しますでしょうか?
本当はstd::vector<std::string>を_resultsのかわりに渡して動作してほしいのですが、
そのような開発を試した方はいませんでしょうか?
よろしかったら誰かアドバイスください。。
---
std::string _dbname = "hogehoge";
std::string _query = "SELECT * FROM foo";
sqlite *_db;
int _result;
int _nrow, _ncol;
char **_results;
char *_errmsg;
_db = sqlite_open( _dbname.c_str(), 0, &_errmsg);
_result = sqlite_get_table( _db, _query.c_str(), &_results, &_nrow, &_ncol, &_errmsg );
// (a) _resultsを使った処理
_query = "SELECT * FROM bar"
_result = sqlite_get_table( _db, _query.c_str(), &_results, &_nrow, &_ncol, &_errmsg );
// (b) _resultsを使った処理
sqlite_close(_db);
sqlite_free_table(_results);
delete _errmsg;
---
環境は以下の通りです。
OS: Windows XP SP2
SQLite: 2.8.17
コンパイラ等: MinGW + MSYS の g++(C++)
209:NAME IS NULL
08/01/08 12:41:18
>>208
リークしないと思う理由は何?
210:NAME IS NULL
08/01/08 12:43:44
> 本当はstd::vector<std::string>を_resultsのかわりに渡して動作してほしいのですが、
> そのような開発を試した方はいませんでしょうか?
とりあえず SQLite の入門書でも読んで API 一覧でも眺めてみたら?
それで何も思いつかないようなら才能ないからプログラミングやめた方がいいよ
211:NAME IS NULL
08/01/08 13:32:29
sqlite_free_table()が何のためにあるのか解らないなら、Cを1から勉強しなおせ
212:208
08/01/08 17:41:27
>>209
SQLite内で_resultsがnullポインタをさしていない場合に、
_nrowや_ncolを見て、その値によってはfreeやreallocなどでうまく縮めてくれているのかなぁと。
そんな親切なことないですかね。
>>210
URLリンク(www.3rd-impact.net)
を読むと、いったんchar **_resultsからvector<string>にコピーすることで
安全性を保っているようですが、とてもデータが膨大なので直接vector<vector<string>>に
入れたいです。
また、**_resultsの部分に直接vector<vector<string>>を渡してもうまくいくと、
Effective STLに記述がありましたが、これは要素数が変わらない場合限定なので使えません。
213:NAME IS NULL
08/01/08 19:54:12
もし既存の実装でそういうのが見つからないのであれば、
sqlite-2.8.17/src/table.c を参考にして自作するとかかな。
214:NAME IS NULL
08/01/08 20:29:04
>>212
オープンソースなんだから sqlite_get_table() のソースなどいくらでも参照改変できるわけだが
215:NAME IS NULL
08/01/08 20:30:28
>>212
> また、**_resultsの部分に直接vector<vector<string>>を渡してもうまくいくと、
> Effective STLに記述がありましたが
本気でそう思うんなら今すぐプログラミングやめれ、頼むから
216:NAME IS NULL
08/01/09 00:47:15
ログの整合性は、ログ取り用のテーブルと、永続化のテーブルを分ければよくね?
今弄ってる業務システム(否SQLiteだが)がそんな感じで設計されている。
そもそもデータベースなんだから、タイムスタンプさえ気にしてれば多少遅延したり、ログ的に前後しても、SELECTしたときにタイムスタンプでソートすればいいだけのような気もするが。
ミドルウェアがしょぼくてバッファなしで取りこぼすのは設計的に論外だが。
217:NAME IS NULL
08/01/09 09:58:59
>>212
> SQLite内で_resultsがnullポインタをさしていない場合に、
> _nrowや_ncolを見て、その値によってはfreeやreallocなどでうまく縮めてくれているのかなぁと。
> そんな親切なことないですかね。
もしもそんな仕様だったなら、
_results を null で初期化してない >>208 のコードではえらいことが起こるような。
218:208
08/01/09 11:49:09
改変してみた人はいなさそうですね・・・。需要はありそうな気がしますが。
自分で作成してみます。ありがとうございました。
219:NAME IS NULL
08/01/09 12:21:53
208はC++には向いてない人だと思う
220:NAME IS NULL
08/01/09 14:12:12 n34+hg7O
>>218
いや、需要はないから安心してくれ。
なんで需要がないのかは、そのうち理解できると思うよ。
221:NAME IS NULL
08/01/09 14:55:06
>>212
扱うデータがとても膨大になるんであれば、
sqlite_exec を直接使う方の関数セットを使って処理した方が良いんじゃないかなあ。
sqlite_get_table はもっと小さな結果セットをカジュアルに扱うのに特化した
ユーティリティラッパー関数なんじゃないかと思う。
222:208
08/01/09 15:04:49
>>219
すみません。。C++は私もまだまだ未熟だと思ってます。
>>220
需要がない理由は教えて欲しいです。
C++ + SQLite というのがそもそも少数派ということでしょうか。
簡単さをとるならC++ではなくPHPなどを選択するし、
パフォーマンスをとるならSQLiteではなくその他のデータベースを選択するということでしょうか?
223:NAME IS NULL
08/01/09 16:06:47
>>222
ちゃうちゃう、>>221も言ってるけど膨大なデータ扱うなら sqlite_get_table は使わんのよ、普通。
だから需要無いと言ってる訳。
224:NAME IS NULL
08/01/09 16:54:24
それ以前に、vector<vector<string> > なんてデータ構造を使ってる時点で
池沼丸出しなんだが
225:NAME IS NULL
08/01/09 16:57:52
>>221
本当に膨大なデータを処理するなら、SQLite 2.8 なら
sqlite_compile と sqlite_step、3.0 以降なら
sqlite3_prepare_v2 と sqlite3_step を使うべきだし
226:221
08/01/09 17:59:33
>>225
うぅ、これは失礼、仰る通り。
漏れもそうしていたんだけど、最近 C API 使ってなかったので忘れていた・・・
227:208
08/01/09 19:27:40
>>221
>>223
>>225
なるほどー。
やろうとしていることは、700万件ぐらいあるデータのなかから条件にあう
5万件全部をGUIのTable(Excelみたいな状態)で表示したいです。
さらに、その5万件を全部plotした散布図を作成するため、不本意ながら
vector<vector<string> >にいったん格納して、それをGUIのTableに渡しています。
もっとよい方法がありそうでしょうか?
sqlite_compile と sqlite_stepですと、一気に全部表示するのが厳しくなってしまいそうで。。
228:NAME IS NULL
08/01/09 19:33:30
>>227
おれならCでユーティリティを2本作って本体アプリから呼ぶなぁ。
・元DBから5万件拾ってテンポラリDBファイルに出力するEXE。
・テンポラリDBファイルを読んで作図、画像ファイルに落とすEXE。
こうしとけば汎用もあっていろいろ使えそうじゃん。
229:NAME IS NULL
08/01/09 19:51:41
>>227
sqlite_get_gable が5万件のデータをメモリにコピーして、
それをお前のコードが vector<vector<string> >にコピーして、
さらに GUI の Table とやらがそれをコピーして保持して
さらにそのデータを画面に表示する(ためにコピーする)
という壮大なコピーの物語に何の疑問も持たないのかね
お前の言うケースなら、sqlite_get_table で出てきたバッファを
そのまま GUI の Table とやらに渡し、そのままの形で
処理して表示するのが一番効率がいい。
vector<vector<string> >なんて介するだけメモリと CPU の無駄。
230:208
08/01/09 20:16:58
>>228
テンポラリDBファイルにいったん出力しても、結局表を作る段階で読み込まないとダメそうじゃない??
>>229
>さらに GUI の Table とやらがそれをコピーして保持して
ということはないです。GUIのTableは直接データを読むので。
たしかに、表示するだけなら、
>sqlite_get_table で出てきたバッファをそのまま GUI の Table とやらに渡し、
>そのままの形で処理して表示するのが一番効率がいい。
なのですが、そのGUIのTableはsort機能が必須で、なんらかのアクションを
起こしたときに、元データ(vector<vector<string> >)をsortしたいんですよ。
ですので、コピーはやめてvector<vector<string> >に直接代入できたらな、と。
231:NAME IS NULL
08/01/09 20:31:49
>>230
vector<vector<string> >をソートするより SQLite にソートさせた方が
圧倒的に高速なわけだが
> GUIのTableは直接データを読むので。
「vector<vector<string> >を渡す」時点で5万件のデータのコピーが発生するんだが。
232:208
08/01/09 20:36:44
>>231
ソートのたびにクエリ投げてデータをバッファに読み直すという意味??
>「vector<vector<string> >を渡す」時点で5万件のデータのコピーが発生するんだが。
リファレンス渡しすればそんなことないと思いますが・・・。
233:NAME IS NULL
08/01/09 20:41:28
>>232
リファレンス渡しだろうが値渡しだろうが、最終的にデータが格納される場所にコピーされるわけで。
234:NAME IS NULL
08/01/09 20:43:20
俺なら、最初にメモリ上に一時テーブル作って、そこに5万件を読み込む
表なら、表示する部分だけ一時テーブルから読み込む
散布図も一時テーブルから読み込みつつ計算もしくは表示する
こうすると、ソートとかにSQLが使える
たしかqlite_get_tableはsqlite_stepとかラップしてるだけだったはず
235:NAME IS NULL
08/01/09 20:53:45
>>230
5万件もある表ならスクロールバー位置で表示領域を計算して、
必要な分だけその都度SELECTしてビューに出せば?
5万件くらいならLIMIT-OFFSETも一瞬だろうし。
作図は別スレッドか別プロセスで、sqlite_stepでベタ読みして出来上がり次第に表示するとか。
あれ。SQLite2ってLIMIT-OFFSETないんだっけ?
236:208
08/01/10 11:24:03
>>234
>>235
どうやらこれらに尽きていますね。。sqlite2でもlimit、offsetは使えます。
じわじわスクロールするときに画面がちらつきそうですが、
効率のbenefitの方が圧倒的に大きいですよね。
今使っているGUIのTable(FLTKのFL_Table)が一部分だけを表示して
スクロールバーをうまく扱うのが厳しそうなので、また色々考えて見ます。
みなさん色々アドバイスありがとうございました。
237:NAME IS NULL
08/01/10 13:16:27
これってトランザクションとかはちゃんとはれるの?
あと複数のプロセスからデータファイルを開かれた時レコードの排他とかもちゃんとできる?
238:NAME IS NULL
08/01/10 14:43:33
簡単に試せるんだからやってみればいいじゃん。
サーバ起動するとか無いんだし。
239:NAME IS NULL
08/01/10 15:25:41
公式サイトにデカデカと書いてあるのにね
240:NAME IS NULL
08/01/10 19:04:40
>>237
・できる
・できる
241:NAME IS NULL
08/01/10 21:35:26
行レベルでロックされるのかテーブル全体がロックされるのか知りたい
242:NAME IS NULL
08/01/10 21:54:07
ファイル単位なんじゃね?
243:NAME IS NULL
08/01/10 22:38:01
>>236
Fl_Tableなんてクラスはじめて見たけど、マニュアル見たらdraw_cell()あるじゃん。
以下、使ったことないのでカンで書くけど。
テーブルに行数さえセットしておけばセル表示のときにコレ呼ばれるんでしょ。
引数に行番号と列番号があるから、これで対象データを特定して表示するだけだよ。
スクロールバーとか関係ない。ちょっとしたキャッシュ機構つけるくらいでOKでしょ。
244:NAME IS NULL
08/01/10 22:44:03
>>243
親切にも程がある。
その手の親切は>>208みたいな奴には逆効果で、
かえって何も学ばなくなるから注意な。
245:NAME IS NULL
08/01/10 23:14:19
>>244
親切じゃなくて俺の趣味。それにDBの大量データの処理で
vector<vector<string>>を使っちゃうセンスをほっとくと
変なプログラム量産してSQLiteの評判を落としかねん。
246:NAME IS NULL
08/01/11 00:16:33
>>244
>>208みたいな奴がますます馬鹿になっていい気味じゃないかw
247:NAME IS NULL
08/01/13 22:00:30
vb2005から sqlite3使う方法の解説サイトないですか?
248:NAME IS NULL
08/01/14 00:23:41
>>247
おまえのPCはGoogleにプロキシ規制でもかかってんのか?
249:NAME IS NULL
08/01/14 00:31:39
>>248
よく分かったな。その通りなんだ
250:NAME IS NULL
08/01/14 01:24:52
マジな話、個人サイトと判定したサイトは
軒並み却下してくれる企業もあるしな
マイナーなライブラリとか調べてるときは
「暇な個人の実験結果」こそ宝の山だってのに……
とは言えそんな企業がvb2005からsqlite3を使うなんてことを
業務でやるわきゃあないが。ということで勝手に苦しめ >247
251:NAME IS NULL
08/01/14 01:48:49
個人のページに、フォーマットするページがあることが多いからな。
ウェブも先読みして、駆除するアンチウイルスが主流にならないと対処無理。
252:NAME IS NULL
08/01/14 01:50:54
>>251
ふつうじゃないか?
253:NAME IS NULL
08/01/14 01:54:20
多いのか?w
254:NAME IS NULL
08/01/14 02:25:17
>>250
2chにアクセスできる時点で頭隠して尻隠さずな企業だなw
255:NAME IS NULL
08/01/14 02:26:56
>>251
正確には「フォーマットしようとする」ページだな。
その程度で本当にフォーマットされるような奴は生きていくのが大変だろうな。
256:NAME IS NULL
08/01/14 03:26:27
>>253
主流の方だよw
257:NAME IS NULL
08/01/14 03:37:34
SQLite 3.5.4 → 3.5.5 は歴代で最も大規模な変更になる とDRH が言ってるな。
VM をスタックマシンからレジスタマシンに変えるらしい。
gdgd にならなきゃいいが…
258:NAME IS NULL
08/01/14 04:08:54
別にそこまでする必要あるのけ?今でも十分早いだお
259:NAME IS NULL
08/01/14 04:12:58
と思ったけど、トランザクションのネストとか、外部キーとか
ALTER TABLEとかできるようになるならいいかなと思えてきた。
おらワクワクしてきたぞ
260:NAME IS NULL
08/01/14 04:57:32
>>259
> トランザクションのネスト
組み込みDBじゃほぼ必要ない。
> 外部キー
トリガー書け
> ALTER TABLE
カラムの追加だけならできるぞ
261:NAME IS NULL
08/01/14 09:18:58
SIMDにも対応するのか?
262:NAME IS NULL
08/01/14 09:32:28
そんな変更入れるなら3.6とか4.0とかにしようぜ
> > 外部キー
> トリガー書け
書いたことあるがめんどい
REFERENCESなら一行なのに、トリガーだと数行×4個必要なのはでかい
しかも外部キーと完全に同じじゃないし
263:NAME IS NULL
08/01/14 12:54:47
おまえられべるたかいな
264:NAME IS NULL
08/01/14 23:52:19
GB級データなら別のRDBMS検討しろ、って公式に書いてあるけど。
リードオンリーでいいから、でかいDBファイルもサクっと開けるようにならんかなぁ。
265:NAME IS NULL
08/01/15 01:17:20
数十GBになったが別にそんなに遅かった記憶がないな。開くだけなら。
266:NAME IS NULL
08/01/15 01:30:14
俺も数 GB の DB 作ったことがあるがまあ取り立てて問題なかったな。
ただ、CREATE INDEX は遅かった。
267:NAME IS NULL
08/01/15 07:00:17
あごめん、まちがえた。最初にSELECTするときだ。
特にSELECT COUNT(*)とかで全件舐めると、
BITMAPほにゃららを作りに行って遅くなるよな?
268:NAME IS NULL
08/01/15 18:48:30
このDBってキャッシュとかバリバリ効くの?
269:NAME IS NULL
08/01/15 19:14:43
est
270:NAME IS NULL
08/01/17 19:05:41
>>257のソースはこれか
URLリンク(www.mail-archive.com)
インターフェースに変更がないから、メジャーバージョンを変えないと。
271:NAME IS NULL
08/01/18 23:55:54
すみません、質問です
このSqliteというものにはPEARのmysqlを対象とした機能は使えないですよね?
ADODBとか。ダメなら同様の便利な機能があればありがたいんですが
あと、クダ質すみませんが商用だと有料ですか?
(過去ログも開けないしググってもよくわからなかったので聞きました)
272:NAME IS NULL
08/01/19 00:50:49
商用だろうがなんだろうが無料
1番目の質問は知らん
273:NAME IS NULL
08/01/19 07:23:09
SQLiteのODBCドライバがあればOK
274:NAME IS NULL
08/01/19 11:42:00
>>272-273
ありがとう、あまり本ないみたいですがやる気が出てきました
サンキューです
275:素人
08/01/20 16:54:16 1uZgVInC
現在、WEBのショッピングサイトを勉強の為、作成しています。
1、ソースファイルの文字コードはEUC
2、PHPを使用。
SQLiteを使って商品を検索してもうまく結果がでません。
英語の商品は検索できるのですが、日本語だとひっかかりません。
例)
1、sonyパソコン
2、ソニーパソコン
上記2点がテーブルに格納されているとして、"s%"で検索すると1番はひっかかるのですが、"ソ%"で検索しても2番がひっかかりません。
かれこれ2週間悩んでいるのですが解決方法が見つからなかったので質問しました。
どなたかご教授頂けませんでしょうか。
276:NAME IS NULL
08/01/20 17:06:38
質問です。
ある二つの同じ形式のテーブルがあって、それらの FULL OUTER JOIN の結果が
ほしいのだけど、sqlite では FULL OUTER JOIN が omit されていてとれないです。
代替手段をおしえてください。
ちなみにフリーソフト作るのに使いはじめたのでデータベース自体初めてです。
277:NAME IS NULL
08/01/20 18:26:34 L9GIGLVN
ガリレイの相対性原理も、アインシュタインの相対性理論も
破棄されました。!
21世紀の科学、物理学は支配の法則が支配する!!!!!
URLリンク(home9.highway.ne.jp)
278:276
08/01/20 21:38:02
\(^o^)/デキタ
CREATE TEMPORARY TABLE hoge AS
SELECT A.*, B.* FROM A LEFT JOIN B ON A.name == B.name
UNION
SELECT A.*, B.* FROM B LEFT JOIN A ON A.name == B.name
WHERE A.name ISNULL;
279:NAME IS NULL
08/01/20 22:18:47
∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
 ̄
280:NAME IS NULL
08/01/21 21:22:51
>>275
DBに入れる文字列がSJISとかEUCだと、日本語文字列でLIKEやGLOBが引っかからないパターンがある
UTF-8に変換しる!
281:NAME IS NULL
08/01/22 23:50:19
% package require sqlite
3.5.4
% sqlite db :memory:
% db eval "create table t(id, name)"
% db eval "insert into t values (1, 'sonyパソコン')"
% db eval "insert into t values (2, 'パソコン')"
% db eval "select * from t where name like 's%'"
1 sonyパソコン
% db eval "select * from t where name like 'パ%'"
2 パソコン
% db eval [encoding convertto euc-jp "insert into t values (3, 'sonyパソコン')"]
% db eval [encoding convertto euc-jp "insert into t values (4, 'パソコン')"]
% db eval [encoding convertto euc-jp "select * from t where name like 'パ%'"]
4 \N\?\3\o
% set str [db eval [encoding convertto euc-jp "select * from t where name like 'パ%'"]]
4 \N\?\3\o
% puts [encoding convertfrom euc-jp $str]
4 パソコン
%
euc-jpでも通るけどなあ・・・SQLiteのバージョンは?
282:NAME IS NULL
08/01/23 00:23:24
どうせビッグエンディアンとかリトルエンディアンとかそんなオチだろ
283:NAME IS NULL
08/01/23 00:35:19
まさかPHPのソースだけEUC-JPで書いて
Content-type: text/html;encoding=utf-8
とかで送り出してないよな……?
284:NAME IS NULL
08/01/23 00:35:52
>>281
本題とは関係ないけど、コレ何?シェル?
285:NAME IS NULL
08/01/23 06:16:32
>>284
どことなく、 Ruby に見える。
286:NAME IS NULL
08/01/23 08:12:26
tcl じゃね?
287:NAME IS NULL
08/01/23 13:35:10
Tclに一票
288:284
08/01/23 15:39:25
tarball の test のスクリプトを見たら、確かにこれと同じ文法っぽいですね。
tcl は十年くらい前に一週間程度遊んでみた以来だったので忘却の彼方でした・・・
289:NAME IS NULL
08/01/26 01:13:05
おまいら、日付ってどうやって保存してる?
290:NAME IS NULL
08/01/26 01:51:19
誰か評価版のDBソフト使った人いませんかね?あ、雑誌の付録についてる奴。
291:NAME IS NULL
08/01/26 02:31:01
なぜここで聞く
292:NAME IS NULL
08/01/26 02:47:24
誰か評価版のDBソフト使った人いませんかね?あ、雑誌の付録についてる奴。
293:NAME IS NULL
08/01/26 05:55:13
>>289
プログラムでYYYY-MM-DD HH:MM:SSにフォーマットしてテキストで保存するだろ。
SELECT後はプログラムでsplitするだろ。
294:NAME IS NULL
08/01/26 12:01:17
DBソフトってフラッピーかよw
295:NAME IS NULL
08/01/26 13:29:00
>>293
テキストで保存って頭大丈夫か?
>>289
julianday でググれ
296:NAME IS NULL
08/01/26 13:42:22
主にどういう使い方するかで適したやり方は変わるんだから、
テキストだって頭おかしくはないと思うけどな。
「5月だけ」とか選ぶのが主だったら年月日を別個に持った方が良いかもしれないし。
297:NAME IS NULL
08/01/26 14:23:33
結合したテキストが便利とは思えんな。
「年」「月」「日」みたいに別項目にするならまだ理解可能。
298:NAME IS NULL
08/01/26 14:36:08
まあ、確かに利点は思いつかないな・・・。
299:NAME IS NULL
08/01/26 16:50:25
>>289
TEXTでYYYYMMDDにして保存。
300:NAME IS NULL
08/01/26 17:17:50
SQLiteなんか使ってて物足りなくないのでつか?
301:NAME IS NULL
08/01/26 17:37:48
別にどんな用途でもsqliteでやるってわけじゃないしな
302:NAME IS NULL
08/01/26 17:47:46
>>296
YYYYMMDD形式で持ってたら、(cast(YYYYMMDD as int)/100) - (cast(YYYYMMDD as int)/10000)*100
で月だけ取り出せるよ!
303:NAME IS NULL
08/01/26 17:52:19
月で絞るのが主な仕事だったら年月日バラで持って月にインデックスでもつけた方がよくね?
304:NAME IS NULL
08/01/26 17:59:32
日時で持ってたら、タイムゾーン変わったときどうすんねん、
とか考えはじめたらめんどくさくなったので今日はもう寝ます。
305:NAME IS NULL
08/01/26 18:26:00
タイムゾーンなんていらない
306:NAME IS NULL
08/01/26 19:43:18
普通は unix time そのまま入れるよな。
YYYY-MM-DD HH:MM:SS で入れてた方が便利ってケースもなくはないだろうがレアケースだろ
>>303
滅茶苦茶不自然なコードだなw
307:NAME IS NULL
08/01/26 19:47:02
>>306
>>302みたいなことしてまで月を取り出すならって事だよ
308:NAME IS NULL
08/01/26 20:21:22
>>306
普通はUNIXTIMEなんかで入れたりしないだろ常考。つーか
YYYY-MM-DD HH:MM:SS のままの方が検索では便利だろ。
年で検索、日で検索、時刻で検索 などはそのままできるし
なによりこの形式がsqliteでは標準だしな。
ついでにDB見て直接日時がわかるのもいい。
309:NAME IS NULL
08/01/26 20:42:54
>>308
> なによりこの形式がsqliteでは標準だしな。
そうなん?
310:NAME IS NULL
08/01/26 21:06:23
UNIXタイムだと32bitの壁をやぶれない
311:NAME IS NULL
08/01/26 21:28:35
>>308
どういう普通だよ?www
312:NAME IS NULL
08/01/26 21:33:32
URLリンク(www.sqlite.org)
でもってUTCで持つようにしといてローカルタイムに変換
313:NAME IS NULL
08/01/26 22:26:58
>>309
SQLite の組み込み関数が内部的に使っている日付形式は julianday。
sqlite-users で開発者達が推奨してるのは julianday を real で格納すること。
314:NAME IS NULL
08/01/26 22:30:32
>>308
>年で検索、日で検索、時刻で検索 などはそのままできるし
まさか like で文字列マッチングするつもりか?
100万件のデータがあったら100万回のマッチングになって
まるっきり実用的な速度は出ないけど
315:NAME IS NULL
08/01/26 22:31:30
日付。よほど特殊な用途ならともかく。
普通はドライバに任せとけば良いんじゃね?
そうすりゃ後でDB変えるときでもプログラムそのままでいいし。
Cでゴリゴリ書くのは知らないけど。
316:NAME IS NULL
08/01/26 22:31:58
>>312
そのページにこう書いてあるのが読めないのかお前
The julianday() function returns the number of days since noon in Greenwich on November 24, 4714 B.C.
The julian day number is the preferred internal representation of dates.
317:306
08/01/26 22:38:37
>>307
スマソ、>>303は誤爆。漏れも>>302のつもりで書いた。
318:NAME IS NULL
08/01/26 22:40:43
>>308
> YYYY-MM-DD HH:MM:SS のままの方が検索では便利だろ。
> 年で検索、日で検索、時刻で検索 などはそのままできるし
それだとインデックスがまるで効かないのであ?
319:NAME IS NULL
08/01/26 22:46:36
>>318
そんな高度wなことがわかるような奴じゃない事くらい文面みればわかるだろw
320:NAME IS NULL
08/01/26 23:02:48
YYYYMMDDが整数値だったら、YYYYMMDD/100 - (YYYYMMDD/10000)*100
で月だけ取り出せるよ!
321:NAME IS NULL
08/01/27 21:53:28
>>318
LIKE %でもインデックスは効くよ
322:NAME IS NULL
08/01/27 22:18:00
>>321
hoge% なら効くけど
%hoge だと効かないのは知ってるか?
323:NAME IS NULL
08/01/27 23:20:14
時間を文字列化したSTRINGとの比較と、juliandayを入れたREALの比較、どっちが速いんだろう。
324:NAME IS NULL
08/01/27 23:30:42
>323
こっちが速そうだ、ならなんぼでも妄想できるが
やっぱ実測せんとでしょう
ということで任せた
325:NAME IS NULL
08/01/27 23:57:48
>>321
SQLite では LIKE にインデックスを使わせるには>>322に加えて
さらに2つの制約があるんだが、もちろん知ってて言ってるんだろうな?
326:NAME IS NULL
08/01/28 00:31:03
>>322
知ってるけど、それがどうかしたか? という話になる。
%hogeを使う条件は、つまりこの場合だと
たとえば時刻部分のみ取り出しということになるが
unixtimeで保存したテーブルではどういう処理になるんだ?
86400で割った余りでも使うのか? インデックスは効かないぞ?
そういう検索条件があるなら日付と時刻をわけるだろ。
これはunixtimeだろうと日時表現だろうと変わらない。
327:NAME IS NULL
08/01/28 00:50:27
自説を曲げる気のない人と議論しても無駄だと思います
328:NAME IS NULL
08/01/28 02:10:36
>>326
両方ともインデックスがきくケースに限定したとしよう。
大文字小文字を区別しない文字列マッチングと
32ビット整数の単純比較
さて、どっちが速いでしょう
329:NAME IS NULL
08/01/28 03:44:39
>>326
YYYYMMDDHHMMSS 文字列格納時において
2008/01/28 00:31:03 からその24時間後までを SELECT する SQL を教えてくれるかな
330:NAME IS NULL
08/01/28 10:55:19
>>328
インデックスが効く長さでは同じ速度
効かない長さなら文字列の方が倍遅い
331:NAME IS NULL
08/01/28 14:40:54
>>324
332:NAME IS NULL
08/01/28 21:22:42
>>325
教えろ。なんなのこのスレの知識を小出しにしつつ
相手の技量を計ろうとするようなオタクっぽさは・・・。
333:NAME IS NULL
08/01/29 00:48:12
>>332
1. LIKE 'hoge%' の形式であること
2. 対象のカラムが COLLATE NOCASE 宣言されていること
3. ESCAPE 指定がされていないこと
334:NAME IS NULL
08/01/29 01:04:15
>>332
ここのスレにカキコするのは基本的にオタクだから無問題
335:NAME IS NULL
08/01/29 09:15:18
まぁunixtime使うとかどうでもいい話だしな
正直なところ、このチューニングはパレート的に
大して効果の無い8割の努力だからな
336:NAME IS NULL
08/01/29 21:39:58
>329
>2008/01/28 00:31:03 からその24時間後までを SELECT する SQL を教えてくれるかな
where hoge >= '2008/01/28 00:31:03' and hoge <= '2008/01/29 00:31:02'
337:NAME IS NULL
08/01/29 22:08:44
betweenは?
338:NAME IS NULL
08/01/29 22:26:24
ロジックを一本化したいのでたいていの場合betweenは使わない
339:NAME IS NULL
08/01/29 22:32:02
>>336
'2008/01/28 00:31:03' から '2008/01/29 00:31:02' はどうやって導出するの?
340:NAME IS NULL
08/01/29 22:34:28
>>339
細かいヤシだな。オタクか?
341:NAME IS NULL
08/01/29 22:36:34
細かいこと気にしない奴はプログラムなんて書かないほうがいいよ
342:NAME IS NULL
08/01/29 23:01:39
>>339
それはクエリーを作るときに計算すればいいじゃん。
どのみち動作速度には関係ないし。
それとも、導出方法がわからないから知りたいの?
343:NAME IS NULL
08/01/29 23:18:35
>>338
> ロジックを一本化したいので
言葉が足りてなくて意味不明
344:NAME IS NULL
08/01/30 02:47:36
>>339
where hoge >= '2008/01/28 00:31:03' and hoge < '2008/01/29 00:31:03'
345:NAME IS NULL
08/01/30 03:02:37
>>343
・○○以上○○以下
・○○以上
・○○以下
これらをバラバラに書くんじゃなくて、
・○○以上
・○○以下
の組み合わせで表現したいので、
346:NAME IS NULL
08/01/30 11:27:05
一本化なら全部betweenで表記するだろ
347:NAME IS NULL
08/01/30 11:59:52
>>346
・○○以上
・○○以下
の指定をかんがえてるんじゃね?
全部whereで書いときたいってことかね
おりはrubyでSQL文つくるとき
あんま深くかんがえずにbetween使わずにwhereだけで書いてるなぁ
between推す理由ってなんかあんの?
348:NAME IS NULL
08/01/30 12:48:19
ダイクストラの講演で≧は>よりも非効率だと主張した人を思い出した。
349:NAME IS NULL
08/01/30 17:14:48
>>345
SQL文生成ロジックの一本化ね
理解した
>>347
一般的にbetweenの方が効率的に絞り込める
個々のDBでそれぞれどうなのかは知らないが
350:NAME IS NULL
08/01/30 17:35:37
>>329 と >>339 の質問って、本質的に何か違いがあるの?
351:NAME IS NULL
08/01/30 20:20:12
>>349
ありがとう、おぼえておくよ
あとsqliteで使う機会があったら比較してみるよ
352:339
08/01/30 20:31:28
>>342
知ってるけどちょっと面倒くさい方法しか思いつかないから、
>>336ならとても簡単な方法を知ってるんだろうなと思って。
どうやるの?
>>350
意味がわからないなら言い換えてあげよう。
任意の YYYY/MM/DD HH:MM:SS からその24時間後までを SELECT する SQL は?
353:NAME IS NULL
08/01/30 20:34:44
>>347
> between推す理由ってなんかあんの?
URLリンク(www.geocities.jp)
URLリンク(oracle.se-free.com)
特定の範囲を SELECT したいなら BETWEEN を使うべき。
354:NAME IS NULL
08/01/30 21:51:29
>>352
ひょっとして
sqlite> select datetime("2008-01-01 12:00:00",
...> "23 hour",
...> "59 minute",
...> "59 second");
2008-01-02 11:59:59
こういうことを聞きたいのか?
355:352
08/01/31 02:15:34
>>354
それそれ。
それならあんまり面倒くさくもなさそうだね。
356:350
08/01/31 11:17:09
>>352
ああ!そういうことか。やっと文脈がわかった。
>>339 の質問の仕方が悪いせいで >>344 も的外れな回答をしてたのね。
357:NAME IS NULL
08/01/31 22:29:41
予定表管理システム的なのをDBで管理したいのですが、
DBを作るときはどのようにやるのが一番いいですかね?
一応月ごとにdbファイルを分けて、ひとつのdbファイルの中にはuseridと1~31日までの出勤予定と退勤予定をいれようと考えてるのですが、これではフィールドが63個となってなんか効率の悪いような気がします。
出勤予定と退勤予定を分けるのは、10-20みたくTEXTで保存するとWHERE intime>10 AND outtime<11みたく指定できなくなってしまうのではないかと思ってなのですが。
知恵を貸してくれませんか?
358:NAME IS NULL
08/01/31 22:36:50
>>357
SQLiteを使う前に、まず正規化の勉強をしようぜ
359:NAME IS NULL
08/01/31 22:40:13
1個のDBの中に(userid,日付,出勤予定,退勤予定)なんて表があればいんじゃね?
360:NAME IS NULL
08/02/01 01:34:22
>>357
DBとExcelが区別できるくらいの頭があるんなら、
それを生かして最低限の知識を仕入れたらいいじゃない。
適当なデータモデリング本を1冊と、
軽い実例集として「楽々ERDレッスン」とか読んでみたら。
361:NAME IS NULL
08/02/01 01:58:32
create table user (id primary key, name text); create table syutaikin(user integer, yyyy integer, mm integer, dd integer, startMinuteinday integer, endMinuteinday integer);
DB初学者だけど適当に勉強で作ってみた。
こんなんでどう?
362:NAME IS NULL
08/02/01 11:03:34
3.5.5北
363:NAME IS NULL
08/02/01 11:21:40
version 3.5.5 --- 内部仮想マシンをスタック型からレジスタ型へ変更した。ユーザ見えの変更は EXPLAIN の出力のみ。
2008 Jan 31 (3.5.5)
* Convert the underlying virtual machine to be a register-based machine rather than a stack-based machine. The only user-visible change is in the output of EXPLAIN.
* Add the build-in RTRIM collating sequence.
364:NAME IS NULL
08/02/01 15:20:01
ほんとにやったんだ……
365:NAME IS NULL
08/02/01 18:43:19
速くなるのか
366:NAME IS NULL
08/02/01 18:44:13
だれか速度検証よろしく
367:NAME IS NULL
08/02/01 18:49:21
どんなケースがいい?
368:NAME IS NULL
08/02/01 21:52:12
テストの時間を計ってみてはどうだろうか・・・
369:NAME IS NULL
08/02/01 23:09:59
あんまり変わってない…
370:NAME IS NULL
08/02/01 23:21:46
簡単なSELECT文の例だけど、ごくごく僅かに遅くなったんだが…
Windowsだからだろうか
バイナリサイズもほぼ同じだし、EXPLAINもほとんど同じだし、違いが分からない
371:NAME IS NULL
08/02/01 23:38:29
連レスすまそ
どうやらsqlite-3.5.5.zipの中身が3.5.4だったらしい
URLリンク(article.gmane.org)
確かにバージョン情報が3.5.4になってるorz
で、落とし直したら3.5.5になってた。
確かにEXPLAINはちょっと変わった。でも速度はそんなに…
372:NAME IS NULL
08/02/02 02:00:48
drh の話では、レジスタ型への移行の最初は互換性重視で安定させつつ
将来的には最適化を進めて速くする予定らしい。
373:NAME IS NULL
08/02/03 11:08:53
CVSにドキュメントが戻ってきた……
ドキュメントだけ聞いたことないSCMに移行してたけど
なんでそんなことした & 戻したんだろ
374:NAME IS NULL
08/02/05 15:37:10
先日出た「SQL辞典―7大データベース対応 (Pocket詳解) (秀和システム)」の
「7大データベース」に SQLite が勘定に入れられてた。
この手の本で SQLite が含まれてるのはまだ珍しいかな。
375:NAME IS NULL
08/02/05 20:41:16
秀和ではな・・・
376:NAME IS NULL
08/02/05 21:46:15
SQLiteはサービス型のDBMSには代替できない用途があるから普通に強いと思うよ
ポスグレとMySQLとSQL Serverどれかひとつ滅亡しても別に代替が利くけど、SQLiteがなくなったら泣くよ
377:NAME IS NULL
08/02/05 22:56:16
禿
378:NAME IS NULL
08/02/06 00:18:07
SQLite がなくなったら一緒にこの世から消えるもの
Mac OS X, Solaris, iPhone, Android, Symbian OS, Firefox, Skype,
Python, PHP, REALbasic, McAfee AntiVitus, 他多数
379:NAME IS NULL
08/02/06 00:36:13
消えはせんだろが代替品探すのが難儀だろうなぁ
SQLのエンジン持っててアプリ組み込みに使えるDBって
Java縛りを逃れようと思ったらSQLite以外にぱっと思いつくもんがない
……まぁ言われる前に弁解しとくと俺が不勉強なだけだが
380:NAME IS NULL
08/02/06 01:58:31
paradox
381:NAME IS NULL
08/02/06 02:02:09
SQL使えねー醤
382:NAME IS NULL
08/02/06 02:04:38
使える
383:NAME IS NULL
08/02/06 07:03:32
>>378
McAfeeとかFireFoxて内部でSQLiteつかってんの?
384:NAME IS NULL
08/02/06 08:47:36
firefoxは使ってるよ
385:NAME IS NULL
08/02/06 08:51:44
URLリンク(www.sqlite.org)
386:NAME IS NULL
08/02/06 09:45:52
SQLiteはただのバイナリ処理ライブラリなんだから、代替なんてそこらから拾ってくるか自力開発すればよいだけ。
SQLiteのようなファイルベースのDBもどきなんて、20年前からいくらでも転がっていただろw
まともなDBよりは、遥かに簡単なシステムなわけで。
387:NAME IS NULL
08/02/06 10:38:28
bdbみたいなものならともかく、SQLだからな。
388:NAME IS NULL
08/02/06 10:52:44
そこらから拾ったり自力開発って、言うほど簡単じゃないと思うけどなあ。
389:NAME IS NULL
08/02/06 17:18:12
>>386
そんな再車輪やってらんね
390:NAME IS NULL
08/02/06 18:06:46
しかも低品質でバグだらけ。
391:NAME IS NULL
08/02/06 18:24:39
もどきっていうほどもどきじゃないのが素晴らしいところ。
392:NAME IS NULL
08/02/06 18:31:45
>>390
だよねえ。
SQLite のテストケースの充実ぶりを見たら、代替なんて作れる気がしない。
そこらへんはさすが堅く作り込んであるなと感心する。
393:NAME IS NULL
08/02/06 21:09:02
>>378
馬鹿なの?パブリックドメインだからなくなるわけ無いじゃん。
394:NAME IS NULL
08/02/06 21:15:53
>>393
サンバルカンのオープニングを聴いて
「バッカでー太陽が無くなる訳無いじゃんw」
とかテレビに突っ込みを入れてた子供?
395:NAME IS NULL
08/02/06 21:27:05
>>394
オジンw
396:NAME IS NULL
08/02/06 21:36:23
>>394
つまり378はサンバルカンの歌に夢中になった
幼児並の頭脳だといいたいわけだな。
397:NAME IS NULL
08/02/06 22:28:02
>>393
たとえSQLiteが無くなる日が来ようとも君の頭は直らない
(反語的比喩表現)
398:NAME IS NULL
08/02/07 04:07:26
あまりの頭の悪さに思わずワロタw
399:NAME IS NULL
08/02/07 21:09:20
その罵詈雑言すべて俺に向けていいからおまえら仲直りしろよ。
400:NAME IS NULL
08/02/07 22:15:16
400
401:NAME IS NULL
08/02/10 18:11:04
株価データ(銘柄5000x300日x10~20年分)を管理してみよう思うんだけど、一個のテーブルに
全部入れるのと、銘柄毎にテーブル作るのどっちがいいかな?
402:NAME IS NULL
08/02/10 18:32:02
全部入れろ
403:NAME IS NULL
08/02/10 18:37:12
>>401
もはやSQLite関係ないだろ。DB設計を語るスレに行って
ボコられてこいや。
404:NAME IS NULL
08/02/10 21:05:36
銘柄と株価でテーブル分けるだろ、普通。
銘柄でテーブル分けたらSQL一発で銘柄検索できないって気がつかないのか?
405:NAME IS NULL
08/02/10 22:28:06
>>401
おまいさんは5000個テーブル作るつもりかえ?
ちょっとはSQLiteの気持ちにもなってみよう。
406:NAME IS NULL
08/02/10 22:38:21
>>401
ネタとしてか思えないわけだが・・・。
407:NAME IS NULL
08/02/11 00:27:37
>>401のフルボッコぶりワロタ
408:NAME IS NULL
08/02/11 02:10:17
流石にジョークだろ…?
409:NAME IS NULL
08/02/11 02:15:03
ジョークかどうか不安なときはマジレスが基本ですよ
410:NAME IS NULL
08/02/11 02:19:13
PostgreSQLかなんかのMLでそういうデザインしてて、
パフォーマンス改善するにはどうしたら?とか質問して
フルボッコになってるの見たことある。
411:NAME IS NULL
08/02/11 13:17:39
んな設計されたらマジで自分の生死に関わると思うから、
フルボッコにすると思う。
412:NAME IS NULL
08/02/11 13:20:42
そんなことくらいで死んじゃ駄目だ
413:NAME IS NULL
08/02/11 14:56:26
>>412
そんなことくらいで殺されたくないから
ふるぼっこにするんであって
>>411 さんの言っていることは正しいと思う
414:NAME IS NULL
08/02/11 15:07:41
そんなことで殺されるような人生って・・・w
415:NAME IS NULL
08/02/11 16:19:32
忙殺も殺しの一種
416:NAME IS NULL
08/02/11 16:56:42
関わり合いになる時点で駄目人生だろw
417:NAME IS NULL
08/02/12 16:47:02
そんな設計が見えた時の恐怖と言ったら
もちろん関わり合いにならないように全力で逃げるわけですが
418:NAME IS NULL
08/02/12 19:06:54
株価のデータって20年も必要なの?
419:NAME IS NULL
08/02/12 20:22:03
あってもいいんじゃないかな。でも株式分割とか銘柄入換をメンテしてない情報ならカス
420:NAME IS NULL
08/02/14 14:01:52
railsでsqlite3を使っていると
drop tbl where 1 = 1;
の様なSQLが自動生成されるんだけど、
"1 = 1"の部分はsqlite独自にイデオム?それとももっとコモンなモノ?
あと、意味としてはどう解釈すればいいのだろう?
421:NAME IS NULL
08/02/14 14:39:34
とりあえず "WHERE 1 = 1" でぐぐってみる。
422:NAME IS NULL
08/02/14 14:42:16
drop文にwhere使えたっけ?
423:NAME IS NULL
08/02/14 15:10:33
SELECTの自動生成だったら、WHERE 1=1 の後ろに AND 条件、AND 条件 と必要なだけつなげていくのが楽なのかも。
424:NAME IS NULL
08/02/14 15:44:17
ダサいフロントエンドだなあ
425:NAME IS NULL
08/02/14 16:31:23
>>424
何の話?
426:NAME IS NULL
08/02/14 20:18:17
>>423
CGIとかのスクリプトでSQL生成するときによくやるなそれ
true の代わり
427:NAME IS NULL
08/02/14 20:43:03
ActiveRecordのsqlite用のアダプタの中に、発行されたSQLにWHERE節がなければあえて"WHERE 1=1"を付け加ええるコードがある。
この後はSQLを実行されるだけなので "AND"で何かをつなげる意味でもなさそう。
検索すると一応SQLのイデオムとしては存在するみたいだけど、常に真になる条件ではANDでつなげやすい以外に何か意味があるとい回答は見つけられなかった。
自分が考えられる理由は最適化が掛かるとか(SELECTでEXPLAINするとステップが増えていたけど)、sqliteのどこかのバージョンで不具合があり、苦肉の回避法なのかとか…。
428:NAME IS NULL
08/02/14 20:43:58
>>426
具体的におねがい
429:NAME IS NULL
08/02/14 20:48:44
"SELECT * FROM xxx WHERE 1=1" に対して、0個以上の"AND~"を追加する方が、
"SELECT * FROM xxx" に対して、何もつけなかったり、最初の1個は"WHERE~"で、残りは"AND~"でとかを追加するより、
生成処理がずっと単純になるじゃんか。
430:NAME IS NULL
08/02/14 21:15:57
構文解析で単純にFROMとWHEREでちょん切って表名取り出してるだけなんじゃね?
431:NAME IS NULL
08/02/14 21:42:10
>>427
>sqliteのどこかのバージョンで不具合があり、苦肉の回避法なのかとか…。
これはないな。SQLite2.8の頃から使ってるが聞いたことない。
432:NAME IS NULL
08/02/14 22:00:11
>>428
Webのレコード検索画面とかで
検索条件 prm1:[________] prm2:[________] ... [検索]
↓
sql = "select id from hogetable where 1=1"
if (prm1) sql += " and prm1 = 'prm1'"
if (prm2) sql += " and prm2 = 'prm2'"
...
とかやる。これを使ってご飯を食べたりお茶を飲んだりする人もいる
亜種に
sql = "select id from hogetable where"
if (prm1) sql += " prm1 = 'prm1' and "
if (prm2) sql += " prm2 = 'prm2' and "
...
sql += " 1=1"
というのもある。
433:NAME IS NULL
08/02/14 22:49:05
>>429
それもないな。rubyなんだから、条件をarrayに放り込んでarray.join(" AND ")で一発。
434:NAME IS NULL
08/02/15 00:40:39
これが問題のコード。引数で生SQLを受け取って、"WHERE"がなければ付け足して、その下ですぐに実行。
何がしたいのか分からん。
ActiveRecord - connection_adapters/sqlite__adapter.rb
def delete(sql, name = nil) #:nodoc:
sql += " WHERE 1=1" unless sql =~ /WHERE/i
execute(sql, name)
@connection.changes
end
435:NAME IS NULL
08/02/15 02:22:58
WHERE 1 = 1って、変更や削除された行数を内部で計算させるじゃなかったか?
PEARのAffectedRows()などで取ってこれる、みたいな。
2chのPHPスレかPEARスレでそう書いてあった気が。
436:NAME IS NULL
08/02/15 07:04:36 E4/i5HKK
教えてください。現在 C# (VS.2005)で
【ADO.NET 2.0 Provider】 System.Data.SQLite
を使ってアプリ作成してます。
アプリ初回起動時のデータベース作成には、いきなり CREATE TABLE 文を流せば、
データソースに指定したパスにファイル(*.db)を自動作成し、
その時に実行した CREATE TABLE の分、同じスキーマ?内にテーブルを作ってくれるんですが、
アプリを一旦閉じて、その作成した既存のデータソース(*.db)に対して再度、
新規に追加したいテーブルの CREATE TABLE を実行すると
別名のファイルを作って(既存ファイル名の後ろに;をつけて)テーブル作成しやがります。
この別ファイルを生成させるのを回避する方法、
既存のデータソースにテーブル追加するときの特別なコマンドってあるんですか?
TkSQLite とか、GUI 上で追加するとまったく問題ないからきっとあるんだろうけど…。
437:NAME IS NULL
08/02/15 07:35:41
すいません、大誤爆です。
自分が他のDB作成用のソースから ConnectionStringBuilder を構築するメソッドをコピペして
接続文字列の区切りのセミコロンをそのままつけたままにしてたからでした…。
既存のデータソースにテーブル追加してもまったく問題ないです。
438:NAME IS NULL
08/02/15 09:35:52
m9(^Д^)プギャー
解説乙
439:NAME IS NULL
08/02/15 10:59:30
>>435
どうもそれが当たりっぽい気がする。
URLリンク(dev.rubyonrails.org)
440:NAME IS NULL
08/02/15 14:27:01
>>439
すばらしい。よく見つけられたな。
"WHERE 1=1"はSqliteのイデオムってことでいいのかな?
どっかにその仕組みが明記されていたりするのかな?
441:NAME IS NULL
08/02/15 14:46:25
>>440
SQLiteの、っていうよりDBMS固有のクセを吸収する為の一般的手法みたい。
PEAR マニュアルより引用:
URLリンク(www.ugunet.jp)
>可搬性に関するモードの定数
>MDB2_PORTABILITY_DELETE_COUNT
>削除された行数を強制的に取得します。 単純な DELETE FROM tablename クエリを実行した場合に、
>削除された行数を返さない DBMS があります。 このモードは、そんな DBMS から削除された行数を
>取得するために、DELETE クエリの最後に WHERE 1=1 を追加します。
DBMS固有のクセで、DELETE時に行数を返したり返さなかったりするものがあるんで、
自明な条件式を付ける事で、常に行数を返すようにする、と。
442:435
08/02/15 16:41:36
あった。多分これだ。
URLリンク(jp.php.net)
>直近のクエリが WHERE 句を含まない DELETE だった場合、テーブルから すべてのレコードが削除されますが、MySQL 4.1.2 以前のバージョンでは この関数はゼロを返します。
443:NAME IS NULL
08/02/15 16:44:49
"WHERE 1=1"が来る度に
他のDBMSは「またMySQLか!」みたいにウンザリしてるんだろうな。
444:NAME IS NULL
08/02/15 16:52:26
おまいらの執念に感動した
445:435
08/02/15 17:27:13
一応データベース板だから、MySQLのマニュアルの該当するページも載せておく。テーブルを一気に削除するから、行数は数えないという理由らしい。
URLリンク(dev.mysql.com)
> すべてのレコードの削除時に、削除されたレコード数を確認する必要がある場合、処理速度が遅くなってもかまわなければ、次の形式の DELETE ステートメントを使用できます。
> mysql> DELETE FROM table_name WHERE 1>0;
> 注意: この形式の場合、レコードが一度に 1 つずつ削除されるため、WHERE 節のない DELETE FROM table_name よりはるかに処理が遅くなります。
まさかと思って調べたら、どうもSQLiteもアウアウの予感。「not row changes and will not be counted」とのこと。
英語は苦手だからエロイ人チェックキボン。
URLリンク(www.sqlite.org)
> SQLite implements the command "DELETE FROM table" without a WHERE clause by dropping and recreating the table.
> (This is much faster than going through and deleting individual elements from the table.) Because of this optimization,
> the deletions in "DELETE FROM table" are not row changes and will not be counted by the sqlite3_changes() or
> sqlite3_total_changes() functions. To get an accurate count of the number of rows deleted, use "DELETE FROM table WHERE 1" instead.
446:NAME IS NULL
08/02/15 19:45:01
該当する部分を訳してみた。
URLリンク(www.sqlite.org)
SQLiteは、WHERE節のつかない"DELETE FROM table"コマンドを、テーブルを落とし、
再生成を行う実装をしています。(これは各個別要素を捜査し、個別に削除するより
もずっと高速です)最適化を理由に、"DELETE FROM table"による削除は行(row)変更
が起きず、またsqlite3_changes() や sqlite3_total_changes() 関数にカウントさ
れません。削除された行数を正確にカウントするには "DELETE FROM table WHERE 1"
を使用してください。
--
SQLiteもMysqlも同じ実装方法を採っているってことで、APIが絡んだときのSQLイデオムですね。
勉強になった。
447:NAME IS NULL
08/02/15 20:21:27
pragma設定すればdelete文が削除した行数を返す様に出来るみたいだ。
URLリンク(www.sqlite.org)
普通の場合。
sqlite> create table a(x);
sqlite> insert into a values(10);
sqlite> insert into a values(20);
sqlite> delete from a;
pragma設定した場合。
sqlite> pragma count_changes=1;
sqlite> create table a(x);
sqlite> insert into a values(10);
1 <= insertした行数
sqlite> insert into a values(20);
1 <= insertした行数
sqlite> delete from a;
2 <= deleteした行数
sqlite3_changes() / sqlite3_total_changes() で変更行数が拾えるかどうかと
delete文自体が値を返すかどうかってのは別問題だから、そこは切り分けないと。
448:NAME IS NULL
08/02/15 22:43:13
消す前に自分の持ってるレコード数返すだけでいいのに
449:NAME IS NULL
08/02/15 23:22:25
こんなみょうちくりんな構文がCのAPIのところに書いてあったのか。
なんか他にもマニアックな構文が隠れてそう
450:NAME IS NULL
08/02/18 23:03:13 gBQYlv+0
データをINSERTする時に、そのデータにシングルクォーテーションが含まれていると、
SQLiteがシンタックスと勘違いしてSQL構文エラーになるんですけど、
SQL文のシングルクォーテーションをエスケープする方法ってあるんでしょうか?
451:NAME IS NULL
08/02/18 23:11:35
>>450
''
452:NAME IS NULL
08/02/18 23:26:44
sqlite3_mprintf
453:450
08/02/18 23:35:11
>>451
''でしたか。\'かと…orz
ありがとうございました。
>>452
sqlite3_mprintfにて%qですか。
ありがとうございました。
454:NAME IS NULL
08/02/19 08:18:56
php厨か
455:NAME IS NULL
08/02/19 18:18:08
なんちゅう無知w
456:NAME IS NULL
08/02/19 18:53:02
ちゃんとbindを教えてやれよ
457:NAME IS NULL
08/02/19 21:51:59
ついでにSQLインジェクションで愚ぐることを推奨するよーー
458:NAME IS NULL
08/02/20 08:38:08
バイナリが必要になって久しぶりにSQLiteのサイト見たら
2.8のバイナリ消えてる…
cvsからソースのチェックアウトはできるようだけど他人のソースのコンパイルなんてやったことねー(鬱
459:NAME IS NULL
08/02/20 08:46:28
>>458
リンクは無いけど、URL直打ちすると2.8.17とか落とせるよ
URLは最新版の奴から類推すれ
460:NAME IS NULL
08/02/20 09:26:33
そうなのですか!ありがとう!
461:NAME IS NULL
08/02/23 20:32:01 4Br+w72V
URLリンク(ja.wikipedia.org)
Wikipedia:データベースダウンロード
英語版のwiki3GバイトをMySQLにインポートすることはできたのですが
sqliteではうまくいきません
sqliteでwikiのxmlファイルのインポートは可能でしょうが
462:NAME IS NULL
08/02/23 20:54:16
うまくいかないんじゃダメなんだろ
463:NAME IS NULL
08/02/23 21:09:41
可能だろ。自分でXMLパースして取り込めばいいじゃん。
そんな簡単なこともできないようじゃ使う資格ないね!!
464:NAME IS NULL
08/02/23 21:33:48
MySQLに入ったんなら、MySQL→SQLiteで入れればいいじゃん
465:NAME IS NULL
08/02/25 00:41:56
質問
#include "sqlite3.h"
#include <windows.h>
class SqliteException {
private:
SqliteException(LPCWSTR errmsg, int errcode);
int errCode;
public:
int getErrCode();
static SqliteException NewException(sqlite3 *db);
};
sqlite3_stmt * prepareSql(sqlite3 *db, LPCWSTR sql);
#define BEGIN_QUERY(db, sql) \
{ \
sqlite3 * _db = (sqlite3 *)db; \
sqlite3_stmt *_stmt = prepareSql(db, sql); \
__try {
#define BEGIN_BIND \
{ \
int _i = 0; _i; \
\
if (SQLITE_OK != sqlite3_reset(_stmt)
#define BIND_INTEGER(value) \
|| SQLITE_OK != sqlite3_bind_int(_stmt, ++_i, (int)(value))
#define BIND_INT64(value) \
|| SQLITE_OK != sqlite3_bind_int64(_stmt, ++_i, (sqlite3_int64)(value))
#define END_BIND \
) \
throw SqliteException::NewException(_db); \
}