[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 11:35 / Filesize : 204 KB / Number-of Response : 923
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

SQLite 6



1 名前:NAME IS NULL [2007/10/23(火) 14:40:37 ID:2Ih164Og]
www.sqlite.org/

過去スレ

sqliteを語るスレ
pc8.2ch.net/test/read.cgi/db/1056956494/
SQLite 2
pc8.2ch.net/test/read.cgi/db/1140827718/
SQLite 3
pc8.2ch.net/test/read.cgi/db/1152367932/
SQLite 4
pc11.2ch.net/test/read.cgi/db/1162621344/
SQLite 5
pc11.2ch.net/test/read.cgi/db/1176223619/

2 名前:NAME IS NULL mailto:sage [2007/10/23(火) 16:17:16 ID:???]
ツール等

【GUIツール】 TkSQLite
ttp://reddog.s35.xrea.com/wiki/TkSQLite.html

【ADO.NET 2.0 Provider】 System.Data.SQLite
ttp://sqlite.phxsoftware.com/

【ODBC】 SQLite ODBC Driver
ttp://www.ch-werner.de/sqliteodbc/


3 名前:NAME IS NULL mailto:sage [2007/10/23(火) 23:11:53 ID:???]
【ネタ】
OS X ハッキング! SQLiteが広げるこれからのアプリケーション
journal.mycom.co.jp/column/osx/236/index.html

SQLite Java Wrapperのコンパイル
syo.cocolog-nifty.com/freely/2007/10/sqlite_java_wra_f79c.html

SQLiteへの大量のINSERT処理が厳しい (CodeZine編集部ブログ):
blog.codezine.jp/editor/2007/10/sqliteinsert.php

SQLite性能評価その1
www.sutosoft.com/room/archives/000450.html

Fulltext index on SQLite
www.dodgson.org/omo/t/?date=20061001

SQLite の全文検索を Python から使ってみる (1)
plaza.rakuten.co.jp/kugutsushi/diary/200707270001/

SQLite Full Text Search with MeCab
reddog.s35.xrea.com/wiki/SQLite%20Full%20Text%20Search%20with%20MeCab.html

4 名前:NAME IS NULL mailto:sage [2007/10/25(木) 23:16:53 ID:???]

なんか前スレいつの間にかなくなってた

しかし、語ることがないDBMSてのは安定してて優れている証かね。
退屈だねぇ
たまにはサーバーとかが爆発して、ちょっと修理して頼れるところとか見せてやりたいよ!
SQLite関係ないけどな!

5 名前:NAME IS NULL mailto:sage [2007/10/26(金) 15:22:46 ID:???]
php5徹底攻略という本の通りに、
COPY zip FROM '13tokyo.txt';
とやると、
SQL error: near "COPY": syntax error
とでるのですが、何故でしょうか?

6 名前:NAME IS NULL mailto:sage [2007/10/26(金) 15:58:48 ID:???]
COPYという命令はSQLiteにはない

7 名前:NAME IS NULL mailto:sage [2007/10/26(金) 17:11:59 ID:???]
2.8 以前では存在したんだけど 3.0 で撤去されたとかなんとか
ttp://www.sqlite.org/lang_copy.html

PHP5 徹底攻略もって無いからあれだけど
zip っていうテーブルがあることを前提として
sqlite3 を起動して対話型シェルから

sqlite> .import 13tokyo.txt zip

とかやればいいと思うよ

8 名前:NAME IS NULL mailto:sage [2007/10/27(土) 10:39:12 ID:???]
C++でSQLiteを使っています。

sqlite_execでSELECTしたときに呼ばれるコールバック関数内でUPDATEしたいのですが、できませんでした。
実際ドキュメントにもsqilte_execの再帰呼び出しは問題があるように書かれてました。
これを解決するには、UPDATEするための情報を一旦保持しておいて、後から実行するしかないのでしょうか?
メモリ使用量が気になるので、別な手段があったら教えていただけると嬉しいです。

9 名前:NAME IS NULL mailto:sage [2007/10/27(土) 10:43:59 ID:???]
メモリ使用量が気になるほどのデータをドカっとSELECTしてドカっとUPDATEするのか
それを通常の運用でやる必要があるのならテーブル設計が間違ってる気がする

10 名前:NAME IS NULL mailto:sage [2007/10/27(土) 11:03:10 ID:???]
>>9
レスありがとうございます。
テーブル設計ですか…見直してみます。



11 名前:NAME IS NULL mailto:sage [2007/10/27(土) 11:14:22 ID:???]
実はSQL一発でできる処理だったりとか

12 名前:8 mailto:sage [2007/10/27(土) 11:55:24 ID:???]
>>11
どうなんでしょう…
今やろうとしていることを簡単化すると、
id, name, strカラムを持つテーブルに対して、
nameとstrが特定の条件を満たすとき(文字列処理をした上で判定)に、
UPDATEでstrを書き換えるという処理です。

13 名前:NAME IS NULL mailto:sage [2007/10/27(土) 12:07:40 ID:???]
使ったことないけどユーザ定義関数というのはそういう為にあるんではなかろうか。

14 名前:NAME IS NULL mailto:sage [2007/10/27(土) 15:01:56 ID:???]
もう1回sqlite_open()すればできないことはない

15 名前:8 mailto:sage [2007/10/27(土) 17:46:20 ID:???]
>>13
sqlite_create_function を使ってユーザ定義関数COND, CHANGEを定義して、
UPDATE table SET str=CHANGE(str) WHERE COND(str)=1;
とすることによって、うまくいきました。
ありがとうございます。

>>14
今度試してみます。

16 名前:NAME IS NULL mailto:sage [2007/10/28(日) 19:07:03 ID:???]
>>8
sqlite3_exec() はパフォーマンスが悪いから、面倒でも
sqlite3_prepare_v2() と sqlite3_step() を使った方がいい。

sqlite3_exec() も結局内部で prepare と step を実行してるだけだし
コールバックなんぞに頼らずに自力で step するようにすれば
行を読みながら別の処理を行うのも簡単にできる。


17 名前:NAME IS NULL mailto:sage [2007/10/28(日) 19:32:10 ID:???]
sqlite3_prepare_v2でも、パフォーマンスはそんなに変わらんな
www.sutosoft.com/room/archives/000454.html

18 名前:NAME IS NULL mailto:sage [2007/10/29(月) 14:18:47 ID:???]
sqliteで標準偏差を計算するにはどのようにしたらいいのでしょうか?

19 名前:NAME IS NULL mailto:sage [2007/10/29(月) 14:59:11 ID:???]
どこまで自分で考えたか(調べたか)くらい書こうぜ

20 名前:18 mailto:sage [2007/10/29(月) 16:01:37 ID:???]
はい。すみませんでした。
平方根の計算をどうやるのかなーと。
専用の関数も無いみたいだし、自分で作らなくちゃなんですよね?
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 mailto:sage [2007/10/29(月) 17:24:59 ID:???]
2乗が計算できるのであれば、-(1/2)乗すれば平方根が出るんじゃね?

やったこと無いのでハズしてるかもしれないが。


22 名前:NAME IS NULL mailto:sage [2007/10/29(月) 17:37:44 ID:???]
すまん、-(1/2)乗ではなく、(1/2)乗だった。


23 名前:NAME IS NULL mailto:sage [2007/10/29(月) 18:30:18 ID:???]
組み込みでは冪乗演算子も無いよね。

ちょっとぐぐってみたところ、 extension-functions.c なるモノがある模様。

Contributed Files
www.sqlite.org/contrib

24 名前:NAME IS NULL mailto:sage [2007/10/29(月) 21:25:01 ID:???]
何が何でもすべてSQLでやらなかきゃいかんもんなの?
分散求めといて、ホストプログラムで平方根取れば良いのでは?

25 名前:NAME IS NULL mailto:sage [2007/10/30(火) 12:53:02 ID:???]
CodeZine:SQLiteを操作できるFirefox拡張機能「SQLite Manager 0.2.4」リリース(アドオン, DB)
ttp://codezine.jp/a/article/aid/1840.aspx

26 名前:NAME IS NULL mailto:sage [2007/10/30(火) 15:09:57 ID:???]
そのうちjavascriptだけでsqliteを操作出来るようになって、
完全にサーバー不要のウェブアプリケーションが出来るかもしれないな。


27 名前:NAME IS NULL mailto:sage [2007/10/30(火) 15:24:37 ID:???]
サーバなしって…
データをローカルに置いたらウェブアプリケーションのメリットねーだろ‥

28 名前:NAME IS NULL mailto:sage [2007/10/30(火) 16:09:15 ID:???]
>>27
プログラム配布が無いのは良いな


29 名前:NAME IS NULL mailto:sage [2007/10/30(火) 16:11:44 ID:???]
ウェブアプリケーションというより、ブラウザアプリケーションって感じだね。
これならCD-ROMに入れて配布とか出来るし

30 名前:NAME IS NULL mailto:sage [2007/10/30(火) 17:44:20 ID:???]
つ[Google Gears]



31 名前:NAME IS NULL mailto:sage [2007/10/30(火) 22:26:41 ID:???]
sqliteとmysqlだけで運用してるけど、なんかsqliteだけでいいような気がしてきた。
二つをわける意味ってあるのかね?

32 名前:NAME IS NULL mailto:sage [2007/10/30(火) 23:02:56 ID:???]
さあ。エスパーじゃないもんで。

33 名前:NAME IS NULL mailto:sage [2007/10/30(火) 23:27:20 ID:???]
エスパーだけど、いいんじゃないかな。

34 名前:NAME IS NULL mailto:sage [2007/10/30(火) 23:58:41 ID:???]
エスパーが言うなら間違いないな

35 名前:NAME IS NULL mailto:sage [2007/10/31(水) 00:17:57 ID:???]
さては伊藤だな

36 名前:NAME IS NULL mailto:sage [2007/10/31(水) 00:23:12 ID:???]
ぱわーろっく、つでぃ!

37 名前:NAME IS NULL mailto:sage [2007/10/31(水) 00:47:09 ID:???]
>>31
マジレスすると、そんな疑問を持つくらいなら意味ないだろうな

38 名前:NAME IS NULL mailto:sage [2007/10/31(水) 06:57:53 ID:???]
>>36
嵐の中ボンジョビとヘリに同乗して来い

39 名前:NAME IS NULL mailto:sage [2007/10/31(水) 09:38:11 ID:???]
政則表現サポートまだー?

40 名前:NAME IS NULL mailto:sage [2007/11/01(木) 00:12:08 ID:???]
まさのりって誰だよw



41 名前:NAME IS NULL mailto:sage [2007/11/01(木) 00:19:59 ID:???]
呼んだ?

42 名前:NAME IS NULL mailto:sage [2007/11/07(水) 17:03:15 ID:???]
リリースきた

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 mailto:sage [2007/11/08(木) 14:51:02 ID:???]
Dropped support for〜
↑どういう意味?

44 名前:NAME IS NULL mailto:sage [2007/11/08(木) 15:03:13 ID:???]
無くしたってことじゃん?

45 名前:NAME IS NULL [2007/11/11(日) 23:00:33 ID:2YsJoDVT]
インクリメントの最新の値を得る方法って知らない?

MySQLのLAST_INSERT_IDみたいなやつ。

46 名前:NAME IS NULL mailto:sage [2007/11/11(日) 23:08:19 ID:???]
sqlite3_last_insert_rowid()かな?

47 名前:NAME IS NULL mailto:sage [2007/11/12(月) 14:30:33 ID:???]
テーブルの列を削除する方法ってないでしょうか?

alter table テーブル名 drop column 列名

としても出来ませんでした

48 名前:NAME IS NULL mailto:sage [2007/11/12(月) 15:02:22 ID:???]
>>47
ttp://www.sqlite.org/faq.html#q11

49 名前:45 [2007/11/12(月) 20:55:21 ID:6IOGFgpn]
>>46
トンクス
select last_insert_rowid();
で行けた。

50 名前:NAME IS NULL mailto:sage [2007/11/13(火) 13:35:28 ID:???]
Androidに載るのが確定したね。



51 名前:WdUyLgrrXIRwiSMg mailto:lemkpd@uewnsx.com [2007/11/13(火) 14:42:19 ID:???]
hVSJwN <a href="padikzvudjco.com/">padikzvudjco</a>, [url=xgqhogakudkn.com/]xgqhogakudkn[/url], [link=syimejtdnxhn.com/]syimejtdnxhn[/link], usveqseywzan.com/

52 名前:NAME IS NULL mailto:sage [2007/11/13(火) 15:49:05 ID:???]
〜ロイドと聞いただけで俺の頭の中に「とかちつくちて」が流れた!

53 名前:NAME IS NULL mailto:sage [2007/11/13(火) 15:54:53 ID:???]
俺の頭にはR2D2がハイテンションで何かを語りかけてかけてきたお。

54 名前:NAME IS NULL mailto:sage [2007/11/13(火) 21:12:48 ID:???]
アンドロイドってなんでつか。人工知能でつか

55 名前:NAME IS NULL mailto:sage [2007/11/13(火) 21:26:18 ID:???]
サムスは出てこないものか

56 名前:NAME IS NULL mailto:sage [2007/11/13(火) 22:54:39 ID:???]
>>54
ja.wikipedia.org/wiki/Android

57 名前:NAME IS NULL mailto:sage [2007/11/14(水) 16:41:24 ID:???]
Bento
www.filemaker.co.jp/products/bento/preview/learn-more
DBエンジンはSQLite
Mac の Address Book や iCal のデータをそのまま利用できてリレーションも設定できるみたい。

58 名前:NAME IS NULL mailto:sage [2007/11/14(水) 18:43:05 ID:???]
弁当

59 名前:NAME IS NULL mailto:sage [2007/11/14(水) 18:58:15 ID:???]
>>58
そう。弁当。
なんでもつっこめる10年前のOpen DocのBENTO(弁当)フォーマットを今風にしたアプリケーション。

60 名前:NAME IS NULL mailto:sage [2007/11/14(水) 19:01:51 ID:???]
ギガナツカシス



61 名前:NAME IS NULL mailto:sage [2007/11/14(水) 19:06:58 ID:???]
おれけっこう長いことCyberdog使ってたわw

62 名前:NAME IS NULL [2007/11/17(土) 21:08:10 ID:N1iehPDr]
まんぱん商事社長だ

63 名前:NAME IS NULL mailto:sage [2007/11/17(土) 21:09:18 ID:???]
ゴバクった。スマン。

64 名前:NAME IS NULL [2007/11/27(火) 07:09:30 ID:2e8MM+HH]
インサートした行のキーを取得する関数とかありましたっけ。

65 名前:NAME IS NULL mailto:sage [2007/11/27(火) 07:19:21 ID:???]
>>49あたりの話がそうではないの?

66 名前:NAME IS NULL mailto:sage [2007/11/29(木) 17:59:23 ID:???]
どっかにVS2005+ADO.NET2.0ProviderをつかったGUIアプリのサンプル転がってないですか?


67 名前:NAME IS NULL mailto:sage [2007/11/30(金) 13:04:38 ID:???]
SharpDevelopでBoo使ったやつならあるよ。

68 名前:NAME IS NULL mailto:sage [2007/11/30(金) 23:03:22 ID:???]
突然ですが、SQLiteは何と発音すればいいのでしょうか??

69 名前:NAME IS NULL mailto:sage [2007/11/30(金) 23:07:01 ID:???]
スクライト
ストライクでも通じる

70 名前:NAME IS NULL mailto:sage [2007/11/30(金) 23:40:16 ID:???]
漏れはえすきゅーぇらいと



71 名前:NAME IS NULL mailto:sage [2007/12/01(土) 00:09:38 ID:???]
スプライトでも通じる

72 名前:NAME IS NULL mailto:sage [2007/12/01(土) 01:22:00 ID:???]
前スレより。

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:???
> 「えすきゅーらいと」か「えすきゅーえ (る) らいと」くらいかなあ?
>
> video.google.com/videoplay?docid=-5160435487953918649
> www.mail-archive.com/sqlite-users@sqlite.org/msg16344.html

349 名前:NAME IS NULL[sage] 投稿日:2007/06/04(月) 12:08:49 ID:???
新めのスレッドあった。
ttp://www.mail-archive.com/sqlite-users@sqlite.org/msg23687.html

読み方もPublic Domainでいいんじゃね? ってのに同意。


73 名前:NAME IS NULL mailto:sage [2007/12/01(土) 01:23:32 ID:???]
PostgreSQLとおなじキモさを感じる。

74 名前:NAME IS NULL mailto:sage [2007/12/01(土) 01:25:03 ID:???]
結論は通じればいい。

75 名前:NAME IS NULL mailto:sage [2007/12/01(土) 01:38:57 ID:???]
スクライトで通じたことはないな

76 名前:NAME IS NULL mailto:sage [2007/12/01(土) 02:22:16 ID:???]
スクリテも通じにくいね

77 名前:NAME IS NULL mailto:sage [2007/12/01(土) 14:11:49 ID:???]
>>75
アルター使いがいっぱいいそうだな

78 名前:NAME IS NULL mailto:sage [2007/12/01(土) 14:56:29 ID:???]
>>76
酢くりティポリティ思い出した

79 名前:NAME IS NULL mailto:sage [2007/12/02(日) 13:59:27 ID:???]
tksqliteは、つーかスクライトと読みます。

80 名前:NAME IS NULL mailto:sage [2007/12/02(日) 14:21:03 ID:???]
たかすクリニックかとおもた



81 名前:NAME IS NULL [2007/12/05(水) 02:37:22 ID:jVN3kHRw]
ロリポップってレンタルサーバにSQLiteをうpしたんですが
PHPから読み込みしかできないんですOTZ
書き込みってどうすればいいんですかねぇ(´・ω・`)?

82 名前:NAME IS NULL mailto:sage [2007/12/05(水) 03:16:33 ID:???]
属性を変えます

83 名前:NAME IS NULL mailto:sage [2007/12/05(水) 09:25:17 ID:???]
ディレクトリの書き込み属性も変えた方が良いかもね。

84 名前:NAME IS NULL mailto:sage [2007/12/06(木) 05:38:13 ID:???]
OSはMac OS Xです。
sqlite3コマンドについてなんですが、
日本語が通りません。
例えば、テーブル higebu にnameというフィールドが有ったとして、
UPDATE higebu SET name = 'メソ' WHERE number = 666;
みたいなことができません。
ただし、PHPなどからでは、nameにマサルやフーミンといった
日本語を格納することは出来ます。
何か対処法はないでしょうか?

85 名前:NAME IS NULL mailto:sage [2007/12/06(木) 05:46:00 ID:???]
ついでににシェルスクリプト作って、
cat hoge.db
UPDATE higebu SET name = 'メソ' WHERE number = 666;
sqlite3 higebu < hoge.db
みたいなことをやれば、ちゃんと格納されます。
sqlite3コマンドに日本語が通らないんです。

86 名前:NAME IS NULL mailto:sage [2007/12/06(木) 08:51:55 ID:???]
日本語のエンコードの問題じゃね?
シフトJISの"ソ"は、0x835c だから、下位バイトの 5c がバックスラッシュ扱いされている気がする。
DB格納データもコンソールも UTF8にしてやってみ。

87 名前:NAME IS NULL mailto:sage [2007/12/06(木) 11:44:08 ID:???]
どれどれと思ってOSX10.4.11で試してみた。
確かにterminalからだとsqlite3のコマンドラインに日本語が入力できないね。
これ、emacsのshellバッファの中でsqlite3動かすとちゃんとお望みの動作ができてるので、
日本語入力の問題臭い。どうやって解決するかは知らん。

88 名前:87 mailto:sage [2007/12/06(木) 11:47:16 ID:???]
追試。
terminal上からだと日本語が入力できないていうか、
\nnnの形でエスケープされた文字になるけど、
それなりに動作はしてるようだ。
selectで表示すればちゃんと日本語になってる。

89 名前:NAME IS NULL mailto:sage [2007/12/06(木) 13:04:12 ID:???]
違うフロントエンド使うか作るかすりゃいいじゃん。
sqlite3コマンドなんてサンプルプログラムみたいなもんでしょ。

90 名前:NAME IS NULL mailto:sage [2007/12/06(木) 13:08:27 ID:???]
sqlite3コマンドに原因があるわけじゃないような



91 名前:NAME IS NULL mailto:sage [2007/12/06(木) 15:35:54 ID:???]
明らかにsqlite3コマンドの問題

92 名前:NAME IS NULL mailto:sage [2007/12/06(木) 15:42:32 ID:???]
それならemacsの中で実行してもダメなんじゃないの?
端末はshift-jisだけどemacsのprocess-coding-systemはeucかなんかってこと?

93 名前:NAME IS NULL mailto:sage [2007/12/06(木) 15:48:31 ID:???]
いやだから環境にあったフロントエンドを使えってこと
そのEmacsの中はsqlite3が想定している環境なんだろ

94 名前:NAME IS NULL mailto:sage [2007/12/06(木) 15:50:09 ID:???]
aho?

95 名前:NAME IS NULL mailto:sage [2007/12/06(木) 16:03:04 ID:???]
マカだもの

96 名前:NAME IS NULL mailto:sage [2007/12/06(木) 16:06:18 ID:???]
>>95
またおまえか

97 名前:87 mailto:sage [2007/12/06(木) 16:36:15 ID:???]
>>92
私が試したのはterminalもemacsもUTF8だよん。

98 名前:NAME IS NULL mailto:sage [2007/12/06(木) 18:11:30 ID:???]
ソースがあるんだから、何が起きてるかくらい追いかけろよ

99 名前:NAME IS NULL mailto:sage [2007/12/06(木) 18:15:50 ID:???]
Terminal ってソースあるの?

100 名前:NAME IS NULL mailto:sage [2007/12/06(木) 18:51:13 ID:???]
馬鹿ばっかだな



101 名前:NAME IS NULL mailto:sage [2007/12/06(木) 18:53:01 ID:???]
>>99
sqlite3のソースはあるんだから、どういうコードで渡ってきてるかくらい追えるのでは?
ターミナルがバグってるって話をしたいならスレチ&イタチ。

102 名前:NAME IS NULL mailto:sage [2007/12/06(木) 19:14:59 ID:???]
どうでもいいけど、windowsでsqlite3.exeをコマンドプロンプトから
使うとutf-8じゃなくてshiftjisで文字が格納される。これ豆知識な。

103 名前:NAME IS NULL mailto:sage [2007/12/06(木) 20:16:15 ID:???]
× Windowsで
○ 日本語版Windowsで


104 名前:NAME IS NULL mailto:sage [2007/12/06(木) 22:39:17 ID:???]
ctrl+]
set codeset japanese euc


105 名前:87 mailto:sage [2007/12/07(金) 11:17:11 ID:???]
とりあえずわかったこと。
~/.editrc に edit off って書いておくと terminal 上でも sqlite3 のコマンドラインに
日本語を入力できるので、 editline ライブラリの問題らしい。
でもこうしちゃうと行の編集とかヒストリが使えなくなるのでおいしくない。



106 名前:NAME IS NULL [2007/12/08(土) 12:06:25 ID:FZp8Cjdm]
DBファイルのサイズに上限を設ける方法を教えれ

107 名前:NAME IS NULL mailto:sage [2007/12/08(土) 15:45:17 ID:???]
>>106
ディスクのパーティションサイズを変更。

108 名前:NAME IS NULL mailto:sage [2007/12/08(土) 17:05:14 ID:???]
quota

109 名前:NAME IS NULL mailto:sage [2007/12/08(土) 17:21:49 ID:???]
>>108
今それでやってるんだけど
こんな消極的な方法しかないの?

110 名前:NAME IS NULL mailto:sage [2007/12/08(土) 17:49:07 ID:???]
そんなことまでDB任せにする時代なの?



111 名前:NAME IS NULL mailto:sage [2007/12/08(土) 18:40:27 ID:???]
池沼の時代来る!

112 名前:NAME IS NULL mailto:sage [2007/12/08(土) 19:00:37 ID:???]
もっと積極的に行こうよ

113 名前:NAME IS NULL mailto:sage [2007/12/08(土) 20:54:51 ID:???]
書き換えがあったとき
変更中はfileのcopyが作られて
COMMITでrenameされるタイプだと
実際はquotaの半分のサイズまでしか伸びない?

114 名前:NAME IS NULL mailto:sage [2007/12/08(土) 22:51:46 ID:???]
 クエリを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 mailto:sage [2007/12/08(土) 22:58:30 ID:???]
君にはJavascriptの勉強がお勧め

116 名前:NAME IS NULL mailto:sage [2007/12/09(日) 05:58:11 ID:???]
`i`

117 名前:NAME IS NULL mailto:sage [2007/12/09(日) 06:23:37 ID:???]
〜(`i`)rz

118 名前:NAME IS NULL mailto:sage [2007/12/09(日) 14:57:49 ID:???]
>>109
自分で積極的に、
ソースコードを読んで、
考えるべし。

119 名前:NAME IS NULL mailto:sage [2007/12/10(月) 03:08:49 ID:???]
view を作るときに、 where 節があると
parameters are not allowed in views
と言われるんだけど、これって SQLite の制限?

×: create view ほげ as select * from ふが where 条件
○: create view ほげ as select * from ふが

120 名前:NAME IS NULL mailto:sage [2007/12/10(月) 09:55:15 ID:???]
>>119
んと、うちでは再現しないんだけど、その「条件」によるのでは?



121 名前:114 mailto:sage [2007/12/10(月) 12:37:45 ID:???]
 お騒がせしました。おかげさまで解決しました。
 必要ないとは思いますが、参考までに。

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 mailto:sage [2007/12/10(月) 13:24:43 ID:???]
>>121
そんなに親の仇のように激しくクエリを発行するのはどうなの

123 名前:NAME IS NULL mailto:sage [2007/12/10(月) 19:01:20 ID:???]
典型的な糞プログラムだなwwwワロタw

124 名前:NAME IS NULL mailto:sage [2007/12/10(月) 19:06:00 ID:???]
>>122
使用サイトは「仇討ち.com」ですので安心です。


125 名前:NAME IS NULL mailto:sage [2007/12/11(火) 02:33:44 ID:???]
>>120
where id = 数字
とか、簡単な条件。色々試してみたけど、 where 節がある時点で駄目っぽいんだよな。
もちろん create table に置き換えると動くことは確認してる。
諸事情で SQLite 3.4.x なのがいけないのかな。

126 名前:NAME IS NULL mailto:sage [2007/12/11(火) 09:43:45 ID:???]
やっぱうち (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 mailto:sage [2007/12/11(火) 16:55:54 ID:???]
>>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 mailto:sage [2007/12/11(火) 17:04:00 ID:???]
>>126
どうも Python binding のバグで、 SQLite は無罪っぽい。 SQLite と >>126 さんごめん。
もうちょっと追跡してバグ報告しときます。

129 名前:NAME IS NULL mailto:sage [2007/12/11(火) 23:37:22 ID:???]
sqlite> CREATE VIEW v12 AS SELECT a FROM t1 WHERE b=?;
SQL error: parameters are not allowed in views

これで性交する環境なんてあるの?


130 名前:NAME IS NULL mailto:sage [2007/12/12(水) 01:19:46 ID:???]
>>127
ああそれだ。 "?" って Python binding 側で行っている単なるエスケープ処理だと思ってた。
SQLite 側の機能で、 SQL 文のコンパイル後に値を変えているのか。
Python binding のバグとか恥ずかしー。
thx.



131 名前:NAME IS NULL mailto:sage [2007/12/12(水) 01:21:16 ID:???]
>>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 mailto:sage [2007/12/12(水) 01:58:25 ID:???]
>>129
ないでしょ。

133 名前:127 mailto:sage [2007/12/12(水) 09:18:49 ID:???]
>>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.
ttp://www.sqlite.org/cvstrac/chngview?cn=2492

134 名前:131 mailto:sage [2007/12/12(水) 10:13:23 ID:???]
>>133
おお、ありがとう。ぜんぜん調べが足らなかった。
pParse->nVar はクエリに含まれる ? の数だろうから
CREATE VIEW ... に ? が含まれていた時点でエラー発生させるっぽいね。

135 名前:NAME IS NULL mailto:sage [2007/12/15(土) 13:22:51 ID:???]
マカって本当に馬鹿だよな。

136 名前:NAME IS NULL mailto:sage [2007/12/15(土) 13:57:28 ID:???]
SQLite Release of 2007 Dec 14 (3.5.4)

137 名前:NAME IS NULL mailto:sage [2007/12/16(日) 04:28:56 ID:???]
最新版落としてみたけど
tclsh: No such file or directory
error code 1
って出てmakeできない・・・なぜ?

138 名前:NAME IS NULL mailto:sage [2007/12/16(日) 04:39:51 ID:???]
NO_TCLを#defineしてる?

139 名前:NAME IS NULL mailto:sage [2007/12/16(日) 05:32:17 ID:???]
>>138さん
具体的にどうすればいいのでしょうか?
configureで--disable-tclやらいろいろ試してみましたがどうやっても結果がかわりません。
tclを入れなきゃだめなんでしょうか。

140 名前:NAME IS NULL mailto:sage [2007/12/16(日) 09:28:36 ID:???]
makeなら、-DNO_TCLじゃないかな



141 名前:NAME IS NULL mailto:sage [2007/12/18(火) 23:10:00 ID:???]
VB 2005+Jetでスタンドアロン環境用のアプリを組んでたんですが、
DBデータファイルの最大値が2GBなので、SQLiteに移行しようかな
と思ってます。

でも、最新版のSQLiteの日本語解説が見あたらずに困っています。
市販本はバージョンが古そうで… 英語は全くダメなので、どこか
良い日本語のサイトがあれば教えてください。


142 名前:NAME IS NULL mailto:sage [2007/12/18(火) 23:54:04 ID:???]
別に最新版の解説じゃなくても取っ掛かりにはなるんじゃないの?

俺も英語ダメだけどこの手の資料なら出てくる単語は見慣れた専門用語ばっかりだし、
慣れたらそれなりには読めるよ。


143 名前:NAME IS NULL mailto:sage [2007/12/19(水) 00:48:17 ID:???]
つーか、翻訳してもカタカナ語になるだけだからな
英語も日本語も大差ない

144 名前:NAME IS NULL mailto:sage [2007/12/19(水) 01:07:21 ID:???]
>>141
英語が駄目なんて言ってるうちは今の階級から上がれないよ。
格差社会なんだからがんばろうぜ。

145 名前:NAME IS NULL mailto:sage [2007/12/19(水) 20:56:54 ID:???]
>>141
YouにはSQL Serverがおにあいだ

146 名前:NAME IS NULL mailto:sage [2007/12/19(水) 23:44:09 ID:???]
>>141
ソフトウェアの世界で、英語が全くダメな奴に「最新情報」がゲットできるとでも思ってんのか?


147 名前:NAME IS NULL mailto:sage [2007/12/19(水) 23:45:09 ID:???]
>>145
SQL Server だって、2008 の最新情報は英語しかないよw


148 名前:NAME IS NULL mailto:sage [2007/12/19(水) 23:52:48 ID:???]
日本語プログラミングみたいに日本語SQLを作ったらいい

選ぶ 全部 どこから?それは 出席簿 と 成績表 どれ?それは 出席簿 の 学籍番号 は 成績表 の 学籍番号
それと 成績表 の 平均 国語 に 算数 に 理科 に 社会 は大きい 80 それと 死亡フラグ はヌル

みたいなの

149 名前:NAME IS NULL mailto:sage [2007/12/20(木) 00:28:58 ID:???]
>>148
単語だけじゃん。

成績表 の 国語 と 算数 の 平均 が 80 以上 で
出席簿 の 学籍番号 は 成績表 の 学籍番号 で
出席簿 と 成績表 から 全部 選ぶ

150 名前:NAME IS NULL mailto:sage [2007/12/20(木) 01:53:33 ID:???]
ぴゅう太w



151 名前:NAME IS NULL mailto:sage [2007/12/20(木) 02:49:26 ID:???]
>>141
何も最新版でなくても
SQLite が認識できるクエリー言語
www.net-newbie.com/sqlite/lang.html
で十分だろ。

152 名前:NAME IS NULL mailto:sage [2007/12/20(木) 11:33:32 ID:???]
>>141が何を知りたいのか良く分からん
SQLiteのクエリ文法が知りたいのか、
VBやC/C++からSQLiteを使う方法を知りたいのか?
いずれにしても、最新ドキュメントに拘る理由はない罠

153 名前:NAME IS NULL mailto:sage [2007/12/20(木) 13:24:32 ID:???]
あそびならそれでいいな。仕事なら最新ドキュメント読まない奴はクビにするが。

154 名前:NAME IS NULL mailto:sage [2007/12/20(木) 13:35:25 ID:???]
仕事なら英文ドキュメント読まない奴もクビにするが。

155 名前:NAME IS NULL mailto:sage [2007/12/20(木) 13:35:37 ID:???]
まあ最新ドキュメントはたまに間違ってたりするが
ドキュメントにも枯れてる/枯れてないはあるから

156 名前:NAME IS NULL mailto:sage [2007/12/20(木) 13:48:36 ID:???]
SQLite のドキュメント程度なら
プログラミングの知識と高卒レベルの英語力と辞書がありゃ余裕で理解できるっしょ。
英語は全くダメとか言って、読めないんじゃなくて読もうとしてないだけ。

157 名前:NAME IS NULL mailto:sage [2007/12/20(木) 15:00:28 ID:???]
クビにするだのなんだのって勢い良く言うやつに限ってそんな権限は持ってないペーペー

158 名前:NAME IS NULL mailto:sage [2007/12/20(木) 15:42:31 ID:???]
英語が読めない以前に日本語も読めない日本人が増殖中

159 名前:NAME IS NULL mailto:sage [2007/12/20(木) 15:54:10 ID:???]
毎回英語の話題は盛り上がるね。それだけコンプレックス持ってる奴が多いのかな。

160 名前:NAME IS NULL mailto:sage [2007/12/20(木) 16:00:46 ID:???]
多少古いのでも日本語で読めるのがあるなら読めばいいんだよ。
英語の最新版を理解するための予備知識にもなるだろ。
英語が得意でないならなおさら。

仕事なら遊びならなんて線引いてるやつはどっちも中途半端だよ。
仕事で仕入れたネタは遊びで役に立つし、遊びで仕入れたネタは仕事で役にたつんだよ。



161 名前:NAME IS NULL mailto:sage [2007/12/20(木) 16:03:17 ID:???]
>>158
鋭い自己分析ですねw

162 名前:NAME IS NULL mailto:sage [2007/12/20(木) 17:39:16 ID:???]
>>161
俺日本人じゃないし

163 名前:NAME IS NULL mailto:sage [2007/12/21(金) 01:44:28 ID:???]
俺は生粋の日本人ニダ


164 名前:NAME IS NULL mailto:sage [2007/12/21(金) 02:23:15 ID:???]
俺はハワイ在住のロシア人だ

165 名前:NAME IS NULL mailto:sage [2007/12/21(金) 22:44:23 ID:???]
シュールw

166 名前:NAME IS NULL mailto:sage [2007/12/26(水) 11:38:20 ID:???]
SQLite3でMySQLのexplain相当のものは無いのでしょうか?
自分の発行したSQLが問題ないのか確かめたいんですけど。

167 名前:NAME IS NULL mailto:sage [2007/12/26(水) 15:28:36 ID:???]
あれexplain無かったっけ?

168 名前:166 mailto:sage [2007/12/26(水) 15:51:59 ID:???]
SQLiteのexplainは、単に検索結果表示のタイトルの表示方法の指定のようです。
MySQLのexplainは、クエリーの実行内容解析用なので意味合いが全然違うようです。

169 名前:NAME IS NULL mailto:sage [2007/12/26(水) 17:19:28 ID:???]
>>168
??言ってる事が良く分からない
SQLiteのexplainはクエリ解析後のopcodeを表示してくれるよ
opcodeの意味は ttp://www.sqlite.org/opcode.html
少なくとも表示方法の指定などでは無い、何がしたいの?

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 mailto:sage [2007/12/26(水) 23:54:25 ID:???]
explain query plan
てのもある。



171 名前:166 mailto:sage [2007/12/27(木) 10:43:37 ID:???]
>>169
あ、すみません。.explainの方と勘違いしていました。

sqlite> explain select * from user;
Segmentation fault

orz...
SQLite version 3.3.3です...

172 名前:NAME IS NULL mailto:sage [2007/12/27(木) 10:55:47 ID:???]
>>171
うちの環境では再現しないなあ。
おそらく、多くの環境では再現しないと思うので、

* 3.3.3 以降 explain に関するバグフィックスが入って無いか調べる。無ければ、
* SEGV する場合の schema の詳細や OS や SQLite のインストール手順の詳細を晒す
* デバッガ (GDB とか) でデバッグにチャレンジ

173 名前:NAME IS NULL mailto:sage [2007/12/27(木) 13:12:50 ID:???]
>>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 mailto:sage [2007/12/27(木) 13:21:28 ID:???]
>>173
それ以降は、特にSEGVに関する話はないよ。

175 名前:NAME IS NULL mailto:sage [2007/12/30(日) 18:04:46 ID:???]
コンパイルのエラーメッセージすら読めない香具師は、アクセス使っとけ。

176 名前:NAME IS NULL mailto:sage [2008/01/04(金) 13:08:36 ID:???]
sqlite3 on PHP 5をサイトのアクセスログの保管庫に使っているのですが、
エラーログ見るとほぼ毎日のように、database is lockedのエラーがでているのですが、
順序だっていないアクセスが集中するケースには、sqliteはやっぱり弱いのでしょうか。

趣味でやってるサイトなので、多少の漏れは別に構わないっちゃかまわないんですが。
しっかり記録しようと思うなら別のDBに乗り換えた方が良いんでしょうか。

177 名前:NAME IS NULL mailto:sage [2008/01/04(金) 13:41:25 ID:???]
SQLite3 は、複数プロセスから同時に更新はできない (参照はおっけー) ので、
更新の操作が頻繁に発生するケースには弱いかもね。
ロックやエラーの処理をしっかりやってればデータが飛ぶことはないとは思うけど、
パフォーマンスはあまり良くならないかも。

「アクセスログ」の保存方法を工夫するとマシになるかも知れない。
一行一行保存するのは厳しいので、定期的にバッチ処理的にまとめて保存するとか。

178 名前:NAME IS NULL mailto:sage [2008/01/04(金) 15:21:51 ID:???]
ログに保存する専門のプロセスを立てればいくね?

179 名前:176 mailto:sage [2008/01/04(金) 15:59:13 ID:???]
>>177,178

>ロックやエラーの処理をしっかりやってればデータが飛ぶことはないとは思うけど、

う、そうですね..例外処理はエラーを記録するだけしかやってません...

>一行一行保存するのは厳しいので、定期的にバッチ処理的にまとめて保存するとか。
>ログに保存する専門のプロセスを立てればいくね?

生ログをテキストに貯めといて、正規化してDBに入れるのは後でまとめて、
てな感じでしょうか。
その方向でちょと検討してみます。ありがとですた〜

180 名前:NAME IS NULL mailto:sage [2008/01/04(金) 16:13:55 ID:???]
いやそうじゃなくてsyslogdみたいなやつってこと。



181 名前:176 mailto:sage [2008/01/04(金) 17:46:56 ID:???]
PHP(httpd)から直接sqliteを叩かないで、専用プロセスを経由してログればおk
てことですよね><

182 名前:NAME IS NULL mailto:sage [2008/01/04(金) 20:26:20 ID:???]
test

183 名前:NAME IS NULL mailto:sage [2008/01/04(金) 20:31:59 ID:???]
dll版なんだけど、更新競合時のエラーが
sqlite3_stepでSQLITE_BUSY になるか
その前のsqlite3_prepare_v2 でLockedエラーになるか
ランダム感があって困る

184 名前:NAME IS NULL mailto:sage [2008/01/04(金) 23:37:06 ID:???]
WEBで2年近く使ってるけどDBでトラブルが起きなかったのはsqliteだけ
最初は不安だったけどなんか不思議

185 名前:NAME IS NULL mailto:sage [2008/01/05(土) 05:01:03 ID:???]
C#2008とSQLiteを使ってwinアプリを作ろうとしているのですが、
GUIツールを使うと第三者にdbファイル丸見えで困っています。
これを回避できる方法はないのでしょうか?

186 名前:NAME IS NULL mailto:sage [2008/01/05(土) 09:13:56 ID:???]
>>185
具体的になにがどう困っててどうしたいんだ?
どんなファイルフォーマットにしても暗号化しないかぎり第三者にも
データは読めるわけなんで秘匿したいのなら暗号化するしかないと思うが…
# そもそもそのPCを使える人は第三者なのか?

187 名前:NAME IS NULL mailto:sage [2008/01/05(土) 16:43:24 ID:???]
完全な暗号化なんて無理。
メモリの中をのぞくソフトを使われたら終了。

188 名前:NAME IS NULL mailto:sage [2008/01/05(土) 17:20:05 ID:???]
C#からSQLite使う方法を詳しく、、、

189 名前:NAME IS NULL mailto:sage [2008/01/05(土) 19:08:08 ID:???]
Googleで「C# SQLite」って打ち込む。以上。

190 名前:NAME IS NULL mailto:sage [2008/01/05(土) 20:14:58 ID:???]
>>186,187
回答ありがとうございます。第三者って言い方が間違っていました。

複数ユーザで使うソフトなのですが、
GUIツールを使うとユーザAがユーザBのデータを見れてしまうので困っています。
Accessであればdb接続時(mdbを開く時)にパスワードを要求できますが、
SQLiteでは無理なのでしょうか?

C#2008なら簡単に逆コンパイルできてコードを見れてしまうので
dbへの接続パスワードがばれてしまうという点は諦めています。



191 名前:NAME IS NULL mailto:sage [2008/01/05(土) 20:37:27 ID:???]
>>190
あー。そういうときどうすんだろ。
別々にログインして使うならDBファイルにアクセス権限をセットしちゃうとか。そのユーザだけW/R可能に。

192 名前:NAME IS NULL mailto:sage [2008/01/05(土) 21:09:51 ID:???]
>>190
そのDBファイルをユーザーAはフルアクセス、ユーザーBはアクセス拒否に設定すればいいだけだろアホ


193 名前:NAME IS NULL mailto:sage [2008/01/05(土) 21:13:26 ID:???]
>>177
SQLiteで複数のプロセスから更新をかけたいようなケースでは、
各プロセスが直接DBを触るのではなく、DBを管理する専用プロセスを作って
RPCか何かで各プロセスから更新コマンドを送るのが SQLite の作法。


194 名前:NAME IS NULL mailto:sage [2008/01/05(土) 21:28:56 ID:???]
インメモリデータベースは?
とか思ったけど、データを外部ファイルに出力しなきゃいけないし、
そもそも複数ユーザじゃ使えないだよな。

他に考えられる方法は物理的に複数のファイルに分けるとか。
DB1 ユーザAのみ
DB2 ユーザBのみ
DB3 ユーザA,Bともに使える

195 名前:NAME IS NULL mailto:sage [2008/01/05(土) 21:48:51 ID:???]
接続パスワードがばれるのを諦めてるなら結局同じことではないのか

196 名前:NAME IS NULL mailto:sage [2008/01/05(土) 22:15:32 ID:???]
>>190
気休めレベルなら、
・DBファイルはパスワード付きZIPに圧縮して保存。拡張子は適当に変えておく。
・使うときテンポラリフォルダにSQLite3って分からない変な名前で解凍して読み書き。
・ユーザの保存操作時に接続を切ってパスワード付きZIPで圧縮。
・アプリ終了時にテンポラリは掃除。
とか。たしかWindowsのテンポラリって別ユーザから読み取り不可だったよな?


197 名前:NAME IS NULL mailto:sage [2008/01/05(土) 22:44:01 ID:???]
>196
>Windowsのテンポラリ
デフォルトの%TMP%,、%TEMP%はそーらしい。
自分以外にもAdministratorsとSYSTEMにはフルコントロール付いてるけど。
もっとも%TMP%なんて何処指してるか分からんから、
%USERPROFILE%\Local Settings\Tempを直で指定するほーが良いかも


198 名前:190 mailto:sage [2008/01/05(土) 22:56:49 ID:???]
みなさんありがとうございます。
パスワードをかけるにはひと手間かかってしまうようなので、
ユーザごとにdbファイルを分けることにしました。
もう中身見られても気にしません。

199 名前:NAME IS NULL mailto:sage [2008/01/05(土) 23:14:31 ID:???]
VistaなんかはProgram Filesには簡単にアクセスできないらしいからそのほうがいいかもね。

200 名前:NAME IS NULL mailto:sage [2008/01/05(土) 23:21:54 ID:???]
>>198
たぶんそれで正解。隠し事すると手間ばかりかかるもんね。
秘密な情報は金を湯水のように使って管理すべし。



201 名前:NAME IS NULL mailto:sage [2008/01/06(日) 00:08:50 ID:???]
>>193
そんな手の込んだことするくらいなら最初から MySQL や Postgres 使うわな

202 名前:NAME IS NULL mailto:sage [2008/01/06(日) 00:12:53 ID:???]
それでもちゃんとしたRDBMS使う方がよっぽど手の込んだ事だと思う。

203 名前:NAME IS NULL mailto:sage [2008/01/06(日) 23:17:34 ID:???]
>>201
それらじゃ組み込みDBの代替にはならないし。


204 名前:NAME IS NULL mailto:sage [2008/01/07(月) 03:05:05 ID:???]
確かにSQLiteならDBごと分けるってのも
別に荒業ってわけじゃないしいいかも
なるほど

205 名前:NAME IS NULL mailto:sage [2008/01/07(月) 13:08:41 ID:???]
Windows向けだけになるのだろうが、SqlServerCompactEditionがターゲットかぶるんだろうが試してみた人おる?
開発環境、データベースのスケールアップ(Express,普通のSqlServer)に対してはSqlServerのほうがよさげだけど、パフォーマンスなどどないなものかと。
まだ余裕なくて試せてないので教えてエロイ人

206 名前:NAME IS NULL mailto:sage [2008/01/07(月) 17:17:55 ID:???]
何故それをSQLiteのスレで聞くのかね。
SQLServerのスレで聞いてこいよ。

207 名前:NAME IS NULL mailto:sage [2008/01/07(月) 18:44:06 ID:???]
組み込み向け DB 比較スレなんてあっても良いかもね。

208 名前:NAME IS NULL [2008/01/08(火) 10:31:35 ID: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 mailto:sage [2008/01/08(火) 12:41:18 ID:???]
>>208
リークしないと思う理由は何?


210 名前:NAME IS NULL mailto:sage [2008/01/08(火) 12:43:44 ID:???]
> 本当はstd::vector<std::string>を_resultsのかわりに渡して動作してほしいのですが、
> そのような開発を試した方はいませんでしょうか?

とりあえず SQLite の入門書でも読んで API 一覧でも眺めてみたら?
それで何も思いつかないようなら才能ないからプログラミングやめた方がいいよ




211 名前:NAME IS NULL mailto:sage [2008/01/08(火) 13:32:29 ID:???]
sqlite_free_table()が何のためにあるのか解らないなら、Cを1から勉強しなおせ

212 名前:208 mailto:sage [2008/01/08(火) 17:41:27 ID:???]
>>209
SQLite内で_resultsがnullポインタをさしていない場合に、
_nrowや_ncolを見て、その値によってはfreeやreallocなどでうまく縮めてくれているのかなぁと。
そんな親切なことないですかね。

>>210
ttp://www.3rd-impact.net/Document/SQLite/Translation/readme_sqlite_tutorial/
を読むと、いったんchar **_resultsからvector<string>にコピーすることで
安全性を保っているようですが、とてもデータが膨大なので直接vector<vector<string>>に
入れたいです。
また、**_resultsの部分に直接vector<vector<string>>を渡してもうまくいくと、
Effective STLに記述がありましたが、これは要素数が変わらない場合限定なので使えません。

213 名前:NAME IS NULL mailto:sage [2008/01/08(火) 19:54:12 ID:???]
もし既存の実装でそういうのが見つからないのであれば、
sqlite-2.8.17/src/table.c を参考にして自作するとかかな。

214 名前:NAME IS NULL mailto:sage [2008/01/08(火) 20:29:04 ID:???]
>>212
オープンソースなんだから sqlite_get_table() のソースなどいくらでも参照改変できるわけだが


215 名前:NAME IS NULL mailto:sage [2008/01/08(火) 20:30:28 ID:???]
>>212
> また、**_resultsの部分に直接vector<vector<string>>を渡してもうまくいくと、
> Effective STLに記述がありましたが

本気でそう思うんなら今すぐプログラミングやめれ、頼むから


216 名前:NAME IS NULL mailto:sage [2008/01/09(水) 00:47:15 ID:???]
ログの整合性は、ログ取り用のテーブルと、永続化のテーブルを分ければよくね?
今弄ってる業務システム(否SQLiteだが)がそんな感じで設計されている。
そもそもデータベースなんだから、タイムスタンプさえ気にしてれば多少遅延したり、ログ的に前後しても、SELECTしたときにタイムスタンプでソートすればいいだけのような気もするが。
ミドルウェアがしょぼくてバッファなしで取りこぼすのは設計的に論外だが。

217 名前:NAME IS NULL mailto:sage [2008/01/09(水) 09:58:59 ID:???]
>>212
> SQLite内で_resultsがnullポインタをさしていない場合に、
> _nrowや_ncolを見て、その値によってはfreeやreallocなどでうまく縮めてくれているのかなぁと。
> そんな親切なことないですかね。

もしもそんな仕様だったなら、
_results を null で初期化してない >>208 のコードではえらいことが起こるような。

218 名前:208 mailto:sage [2008/01/09(水) 11:49:09 ID:???]
改変してみた人はいなさそうですね・・・。需要はありそうな気がしますが。
自分で作成してみます。ありがとうございました。

219 名前:NAME IS NULL mailto:sage [2008/01/09(水) 12:21:53 ID:???]
208はC++には向いてない人だと思う

220 名前:NAME IS NULL [2008/01/09(水) 14:12:12 ID:n34+hg7O]
>>218
いや、需要はないから安心してくれ。
なんで需要がないのかは、そのうち理解できると思うよ。




221 名前:NAME IS NULL mailto:sage [2008/01/09(水) 14:55:06 ID:???]
>>212
扱うデータがとても膨大になるんであれば、
sqlite_exec を直接使う方の関数セットを使って処理した方が良いんじゃないかなあ。
sqlite_get_table はもっと小さな結果セットをカジュアルに扱うのに特化した
ユーティリティラッパー関数なんじゃないかと思う。

222 名前:208 mailto:sage [2008/01/09(水) 15:04:49 ID:???]
>>219
すみません。。C++は私もまだまだ未熟だと思ってます。

>>220
需要がない理由は教えて欲しいです。
C++ + SQLite というのがそもそも少数派ということでしょうか。
簡単さをとるならC++ではなくPHPなどを選択するし、
パフォーマンスをとるならSQLiteではなくその他のデータベースを選択するということでしょうか?

223 名前:NAME IS NULL mailto:sage [2008/01/09(水) 16:06:47 ID:???]
>>222
ちゃうちゃう、>>221も言ってるけど膨大なデータ扱うなら sqlite_get_table は使わんのよ、普通。
だから需要無いと言ってる訳。

224 名前:NAME IS NULL mailto:sage [2008/01/09(水) 16:54:24 ID:???]
それ以前に、vector<vector<string> > なんてデータ構造を使ってる時点で
池沼丸出しなんだが


225 名前:NAME IS NULL mailto:sage [2008/01/09(水) 16:57:52 ID:???]
>>221
本当に膨大なデータを処理するなら、SQLite 2.8 なら
sqlite_compile と sqlite_step、3.0 以降なら
sqlite3_prepare_v2 と sqlite3_step を使うべきだし


226 名前:221 mailto:sage [2008/01/09(水) 17:59:33 ID:???]
>>225
うぅ、これは失礼、仰る通り。
漏れもそうしていたんだけど、最近 C API 使ってなかったので忘れていた・・・

227 名前:208 mailto:sage [2008/01/09(水) 19:27:40 ID:???]
>>221
>>223
>>225
なるほどー。
やろうとしていることは、700万件ぐらいあるデータのなかから条件にあう
5万件全部をGUIのTable(Excelみたいな状態)で表示したいです。
さらに、その5万件を全部plotした散布図を作成するため、不本意ながら
vector<vector<string> >にいったん格納して、それをGUIのTableに渡しています。
もっとよい方法がありそうでしょうか?
sqlite_compile と sqlite_stepですと、一気に全部表示するのが厳しくなってしまいそうで。。

228 名前:NAME IS NULL mailto:sage [2008/01/09(水) 19:33:30 ID:???]
>>227
おれならCでユーティリティを2本作って本体アプリから呼ぶなぁ。
・元DBから5万件拾ってテンポラリDBファイルに出力するEXE。
・テンポラリDBファイルを読んで作図、画像ファイルに落とすEXE。
こうしとけば汎用もあっていろいろ使えそうじゃん。

229 名前:NAME IS NULL mailto:sage [2008/01/09(水) 19:51:41 ID:???]
>>227
sqlite_get_gable が5万件のデータをメモリにコピーして、
それをお前のコードが vector<vector<string> >にコピーして、
さらに GUI の Table とやらがそれをコピーして保持して
さらにそのデータを画面に表示する(ためにコピーする)
という壮大なコピーの物語に何の疑問も持たないのかね

お前の言うケースなら、sqlite_get_table で出てきたバッファを
そのまま GUI の Table とやらに渡し、そのままの形で
処理して表示するのが一番効率がいい。

vector<vector<string> >なんて介するだけメモリと CPU の無駄。


230 名前:208 mailto:sage [2008/01/09(水) 20:16:58 ID:???]
>>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 mailto:sage [2008/01/09(水) 20:31:49 ID:???]
>>230
vector<vector<string> >をソートするより SQLite にソートさせた方が
圧倒的に高速なわけだが

> GUIのTableは直接データを読むので。

「vector<vector<string> >を渡す」時点で5万件のデータのコピーが発生するんだが。


232 名前:208 mailto:sage [2008/01/09(水) 20:36:44 ID:???]
>>231
ソートのたびにクエリ投げてデータをバッファに読み直すという意味??

>「vector<vector<string> >を渡す」時点で5万件のデータのコピーが発生するんだが。
リファレンス渡しすればそんなことないと思いますが・・・。

233 名前:NAME IS NULL mailto:sage [2008/01/09(水) 20:41:28 ID:???]
>>232
リファレンス渡しだろうが値渡しだろうが、最終的にデータが格納される場所にコピーされるわけで。


234 名前:NAME IS NULL mailto:sage [2008/01/09(水) 20:43:20 ID:???]
俺なら、最初にメモリ上に一時テーブル作って、そこに5万件を読み込む
表なら、表示する部分だけ一時テーブルから読み込む
散布図も一時テーブルから読み込みつつ計算もしくは表示する
こうすると、ソートとかにSQLが使える

たしかqlite_get_tableはsqlite_stepとかラップしてるだけだったはず

235 名前:NAME IS NULL mailto:sage [2008/01/09(水) 20:53:45 ID:???]
>>230
5万件もある表ならスクロールバー位置で表示領域を計算して、
必要な分だけその都度SELECTしてビューに出せば?
5万件くらいならLIMIT-OFFSETも一瞬だろうし。
作図は別スレッドか別プロセスで、sqlite_stepでベタ読みして出来上がり次第に表示するとか。
あれ。SQLite2ってLIMIT-OFFSETないんだっけ?

236 名前:208 mailto:sage [2008/01/10(木) 11:24:03 ID:???]
>>234
>>235
どうやらこれらに尽きていますね。。sqlite2でもlimit、offsetは使えます。
じわじわスクロールするときに画面がちらつきそうですが、
効率のbenefitの方が圧倒的に大きいですよね。

今使っているGUIのTable(FLTKのFL_Table)が一部分だけを表示して
スクロールバーをうまく扱うのが厳しそうなので、また色々考えて見ます。

みなさん色々アドバイスありがとうございました。

237 名前:NAME IS NULL mailto:sage [2008/01/10(木) 13:16:27 ID:???]
これってトランザクションとかはちゃんとはれるの?
あと複数のプロセスからデータファイルを開かれた時レコードの排他とかもちゃんとできる?

238 名前:NAME IS NULL mailto:sage [2008/01/10(木) 14:43:33 ID:???]
簡単に試せるんだからやってみればいいじゃん。
サーバ起動するとか無いんだし。

239 名前:NAME IS NULL mailto:sage [2008/01/10(木) 15:25:41 ID:???]
公式サイトにデカデカと書いてあるのにね

240 名前:NAME IS NULL mailto:sage [2008/01/10(木) 19:04:40 ID:???]
>>237
・できる
・できる



241 名前:NAME IS NULL mailto:sage [2008/01/10(木) 21:35:26 ID:???]
行レベルでロックされるのかテーブル全体がロックされるのか知りたい

242 名前:NAME IS NULL mailto:sage [2008/01/10(木) 21:54:07 ID:???]
ファイル単位なんじゃね?

243 名前:NAME IS NULL mailto:sage [2008/01/10(木) 22:38:01 ID:???]
>>236
Fl_Tableなんてクラスはじめて見たけど、マニュアル見たらdraw_cell()あるじゃん。
以下、使ったことないのでカンで書くけど。
テーブルに行数さえセットしておけばセル表示のときにコレ呼ばれるんでしょ。
引数に行番号と列番号があるから、これで対象データを特定して表示するだけだよ。
スクロールバーとか関係ない。ちょっとしたキャッシュ機構つけるくらいでOKでしょ。

244 名前:NAME IS NULL mailto:sage [2008/01/10(木) 22:44:03 ID:???]
>>243
親切にも程がある。
その手の親切は>>208みたいな奴には逆効果で、
かえって何も学ばなくなるから注意な。


245 名前:NAME IS NULL mailto:sage [2008/01/10(木) 23:14:19 ID:???]
>>244
親切じゃなくて俺の趣味。それにDBの大量データの処理で
vector<vector<string>>を使っちゃうセンスをほっとくと
変なプログラム量産してSQLiteの評判を落としかねん。

246 名前:NAME IS NULL mailto:sage [2008/01/11(金) 00:16:33 ID:???]
>>244
>>208みたいな奴がますます馬鹿になっていい気味じゃないかw

247 名前:NAME IS NULL mailto:sage [2008/01/13(日) 22:00:30 ID:???]
vb2005から sqlite3使う方法の解説サイトないですか?

248 名前:NAME IS NULL mailto:sage [2008/01/14(月) 00:23:41 ID:???]
>>247
おまえのPCはGoogleにプロキシ規制でもかかってんのか?

249 名前:NAME IS NULL mailto:sage [2008/01/14(月) 00:31:39 ID:???]
>>248
よく分かったな。その通りなんだ

250 名前:NAME IS NULL mailto:sage [2008/01/14(月) 01:24:52 ID:???]
マジな話、個人サイトと判定したサイトは
軒並み却下してくれる企業もあるしな
マイナーなライブラリとか調べてるときは
「暇な個人の実験結果」こそ宝の山だってのに……

とは言えそんな企業がvb2005からsqlite3を使うなんてことを
業務でやるわきゃあないが。ということで勝手に苦しめ >247



251 名前:NAME IS NULL mailto:sage [2008/01/14(月) 01:48:49 ID:???]
個人のページに、フォーマットするページがあることが多いからな。
ウェブも先読みして、駆除するアンチウイルスが主流にならないと対処無理。

252 名前:NAME IS NULL mailto:sage [2008/01/14(月) 01:50:54 ID:???]
>>251
ふつうじゃないか?

253 名前:NAME IS NULL mailto:sage [2008/01/14(月) 01:54:20 ID:???]
多いのか?w

254 名前:NAME IS NULL mailto:sage [2008/01/14(月) 02:25:17 ID:???]
>>250
2chにアクセスできる時点で頭隠して尻隠さずな企業だなw

255 名前:NAME IS NULL mailto:sage [2008/01/14(月) 02:26:56 ID:???]
>>251
正確には「フォーマットしようとする」ページだな。
その程度で本当にフォーマットされるような奴は生きていくのが大変だろうな。

256 名前:NAME IS NULL mailto:sage [2008/01/14(月) 03:26:27 ID:???]
>>253
主流の方だよw

257 名前:NAME IS NULL mailto:sage [2008/01/14(月) 03:37:34 ID:???]
SQLite 3.5.4 → 3.5.5 は歴代で最も大規模な変更になる とDRH が言ってるな。
VM をスタックマシンからレジスタマシンに変えるらしい。

gdgd にならなきゃいいが…


258 名前:NAME IS NULL mailto:sage [2008/01/14(月) 04:08:54 ID:???]
別にそこまでする必要あるのけ?今でも十分早いだお

259 名前:NAME IS NULL mailto:sage [2008/01/14(月) 04:12:58 ID:???]
と思ったけど、トランザクションのネストとか、外部キーとか
ALTER TABLEとかできるようになるならいいかなと思えてきた。
おらワクワクしてきたぞ

260 名前:NAME IS NULL mailto:sage [2008/01/14(月) 04:57:32 ID:???]
>>259
> トランザクションのネスト

 組み込みDBじゃほぼ必要ない。

> 外部キー

 トリガー書け

> ALTER TABLE

 カラムの追加だけならできるぞ




261 名前:NAME IS NULL mailto:sage [2008/01/14(月) 09:18:58 ID:???]
SIMDにも対応するのか?

262 名前:NAME IS NULL mailto:sage [2008/01/14(月) 09:32:28 ID:???]
そんな変更入れるなら3.6とか4.0とかにしようぜ

> > 外部キー
> トリガー書け
書いたことあるがめんどい

REFERENCESなら一行なのに、トリガーだと数行×4個必要なのはでかい
しかも外部キーと完全に同じじゃないし

263 名前:NAME IS NULL mailto:sage [2008/01/14(月) 12:54:47 ID:???]
おまえられべるたかいな

264 名前:NAME IS NULL mailto:sage [2008/01/14(月) 23:52:19 ID:???]
GB級データなら別のRDBMS検討しろ、って公式に書いてあるけど。
リードオンリーでいいから、でかいDBファイルもサクっと開けるようにならんかなぁ。

265 名前:NAME IS NULL mailto:sage [2008/01/15(火) 01:17:20 ID:???]
数十GBになったが別にそんなに遅かった記憶がないな。開くだけなら。

266 名前:NAME IS NULL mailto:sage [2008/01/15(火) 01:30:14 ID:???]
俺も数 GB の DB 作ったことがあるがまあ取り立てて問題なかったな。
ただ、CREATE INDEX は遅かった。

267 名前:NAME IS NULL mailto:sage [2008/01/15(火) 07:00:17 ID:???]
あごめん、まちがえた。最初にSELECTするときだ。
特にSELECT COUNT(*)とかで全件舐めると、
BITMAPほにゃららを作りに行って遅くなるよな?

268 名前:NAME IS NULL mailto:sage [2008/01/15(火) 18:48:30 ID:???]
このDBってキャッシュとかバリバリ効くの?

269 名前:NAME IS NULL mailto:sage [2008/01/15(火) 19:14:43 ID:???]
est

270 名前:NAME IS NULL mailto:sage [2008/01/17(木) 19:05:41 ID:???]
>>257のソースはこれか
ttp://www.mail-archive.com/sqlite-users%40sqlite.org/msg30619.html
インターフェースに変更がないから、メジャーバージョンを変えないと。



271 名前:NAME IS NULL mailto:sage [2008/01/18(金) 23:55:54 ID:???]
すみません、質問です
このSqliteというものにはPEARのmysqlを対象とした機能は使えないですよね?
ADODBとか。ダメなら同様の便利な機能があればありがたいんですが
あと、クダ質すみませんが商用だと有料ですか?
(過去ログも開けないしググってもよくわからなかったので聞きました)

272 名前:NAME IS NULL mailto:sage [2008/01/19(土) 00:50:49 ID:???]
商用だろうがなんだろうが無料
1番目の質問は知らん

273 名前:NAME IS NULL mailto:sage [2008/01/19(土) 07:23:09 ID:???]
SQLiteのODBCドライバがあればOK

274 名前:NAME IS NULL mailto:sage [2008/01/19(土) 11:42:00 ID:???]
>>272-273
ありがとう、あまり本ないみたいですがやる気が出てきました
サンキューです

275 名前:素人 [2008/01/20(日) 16:54:16 ID:1uZgVInC]
現在、WEBのショッピングサイトを勉強の為、作成しています。

1、ソースファイルの文字コードはEUC
2、PHPを使用。

SQLiteを使って商品を検索してもうまく結果がでません。
英語の商品は検索できるのですが、日本語だとひっかかりません。

例)
1、sonyパソコン
2、ソニーパソコン
上記2点がテーブルに格納されているとして、"s%"で検索すると1番はひっかかるのですが、"ソ%"で検索しても2番がひっかかりません。
かれこれ2週間悩んでいるのですが解決方法が見つからなかったので質問しました。
どなたかご教授頂けませんでしょうか。


276 名前:NAME IS NULL mailto:sage [2008/01/20(日) 17:06:38 ID:???]
質問です。
ある二つの同じ形式のテーブルがあって、それらの FULL OUTER JOIN の結果が
ほしいのだけど、sqlite では FULL OUTER JOIN が omit されていてとれないです。

代替手段をおしえてください。

ちなみにフリーソフト作るのに使いはじめたのでデータベース自体初めてです。


277 名前:NAME IS NULL [2008/01/20(日) 18:26:34 ID:L9GIGLVN]
ガリレイの相対性原理も、アインシュタインの相対性理論も
破棄されました。!

21世紀の科学、物理学は支配の法則が支配する!!!!!

home9.highway.ne.jp/cym10262/fenomina.html

278 名前:276 mailto:sage [2008/01/20(日) 21:38:02 ID:???]
\(^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 mailto:sage [2008/01/20(日) 22:18:47 ID:???]
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

280 名前:NAME IS NULL mailto:sage [2008/01/21(月) 21:22:51 ID:???]
>>275
DBに入れる文字列がSJISとかEUCだと、日本語文字列でLIKEやGLOBが引っかからないパターンがある
UTF-8に変換しる!



281 名前:NAME IS NULL mailto:sage [2008/01/22(火) 23:50:19 ID:???]
% 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 mailto:sage [2008/01/23(水) 00:23:24 ID:???]
どうせビッグエンディアンとかリトルエンディアンとかそんなオチだろ


283 名前:NAME IS NULL mailto:sage [2008/01/23(水) 00:35:19 ID:???]
まさかPHPのソースだけEUC-JPで書いて
Content-type: text/html;encoding=utf-8
とかで送り出してないよな……?


284 名前:NAME IS NULL mailto:sage [2008/01/23(水) 00:35:52 ID:???]
>>281
本題とは関係ないけど、コレ何?シェル?

285 名前:NAME IS NULL mailto:sage [2008/01/23(水) 06:16:32 ID:???]
>>284
どことなく、 Ruby に見える。


286 名前:NAME IS NULL mailto:sage [2008/01/23(水) 08:12:26 ID:???]
tcl じゃね?

287 名前:NAME IS NULL mailto:sage [2008/01/23(水) 13:35:10 ID:???]
Tclに一票

288 名前:284 mailto:sage [2008/01/23(水) 15:39:25 ID:???]
tarball の test のスクリプトを見たら、確かにこれと同じ文法っぽいですね。
tcl は十年くらい前に一週間程度遊んでみた以来だったので忘却の彼方でした・・・

289 名前:NAME IS NULL mailto:sage [2008/01/26(土) 01:13:05 ID:???]
おまいら、日付ってどうやって保存してる?

290 名前:NAME IS NULL mailto:sage [2008/01/26(土) 01:51:19 ID:???]
誰か評価版のDBソフト使った人いませんかね?あ、雑誌の付録についてる奴。



291 名前:NAME IS NULL mailto:sage [2008/01/26(土) 02:31:01 ID:???]
なぜここで聞く

292 名前:NAME IS NULL mailto:sage [2008/01/26(土) 02:47:24 ID:???]
誰か評価版のDBソフト使った人いませんかね?あ、雑誌の付録についてる奴。

293 名前:NAME IS NULL mailto:sage [2008/01/26(土) 05:55:13 ID:???]
>>289
プログラムでYYYY-MM-DD HH:MM:SSにフォーマットしてテキストで保存するだろ。
SELECT後はプログラムでsplitするだろ。

294 名前:NAME IS NULL mailto:sage [2008/01/26(土) 12:01:17 ID:???]
DBソフトってフラッピーかよw

295 名前:NAME IS NULL mailto:sage [2008/01/26(土) 13:29:00 ID:???]
>>293
テキストで保存って頭大丈夫か?

>>289
julianday でググれ


296 名前:NAME IS NULL mailto:sage [2008/01/26(土) 13:42:22 ID:???]
主にどういう使い方するかで適したやり方は変わるんだから、
テキストだって頭おかしくはないと思うけどな。
「5月だけ」とか選ぶのが主だったら年月日を別個に持った方が良いかもしれないし。

297 名前:NAME IS NULL mailto:sage [2008/01/26(土) 14:23:33 ID:???]
結合したテキストが便利とは思えんな。
「年」「月」「日」みたいに別項目にするならまだ理解可能。

298 名前:NAME IS NULL mailto:sage [2008/01/26(土) 14:36:08 ID:???]
まあ、確かに利点は思いつかないな・・・。

299 名前:NAME IS NULL mailto:sage [2008/01/26(土) 16:50:25 ID:???]
>>289
TEXTでYYYYMMDDにして保存。

300 名前:NAME IS NULL mailto:sage [2008/01/26(土) 17:17:50 ID:???]
SQLiteなんか使ってて物足りなくないのでつか?




301 名前:NAME IS NULL mailto:sage [2008/01/26(土) 17:37:48 ID:???]
別にどんな用途でもsqliteでやるってわけじゃないしな

302 名前:NAME IS NULL mailto:sage [2008/01/26(土) 17:47:46 ID:???]
>>296
YYYYMMDD形式で持ってたら、(cast(YYYYMMDD as int)/100) - (cast(YYYYMMDD as int)/10000)*100
で月だけ取り出せるよ!

303 名前:NAME IS NULL mailto:sage [2008/01/26(土) 17:52:19 ID:???]
月で絞るのが主な仕事だったら年月日バラで持って月にインデックスでもつけた方がよくね?

304 名前:NAME IS NULL mailto:sage [2008/01/26(土) 17:59:32 ID:???]
日時で持ってたら、タイムゾーン変わったときどうすんねん、
とか考えはじめたらめんどくさくなったので今日はもう寝ます。

305 名前:NAME IS NULL mailto:sage [2008/01/26(土) 18:26:00 ID:???]
タイムゾーンなんていらない

306 名前:NAME IS NULL mailto:sage [2008/01/26(土) 19:43:18 ID:???]
普通は unix time そのまま入れるよな。
YYYY-MM-DD HH:MM:SS で入れてた方が便利ってケースもなくはないだろうがレアケースだろ

>>303
滅茶苦茶不自然なコードだなw

307 名前:NAME IS NULL mailto:sage [2008/01/26(土) 19:47:02 ID:???]
>>306
>>302みたいなことしてまで月を取り出すならって事だよ

308 名前:NAME IS NULL mailto:sage [2008/01/26(土) 20:21:22 ID:???]
>>306
普通はUNIXTIMEなんかで入れたりしないだろ常考。つーか
YYYY-MM-DD HH:MM:SS のままの方が検索では便利だろ。
年で検索、日で検索、時刻で検索 などはそのままできるし
なによりこの形式がsqliteでは標準だしな。
ついでにDB見て直接日時がわかるのもいい。

309 名前:NAME IS NULL mailto:sage [2008/01/26(土) 20:42:54 ID:???]
>>308
> なによりこの形式がsqliteでは標準だしな。

そうなん?

310 名前:NAME IS NULL mailto:sage [2008/01/26(土) 21:06:23 ID:???]
UNIXタイムだと32bitの壁をやぶれない



311 名前:NAME IS NULL mailto:sage [2008/01/26(土) 21:28:35 ID:???]
>>308
どういう普通だよ?www

312 名前:NAME IS NULL mailto:sage [2008/01/26(土) 21:33:32 ID:???]
ttp://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions

でもってUTCで持つようにしといてローカルタイムに変換

313 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:26:58 ID:???]
>>309
SQLite の組み込み関数が内部的に使っている日付形式は julianday。
sqlite-users で開発者達が推奨してるのは julianday を real で格納すること。


314 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:30:32 ID:???]
>>308
>年で検索、日で検索、時刻で検索 などはそのままできるし

まさか like で文字列マッチングするつもりか?
100万件のデータがあったら100万回のマッチングになって
まるっきり実用的な速度は出ないけど


315 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:31:30 ID:???]
日付。よほど特殊な用途ならともかく。
普通はドライバに任せとけば良いんじゃね?
そうすりゃ後でDB変えるときでもプログラムそのままでいいし。
Cでゴリゴリ書くのは知らないけど。

316 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:31:58 ID:???]
>>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 mailto:sage [2008/01/26(土) 22:38:37 ID:???]
>>307
スマソ、>>303は誤爆。漏れも>>302のつもりで書いた。

318 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:40:43 ID:???]
>>308
> YYYY-MM-DD HH:MM:SS のままの方が検索では便利だろ。
> 年で検索、日で検索、時刻で検索 などはそのままできるし

それだとインデックスがまるで効かないのであ?

319 名前:NAME IS NULL mailto:sage [2008/01/26(土) 22:46:36 ID:???]
>>318
そんな高度wなことがわかるような奴じゃない事くらい文面みればわかるだろw


320 名前:NAME IS NULL mailto:sage [2008/01/26(土) 23:02:48 ID:???]
YYYYMMDDが整数値だったら、YYYYMMDD/100 - (YYYYMMDD/10000)*100
で月だけ取り出せるよ!



321 名前:NAME IS NULL mailto:sage [2008/01/27(日) 21:53:28 ID:???]
>>318
LIKE %でもインデックスは効くよ

322 名前:NAME IS NULL mailto:sage [2008/01/27(日) 22:18:00 ID:???]
>>321
hoge% なら効くけど
%hoge だと効かないのは知ってるか?

323 名前:NAME IS NULL mailto:sage [2008/01/27(日) 23:20:14 ID:???]
時間を文字列化したSTRINGとの比較と、juliandayを入れたREALの比較、どっちが速いんだろう。

324 名前:NAME IS NULL mailto:sage [2008/01/27(日) 23:30:42 ID:???]
>323
こっちが速そうだ、ならなんぼでも妄想できるが
やっぱ実測せんとでしょう
ということで任せた

325 名前:NAME IS NULL mailto:sage [2008/01/27(日) 23:57:48 ID:???]
>>321
SQLite では LIKE にインデックスを使わせるには>>322に加えて
さらに2つの制約があるんだが、もちろん知ってて言ってるんだろうな?


326 名前:NAME IS NULL mailto:sage [2008/01/28(月) 00:31:03 ID:???]
>>322
知ってるけど、それがどうかしたか? という話になる。

%hogeを使う条件は、つまりこの場合だと
たとえば時刻部分のみ取り出しということになるが
unixtimeで保存したテーブルではどういう処理になるんだ?
86400で割った余りでも使うのか? インデックスは効かないぞ?
そういう検索条件があるなら日付と時刻をわけるだろ。
これはunixtimeだろうと日時表現だろうと変わらない。

327 名前:NAME IS NULL mailto:sage [2008/01/28(月) 00:50:27 ID:???]
自説を曲げる気のない人と議論しても無駄だと思います

328 名前:NAME IS NULL mailto:sage [2008/01/28(月) 02:10:36 ID:???]
>>326
両方ともインデックスがきくケースに限定したとしよう。

大文字小文字を区別しない文字列マッチングと
32ビット整数の単純比較

さて、どっちが速いでしょう


329 名前:NAME IS NULL mailto:sage [2008/01/28(月) 03:44:39 ID:???]
>>326
YYYYMMDDHHMMSS 文字列格納時において
2008/01/28 00:31:03 からその24時間後までを SELECT する SQL を教えてくれるかな

330 名前:NAME IS NULL mailto:sage [2008/01/28(月) 10:55:19 ID:???]
>>328
インデックスが効く長さでは同じ速度
効かない長さなら文字列の方が倍遅い



331 名前:NAME IS NULL mailto:sage [2008/01/28(月) 14:40:54 ID:???]
>>324

332 名前:NAME IS NULL mailto:sage [2008/01/28(月) 21:22:42 ID:???]
>>325
教えろ。なんなのこのスレの知識を小出しにしつつ
相手の技量を計ろうとするようなオタクっぽさは・・・。

333 名前:NAME IS NULL mailto:sage [2008/01/29(火) 00:48:12 ID:???]
>>332
1. LIKE 'hoge%' の形式であること
2. 対象のカラムが COLLATE NOCASE 宣言されていること
3. ESCAPE 指定がされていないこと


334 名前:NAME IS NULL mailto:sage [2008/01/29(火) 01:04:15 ID:???]
>>332
ここのスレにカキコするのは基本的にオタクだから無問題

335 名前:NAME IS NULL mailto:sage [2008/01/29(火) 09:15:18 ID:???]
まぁunixtime使うとかどうでもいい話だしな
正直なところ、このチューニングはパレート的に
大して効果の無い8割の努力だからな

336 名前:NAME IS NULL mailto:sage [2008/01/29(火) 21:39:58 ID:???]
>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 mailto:sage [2008/01/29(火) 22:08:44 ID:???]
betweenは?

338 名前:NAME IS NULL mailto:sage [2008/01/29(火) 22:26:24 ID:???]
ロジックを一本化したいのでたいていの場合betweenは使わない

339 名前:NAME IS NULL mailto:sage [2008/01/29(火) 22:32:02 ID:???]
>>336
'2008/01/28 00:31:03' から '2008/01/29 00:31:02' はどうやって導出するの?

340 名前:NAME IS NULL mailto:sage [2008/01/29(火) 22:34:28 ID:???]
>>339
細かいヤシだな。オタクか?



341 名前:NAME IS NULL mailto:sage [2008/01/29(火) 22:36:34 ID:???]
細かいこと気にしない奴はプログラムなんて書かないほうがいいよ

342 名前:NAME IS NULL mailto:sage [2008/01/29(火) 23:01:39 ID:???]
>>339
それはクエリーを作るときに計算すればいいじゃん。
どのみち動作速度には関係ないし。

それとも、導出方法がわからないから知りたいの?

343 名前:NAME IS NULL mailto:sage [2008/01/29(火) 23:18:35 ID:???]
>>338
> ロジックを一本化したいので
言葉が足りてなくて意味不明

344 名前:NAME IS NULL mailto:sage [2008/01/30(水) 02:47:36 ID:???]
>>339
where hoge >= '2008/01/28 00:31:03' and hoge < '2008/01/29 00:31:03'

345 名前:NAME IS NULL mailto:sage [2008/01/30(水) 03:02:37 ID:???]
>>343
・○○以上○○以下
・○○以上
・○○以下
これらをバラバラに書くんじゃなくて、

・○○以上
・○○以下
の組み合わせで表現したいので、

346 名前:NAME IS NULL mailto:sage [2008/01/30(水) 11:27:05 ID:???]
一本化なら全部betweenで表記するだろ

347 名前:NAME IS NULL mailto:sage [2008/01/30(水) 11:59:52 ID:???]
>>346
・○○以上
・○○以下
の指定をかんがえてるんじゃね?
全部whereで書いときたいってことかね

おりはrubyでSQL文つくるとき
あんま深くかんがえずにbetween使わずにwhereだけで書いてるなぁ
between推す理由ってなんかあんの?

348 名前:NAME IS NULL mailto:sage [2008/01/30(水) 12:48:19 ID:???]
ダイクストラの講演で≧は>よりも非効率だと主張した人を思い出した。

349 名前:NAME IS NULL mailto:sage [2008/01/30(水) 17:14:48 ID:???]
>>345
SQL文生成ロジックの一本化ね
理解した

>>347
一般的にbetweenの方が効率的に絞り込める
個々のDBでそれぞれどうなのかは知らないが

350 名前:NAME IS NULL mailto:sage [2008/01/30(水) 17:35:37 ID:???]
>>329>>339 の質問って、本質的に何か違いがあるの?



351 名前:NAME IS NULL mailto:sage [2008/01/30(水) 20:20:12 ID:???]
>>349
ありがとう、おぼえておくよ
あとsqliteで使う機会があったら比較してみるよ

352 名前:339 mailto:sage [2008/01/30(水) 20:31:28 ID:???]
>>342
知ってるけどちょっと面倒くさい方法しか思いつかないから、
>>336ならとても簡単な方法を知ってるんだろうなと思って。
どうやるの?

>>350
意味がわからないなら言い換えてあげよう。
任意の YYYY/MM/DD HH:MM:SS からその24時間後までを SELECT する SQL は?

353 名前:NAME IS NULL mailto:sage [2008/01/30(水) 20:34:44 ID:???]
>>347
> between推す理由ってなんかあんの?

www.geocities.jp/mickindex/database/db_optimize.html#LocalLink2
oracle.se-free.com/tuning/B1_where.html
特定の範囲を SELECT したいなら BETWEEN を使うべき。

354 名前:NAME IS NULL mailto:sage [2008/01/30(水) 21:51:29 ID:???]
>>352
ひょっとして
sqlite> select datetime("2008-01-01 12:00:00",
...> "23 hour",
...> "59 minute",
...> "59 second");
2008-01-02 11:59:59

こういうことを聞きたいのか?

355 名前:352 mailto:sage [2008/01/31(木) 02:15:34 ID:???]
>>354
それそれ。
それならあんまり面倒くさくもなさそうだね。

356 名前:350 mailto:sage [2008/01/31(木) 11:17:09 ID:???]
>>352
ああ!そういうことか。やっと文脈がわかった。

>>339 の質問の仕方が悪いせいで >>344 も的外れな回答をしてたのね。

357 名前:NAME IS NULL mailto:sage [2008/01/31(木) 22:29:41 ID:???]
予定表管理システム的なのをDBで管理したいのですが、
DBを作るときはどのようにやるのが一番いいですかね?
一応月ごとにdbファイルを分けて、ひとつのdbファイルの中にはuseridと1〜31日までの出勤予定と退勤予定をいれようと考えてるのですが、これではフィールドが63個となってなんか効率の悪いような気がします。
出勤予定と退勤予定を分けるのは、10-20みたくTEXTで保存するとWHERE intime>10 AND outtime<11みたく指定できなくなってしまうのではないかと思ってなのですが。
知恵を貸してくれませんか?

358 名前:NAME IS NULL mailto:sage [2008/01/31(木) 22:36:50 ID:???]
>>357
SQLiteを使う前に、まず正規化の勉強をしようぜ

359 名前:NAME IS NULL mailto:sage [2008/01/31(木) 22:40:13 ID:???]
1個のDBの中に(userid,日付,出勤予定,退勤予定)なんて表があればいんじゃね?

360 名前:NAME IS NULL mailto:sage [2008/02/01(金) 01:34:22 ID:???]
>>357
DBとExcelが区別できるくらいの頭があるんなら、
それを生かして最低限の知識を仕入れたらいいじゃない。
適当なデータモデリング本を1冊と、
軽い実例集として「楽々ERDレッスン」とか読んでみたら。



361 名前:NAME IS NULL mailto:sage [2008/02/01(金) 01:58:32 ID:???]
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 mailto:sage [2008/02/01(金) 11:03:34 ID:???]
3.5.5北

363 名前:NAME IS NULL mailto:sage [2008/02/01(金) 11:21:40 ID:???]
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 mailto:sage [2008/02/01(金) 15:20:01 ID:???]
ほんとにやったんだ……

365 名前:NAME IS NULL mailto:sage [2008/02/01(金) 18:43:19 ID:???]
速くなるのか

366 名前:NAME IS NULL mailto:sage [2008/02/01(金) 18:44:13 ID:???]
だれか速度検証よろしく

367 名前:NAME IS NULL mailto:sage [2008/02/01(金) 18:49:21 ID:???]
どんなケースがいい?

368 名前:NAME IS NULL mailto:sage [2008/02/01(金) 21:52:12 ID:???]
テストの時間を計ってみてはどうだろうか・・・

369 名前:NAME IS NULL mailto:sage [2008/02/01(金) 23:09:59 ID:???]
あんまり変わってない…

370 名前:NAME IS NULL mailto:sage [2008/02/01(金) 23:21:46 ID:???]
簡単なSELECT文の例だけど、ごくごく僅かに遅くなったんだが…
Windowsだからだろうか
バイナリサイズもほぼ同じだし、EXPLAINもほとんど同じだし、違いが分からない



371 名前:NAME IS NULL mailto:sage [2008/02/01(金) 23:38:29 ID:???]
連レスすまそ
どうやらsqlite-3.5.5.zipの中身が3.5.4だったらしい
ttp://article.gmane.org/gmane.comp.db.sqlite.general/35297
確かにバージョン情報が3.5.4になってるorz

で、落とし直したら3.5.5になってた。
確かにEXPLAINはちょっと変わった。でも速度はそんなに…

372 名前:NAME IS NULL mailto:sage [2008/02/02(土) 02:00:48 ID:???]
drh の話では、レジスタ型への移行の最初は互換性重視で安定させつつ
将来的には最適化を進めて速くする予定らしい。

373 名前:NAME IS NULL mailto:sage [2008/02/03(日) 11:08:53 ID:???]
CVSにドキュメントが戻ってきた……

ドキュメントだけ聞いたことないSCMに移行してたけど
なんでそんなことした & 戻したんだろ

374 名前:NAME IS NULL mailto:sage [2008/02/05(火) 15:37:10 ID:???]
先日出た「SQL辞典―7大データベース対応 (Pocket詳解) (秀和システム)」の
「7大データベース」に SQLite が勘定に入れられてた。
この手の本で SQLite が含まれてるのはまだ珍しいかな。

375 名前:NAME IS NULL mailto:sage [2008/02/05(火) 20:41:16 ID:???]
秀和ではな・・・

376 名前:NAME IS NULL mailto:sage [2008/02/05(火) 21:46:15 ID:???]
SQLiteはサービス型のDBMSには代替できない用途があるから普通に強いと思うよ
ポスグレとMySQLとSQL Serverどれかひとつ滅亡しても別に代替が利くけど、SQLiteがなくなったら泣くよ

377 名前:NAME IS NULL mailto:sage [2008/02/05(火) 22:56:16 ID:???]
禿

378 名前:NAME IS NULL mailto:sage [2008/02/06(水) 00:18:07 ID:???]
SQLite がなくなったら一緒にこの世から消えるもの

Mac OS X, Solaris, iPhone, Android, Symbian OS, Firefox, Skype,
Python, PHP, REALbasic, McAfee AntiVitus, 他多数


379 名前:NAME IS NULL mailto:sage [2008/02/06(水) 00:36:13 ID:???]
消えはせんだろが代替品探すのが難儀だろうなぁ
SQLのエンジン持っててアプリ組み込みに使えるDBって
Java縛りを逃れようと思ったらSQLite以外にぱっと思いつくもんがない
……まぁ言われる前に弁解しとくと俺が不勉強なだけだが

380 名前:NAME IS NULL mailto:sage [2008/02/06(水) 01:58:31 ID:???]
paradox



381 名前:NAME IS NULL mailto:sage [2008/02/06(水) 02:02:09 ID:???]
SQL使えねー醤

382 名前:NAME IS NULL mailto:sage [2008/02/06(水) 02:04:38 ID:???]
使える

383 名前:NAME IS NULL mailto:sage [2008/02/06(水) 07:03:32 ID:???]
>>378
McAfeeとかFireFoxて内部でSQLiteつかってんの?

384 名前:NAME IS NULL mailto:sage [2008/02/06(水) 08:47:36 ID:???]
firefoxは使ってるよ

385 名前:NAME IS NULL mailto:sage [2008/02/06(水) 08:51:44 ID:???]
ttp://www.sqlite.org/famous.html

386 名前:NAME IS NULL mailto:sage [2008/02/06(水) 09:45:52 ID:???]
SQLiteはただのバイナリ処理ライブラリなんだから、代替なんてそこらから拾ってくるか自力開発すればよいだけ。
SQLiteのようなファイルベースのDBもどきなんて、20年前からいくらでも転がっていただろw

まともなDBよりは、遥かに簡単なシステムなわけで。


387 名前:NAME IS NULL mailto:sage [2008/02/06(水) 10:38:28 ID:???]
bdbみたいなものならともかく、SQLだからな。

388 名前:NAME IS NULL mailto:sage [2008/02/06(水) 10:52:44 ID:???]
そこらから拾ったり自力開発って、言うほど簡単じゃないと思うけどなあ。

389 名前:NAME IS NULL mailto:sage [2008/02/06(水) 17:18:12 ID:???]
>>386
そんな再車輪やってらんね

390 名前:NAME IS NULL mailto:sage [2008/02/06(水) 18:06:46 ID:???]
しかも低品質でバグだらけ。



391 名前:NAME IS NULL mailto:sage [2008/02/06(水) 18:24:39 ID:???]
もどきっていうほどもどきじゃないのが素晴らしいところ。

392 名前:NAME IS NULL mailto:sage [2008/02/06(水) 18:31:45 ID:???]
>>390
だよねえ。
SQLite のテストケースの充実ぶりを見たら、代替なんて作れる気がしない。
そこらへんはさすが堅く作り込んであるなと感心する。

393 名前:NAME IS NULL mailto:sage [2008/02/06(水) 21:09:02 ID:???]
>>378
馬鹿なの?パブリックドメインだからなくなるわけ無いじゃん。

394 名前:NAME IS NULL mailto:sage [2008/02/06(水) 21:15:53 ID:???]
>>393
サンバルカンのオープニングを聴いて
「バッカでー太陽が無くなる訳無いじゃんw」
とかテレビに突っ込みを入れてた子供?

395 名前:NAME IS NULL mailto:sage [2008/02/06(水) 21:27:05 ID:???]
>>394
オジンw

396 名前:NAME IS NULL mailto:sage [2008/02/06(水) 21:36:23 ID:???]
>>394
つまり378はサンバルカンの歌に夢中になった
幼児並の頭脳だといいたいわけだな。

397 名前:NAME IS NULL mailto:sage [2008/02/06(水) 22:28:02 ID:???]
>>393
たとえSQLiteが無くなる日が来ようとも君の頭は直らない
(反語的比喩表現)

398 名前:NAME IS NULL mailto:sage [2008/02/07(木) 04:07:26 ID:???]
あまりの頭の悪さに思わずワロタw

399 名前:NAME IS NULL mailto:sage [2008/02/07(木) 21:09:20 ID:???]
その罵詈雑言すべて俺に向けていいからおまえら仲直りしろよ。

400 名前:NAME IS NULL mailto:sage [2008/02/07(木) 22:15:16 ID:???]
400



401 名前:NAME IS NULL mailto:sage [2008/02/10(日) 18:11:04 ID:???]
株価データ(銘柄5000x300日x10〜20年分)を管理してみよう思うんだけど、一個のテーブルに
全部入れるのと、銘柄毎にテーブル作るのどっちがいいかな?

402 名前:NAME IS NULL mailto:sage [2008/02/10(日) 18:32:02 ID:???]
全部入れろ

403 名前:NAME IS NULL mailto:sage [2008/02/10(日) 18:37:12 ID:???]
>>401
もはやSQLite関係ないだろ。DB設計を語るスレに行って
ボコられてこいや。

404 名前:NAME IS NULL mailto:sage [2008/02/10(日) 21:05:36 ID:???]
銘柄と株価でテーブル分けるだろ、普通。
銘柄でテーブル分けたらSQL一発で銘柄検索できないって気がつかないのか?

405 名前:NAME IS NULL mailto:sage [2008/02/10(日) 22:28:06 ID:???]
>>401
おまいさんは5000個テーブル作るつもりかえ?
ちょっとはSQLiteの気持ちにもなってみよう。

406 名前:NAME IS NULL mailto:sage [2008/02/10(日) 22:38:21 ID:???]
>>401
ネタとしてか思えないわけだが・・・。

407 名前:NAME IS NULL mailto:sage [2008/02/11(月) 00:27:37 ID:???]
>>401のフルボッコぶりワロタ

408 名前:NAME IS NULL mailto:sage [2008/02/11(月) 02:10:17 ID:???]
流石にジョークだろ…?

409 名前:NAME IS NULL mailto:sage [2008/02/11(月) 02:15:03 ID:???]
ジョークかどうか不安なときはマジレスが基本ですよ

410 名前:NAME IS NULL mailto:sage [2008/02/11(月) 02:19:13 ID:???]
PostgreSQLかなんかのMLでそういうデザインしてて、
パフォーマンス改善するにはどうしたら?とか質問して
フルボッコになってるの見たことある。



411 名前:NAME IS NULL mailto:sage [2008/02/11(月) 13:17:39 ID:???]
んな設計されたらマジで自分の生死に関わると思うから、
フルボッコにすると思う。

412 名前:NAME IS NULL mailto:sage [2008/02/11(月) 13:20:42 ID:???]
そんなことくらいで死んじゃ駄目だ

413 名前:NAME IS NULL mailto:sage [2008/02/11(月) 14:56:26 ID:???]
>>412
そんなことくらいで殺されたくないから
ふるぼっこにするんであって
>>411 さんの言っていることは正しいと思う


414 名前:NAME IS NULL mailto:sage [2008/02/11(月) 15:07:41 ID:???]
そんなことで殺されるような人生って・・・w

415 名前:NAME IS NULL mailto:sage [2008/02/11(月) 16:19:32 ID:???]
忙殺も殺しの一種

416 名前:NAME IS NULL mailto:sage [2008/02/11(月) 16:56:42 ID:???]
関わり合いになる時点で駄目人生だろw

417 名前:NAME IS NULL mailto:sage [2008/02/12(火) 16:47:02 ID:???]
そんな設計が見えた時の恐怖と言ったら
もちろん関わり合いにならないように全力で逃げるわけですが

418 名前:NAME IS NULL mailto:sage [2008/02/12(火) 19:06:54 ID:???]
株価のデータって20年も必要なの?

419 名前:NAME IS NULL mailto:sage [2008/02/12(火) 20:22:03 ID:???]
あってもいいんじゃないかな。でも株式分割とか銘柄入換をメンテしてない情報ならカス

420 名前:NAME IS NULL mailto:sage [2008/02/14(木) 14:01:52 ID:???]
railsでsqlite3を使っていると
drop tbl where 1 = 1;
の様なSQLが自動生成されるんだけど、
"1 = 1"の部分はsqlite独自にイデオム?それとももっとコモンなモノ?
あと、意味としてはどう解釈すればいいのだろう?





421 名前:NAME IS NULL mailto:sage [2008/02/14(木) 14:39:34 ID:???]
とりあえず "WHERE 1 = 1" でぐぐってみる。

422 名前:NAME IS NULL mailto:sage [2008/02/14(木) 14:42:16 ID:???]
drop文にwhere使えたっけ?

423 名前:NAME IS NULL mailto:sage [2008/02/14(木) 15:10:33 ID:???]
SELECTの自動生成だったら、WHERE 1=1 の後ろに AND 条件、AND 条件 と必要なだけつなげていくのが楽なのかも。

424 名前:NAME IS NULL mailto:sage [2008/02/14(木) 15:44:17 ID:???]
ダサいフロントエンドだなあ

425 名前:NAME IS NULL mailto:sage [2008/02/14(木) 16:31:23 ID:???]
>>424
何の話?

426 名前:NAME IS NULL mailto:sage [2008/02/14(木) 20:18:17 ID:???]
>>423
CGIとかのスクリプトでSQL生成するときによくやるなそれ
true の代わり

427 名前:NAME IS NULL mailto:sage [2008/02/14(木) 20:43:03 ID:???]
ActiveRecordのsqlite用のアダプタの中に、発行されたSQLにWHERE節がなければあえて"WHERE 1=1"を付け加ええるコードがある。
この後はSQLを実行されるだけなので "AND"で何かをつなげる意味でもなさそう。

検索すると一応SQLのイデオムとしては存在するみたいだけど、常に真になる条件ではANDでつなげやすい以外に何か意味があるとい回答は見つけられなかった。

自分が考えられる理由は最適化が掛かるとか(SELECTでEXPLAINするとステップが増えていたけど)、sqliteのどこかのバージョンで不具合があり、苦肉の回避法なのかとか…。


428 名前:NAME IS NULL mailto:sage [2008/02/14(木) 20:43:58 ID:???]
>>426
具体的におねがい

429 名前:NAME IS NULL mailto:sage [2008/02/14(木) 20:48:44 ID:???]
"SELECT * FROM xxx WHERE 1=1" に対して、0個以上の"AND〜"を追加する方が、
"SELECT * FROM xxx" に対して、何もつけなかったり、最初の1個は"WHERE〜"で、残りは"AND〜"でとかを追加するより、
生成処理がずっと単純になるじゃんか。

430 名前:NAME IS NULL mailto:sage [2008/02/14(木) 21:15:57 ID:???]
構文解析で単純にFROMとWHEREでちょん切って表名取り出してるだけなんじゃね?



431 名前:NAME IS NULL mailto:sage [2008/02/14(木) 21:42:10 ID:???]
>>427
>sqliteのどこかのバージョンで不具合があり、苦肉の回避法なのかとか…。

これはないな。SQLite2.8の頃から使ってるが聞いたことない。

432 名前:NAME IS NULL mailto:sage [2008/02/14(木) 22:00:11 ID:???]
>>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 mailto:sage [2008/02/14(木) 22:49:05 ID:???]
>>429
それもないな。rubyなんだから、条件をarrayに放り込んでarray.join(" AND ")で一発。

434 名前:NAME IS NULL mailto:sage [2008/02/15(金) 00:40:39 ID:???]
これが問題のコード。引数で生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 mailto:sage [2008/02/15(金) 02:22:58 ID:???]
WHERE 1 = 1って、変更や削除された行数を内部で計算させるじゃなかったか?
PEARのAffectedRows()などで取ってこれる、みたいな。
2chのPHPスレかPEARスレでそう書いてあった気が。

436 名前:NAME IS NULL [2008/02/15(金) 07:04:36 ID: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 mailto:sage [2008/02/15(金) 07:35:41 ID:???]
すいません、大誤爆です。

自分が他のDB作成用のソースから ConnectionStringBuilder を構築するメソッドをコピペして
接続文字列の区切りのセミコロンをそのままつけたままにしてたからでした…。

既存のデータソースにテーブル追加してもまったく問題ないです。

438 名前:NAME IS NULL mailto:sage [2008/02/15(金) 09:35:52 ID:???]
m9(^Д^)プギャー

解説乙

439 名前:NAME IS NULL mailto:sage [2008/02/15(金) 10:59:30 ID:???]
>>435
どうもそれが当たりっぽい気がする。
ttp://dev.rubyonrails.org/changeset/228

440 名前:NAME IS NULL mailto:sage [2008/02/15(金) 14:27:01 ID:???]
>>439
すばらしい。よく見つけられたな。
"WHERE 1=1"はSqliteのイデオムってことでいいのかな?
どっかにその仕組みが明記されていたりするのかな?



441 名前:NAME IS NULL mailto:sage [2008/02/15(金) 14:46:25 ID:???]
>>440
SQLiteの、っていうよりDBMS固有のクセを吸収する為の一般的手法みたい。

PEAR マニュアルより引用:
ttp://www.ugunet.jp/pear/package.database.mdb2.intro-portability.html
>可搬性に関するモードの定数
>MDB2_PORTABILITY_DELETE_COUNT
>削除された行数を強制的に取得します。 単純な DELETE FROM tablename クエリを実行した場合に、
>削除された行数を返さない DBMS があります。 このモードは、そんな DBMS から削除された行数を
>取得するために、DELETE クエリの最後に WHERE 1=1 を追加します。

DBMS固有のクセで、DELETE時に行数を返したり返さなかったりするものがあるんで、
自明な条件式を付ける事で、常に行数を返すようにする、と。

442 名前:435 mailto:sage [2008/02/15(金) 16:41:36 ID:???]
あった。多分これだ。
ttp://jp.php.net/manual/ja/function.mysql-affected-rows.php
>直近のクエリが WHERE 句を含まない DELETE だった場合、テーブルから すべてのレコードが削除されますが、MySQL 4.1.2 以前のバージョンでは この関数はゼロを返します。

443 名前:NAME IS NULL mailto:sage [2008/02/15(金) 16:44:49 ID:???]
"WHERE 1=1"が来る度に
他のDBMSは「またMySQLか!」みたいにウンザリしてるんだろうな。

444 名前:NAME IS NULL mailto:sage [2008/02/15(金) 16:52:26 ID:???]
おまいらの執念に感動した

445 名前:435 mailto:sage [2008/02/15(金) 17:27:13 ID:???]
一応データベース板だから、MySQLのマニュアルの該当するページも載せておく。テーブルを一気に削除するから、行数は数えないという理由らしい。
ttp://dev.mysql.com/doc/refman/4.1/ja/delete.html
> すべてのレコードの削除時に、削除されたレコード数を確認する必要がある場合、処理速度が遅くなってもかまわなければ、次の形式の DELETE ステートメントを使用できます。
> mysql> DELETE FROM table_name WHERE 1>0;
> 注意: この形式の場合、レコードが一度に 1 つずつ削除されるため、WHERE 節のない DELETE FROM table_name よりはるかに処理が遅くなります。

まさかと思って調べたら、どうもSQLiteもアウアウの予感。「not row changes and will not be counted」とのこと。
英語は苦手だからエロイ人チェックキボン。
www.sqlite.org/c3ref/changes.html
> 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 mailto:sage [2008/02/15(金) 19:45:01 ID:???]
該当する部分を訳してみた。

www.sqlite.org/c3ref/changes.html

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 mailto:sage [2008/02/15(金) 20:21:27 ID:???]
pragma設定すればdelete文が削除した行数を返す様に出来るみたいだ。
ttp://www.sqlite.org/pragma.html

普通の場合。
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 mailto:sage [2008/02/15(金) 22:43:13 ID:???]
消す前に自分の持ってるレコード数返すだけでいいのに

449 名前:NAME IS NULL mailto:sage [2008/02/15(金) 23:22:25 ID:???]
こんなみょうちくりんな構文がCのAPIのところに書いてあったのか。
なんか他にもマニアックな構文が隠れてそう

450 名前:NAME IS NULL [2008/02/18(月) 23:03:13 ID:gBQYlv+0]
データをINSERTする時に、そのデータにシングルクォーテーションが含まれていると、
SQLiteがシンタックスと勘違いしてSQL構文エラーになるんですけど、
SQL文のシングルクォーテーションをエスケープする方法ってあるんでしょうか?




451 名前:NAME IS NULL mailto:sage [2008/02/18(月) 23:11:35 ID:???]
>>450
''

452 名前:NAME IS NULL mailto:sage [2008/02/18(月) 23:26:44 ID:???]
sqlite3_mprintf

453 名前:450 mailto:sage [2008/02/18(月) 23:35:11 ID:???]
>>451
''でしたか。\'かと…orz
ありがとうございました。

>>452
sqlite3_mprintfにて%qですか。
ありがとうございました。

454 名前:NAME IS NULL mailto:sage [2008/02/19(火) 08:18:56 ID:???]
php厨か

455 名前:NAME IS NULL mailto:sage [2008/02/19(火) 18:18:08 ID:???]
なんちゅう無知w

456 名前:NAME IS NULL mailto:sage [2008/02/19(火) 18:53:02 ID:???]
ちゃんとbindを教えてやれよ

457 名前:NAME IS NULL mailto:sage [2008/02/19(火) 21:51:59 ID:???]
ついでにSQLインジェクションで愚ぐることを推奨するよーー

458 名前:NAME IS NULL mailto:sage [2008/02/20(水) 08:38:08 ID:???]
バイナリが必要になって久しぶりにSQLiteのサイト見たら
2.8のバイナリ消えてる…
cvsからソースのチェックアウトはできるようだけど他人のソースのコンパイルなんてやったことねー(鬱

459 名前:NAME IS NULL mailto:sage [2008/02/20(水) 08:46:28 ID:???]
>>458
リンクは無いけど、URL直打ちすると2.8.17とか落とせるよ
URLは最新版の奴から類推すれ

460 名前:NAME IS NULL mailto:sage [2008/02/20(水) 09:26:33 ID:???]
そうなのですか!ありがとう!



461 名前:NAME IS NULL [2008/02/23(土) 20:32:01 ID:4Br+w72V]
ja.wikipedia.org/wiki/Wikipedia:%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89
Wikipedia:データベースダウンロード
英語版のwiki3GバイトをMySQLにインポートすることはできたのですが
sqliteではうまくいきません
sqliteでwikiのxmlファイルのインポートは可能でしょうが


462 名前:NAME IS NULL mailto:sage [2008/02/23(土) 20:54:16 ID:???]
うまくいかないんじゃダメなんだろ

463 名前:NAME IS NULL mailto:sage [2008/02/23(土) 21:09:41 ID:???]
可能だろ。自分でXMLパースして取り込めばいいじゃん。
そんな簡単なこともできないようじゃ使う資格ないね!!

464 名前:NAME IS NULL mailto:sage [2008/02/23(土) 21:33:48 ID:???]
MySQLに入ったんなら、MySQL→SQLiteで入れればいいじゃん

465 名前:NAME IS NULL mailto:sage [2008/02/25(月) 00:41:56 ID:???]
質問

#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); \
   }

466 名前:続き mailto:sage [2008/02/25(月) 00:44:35 ID:???]
#define STEP_SIMPLE_QUERY \
   if (SQLITE_DONE != sqlite3_step(_stmt)) { \
    throw SqliteException::NewException(_db); \
   }

#define STEP_SELECT_QUERY \
   int err = 0; \
   while(SQLITE_ROW == (err = sqlite3_step(_stmt))) {

#define SELECT_RESULT_INTEGER(index) sqlite3_column_int(_stmt, index)

#define LOOP_SELECT_QUERY \
   }; \
   if (err != SQLITE_DONE) \
    throw SqliteException::NewException(_db);

#define END_QUERY \
  } \
  __finally { \
   sqlite3_reset(_stmt); \
   sqlite3_finalize(_stmt); \
  } \
 }


467 名前:NAME IS NULL mailto:sage [2008/02/25(月) 00:52:58 ID:???]
こんなマクロを組んで、

BEGIN_QUERY(dbHandle, "BEGIN;");
STEP_SIMPLE_QUERY;
END_QUERY;

とか、

BEGIN_QUERY(dbHandle, sql);
BEGIN_BIND
BIND_INT(100)
END_BIND;
STEP_SELECT_QUERY {
list.push_back(SELECT_RESULT_TEXT(0));
}
LOOP_SELECT_QUERY;
END_QUERY;

とか、やってるのですが、BEGIN_QUERY から END_QUERY の中で sqlite のエラーが発生すると
(たとえば、sql が間違ってたり、NOT NULL の列に NULL つっこもうとしたときとか)
END_QUERY の中で heap が壊れたーってデバッガに怒られます。

例外が発生するのはいいのだけど、heapが壊れるのは予定外なので直そうとして
ソース読んだり、いろいろがんばったのですが、うまく直せません。
どうすれば直るのか、アドバイスをください。お願いします。

468 名前:NAME IS NULL mailto:sage [2008/02/25(月) 01:01:24 ID:???]
>sqlite3_stmt *_stmt = prepareSql(db, sql);

これがちゃんと成功して、 _stmt に然るべき値が入ってるか確認すべきなんじゃないの?

469 名前:NAME IS NULL mailto:sage [2008/02/25(月) 01:01:49 ID:???]
忘れてました。

環境は VisualStudio 2005 と 2008 の両方で発生して、
sqlite のバージョンは 3.5.1 だったかな?

#最後、インデント崩れてしまってすいません。

470 名前:NAME IS NULL mailto:sage [2008/02/25(月) 01:07:20 ID:???]
あ、すいません、それ組み込んだの自分で忘れてました^^;
とすると、sql 間違いは別件か・・・。

prepareSql はこんな感じになってます。

sqlite3_stmt * prepareSql(sqlite3 *db, LPCWSTR sql)
{
 assert(db && "db は 有効な sqlite ハンドル");
 sqlite3_stmt *stmt;

 if (SQLITE_OK != sqlite3_prepare16_v2(db, sql, -1, &stmt, NULL))
  throw SqliteException::NewException(db);

 return stmt;
}




471 名前:NAME IS NULL mailto:sage [2008/02/25(月) 01:13:24 ID:???]
さ、寝るか・・・

472 名前:NAME IS NULL mailto:sage [2008/02/25(月) 22:37:25 ID:???]
>>470
とりあえず、その糞みたいなマクロを使うのをやめろ。
C ならともかく、C++ でそんなマクロを使うのは基地外のやることだ

お前みたいな池沼が俺の部下だったら即日解雇してやるわ

ここで恥さらす前に、デバッガでステップ実行して
コードパスでも追ってみたらどうだ

デバッガがお前のゴミマクロをきちんととレースできればの話だがなw


473 名前:NAME IS NULL mailto:sage [2008/02/25(月) 23:03:15 ID:???]
>>472
物言いは悪いが、言ってることは正しいな

474 名前:NAME IS NULL mailto:sage [2008/02/25(月) 23:33:18 ID:???]
ギャクなのかマジなのか分からんけど、
こんな書き方をするなら、PHPとかPHPとかPHPとかを勧めておく。
Effective C++などC++の良書を読んで出直してこい。

475 名前:NAME IS NULL mailto:sage [2008/02/25(月) 23:52:30 ID:???]
ワロス
マクロ始まったな

476 名前:NAME IS NULL mailto:sage [2008/02/26(火) 00:07:36 ID:???]
なんとなく、書法がATLのメッセージクラッカーに似てるな。
定型的な部分を封じ込めようとする「思考法は」悪くないと思う。

ATLやWTLだけでなく、Boost のように成功してる事例もあるから
マクロってだけで、472みたく喚くつもりはないけど
仕事でそういうコードに出会ったら、あまり良い印象は持たないだろうな。

ていうか、俺は例外が嫌いw

477 名前:NAME IS NULL mailto:sage [2008/02/26(火) 00:49:22 ID:???]
>>476
例外を使わないで C 的なインターフェイスを設計するのも悪くは無いが
エラーコードを無視してたり、エラー処理だらけでメインロジックがどれか
サッパリわからんソースは勘弁して欲しい


478 名前:NAME IS NULL mailto:sage [2008/02/26(火) 01:21:37 ID:???]
ちょっと興味がわいて、cppで展開してみた。

BEGIN_QUERY(dbHandle, "BEGIN;");
STEP_SIMPLE_QUERY;
END_QUERY;

がこうなる。

{
  sqlite3 * _db = (sqlite3 *)dbHandle;
  sqlite3_stmt *_stmt = prepareSql(dbHandle, "BEGIN;");
  
  __try {;
    if (SQLITE_DONE != sqlite3_step(_stmt)) {
      throw SqliteException::NewException(_db);
    };
  }
  __finally {
    sqlite3_reset(_stmt);
    sqlite3_finalize(_stmt);
  }
};


479 名前:NAME IS NULL mailto:sage [2008/02/26(火) 01:28:35 ID:???]
BEGIN_QUERY(dbHandle, sql);
BEGIN_BIND
BIND_INT(100)
END_BIND;
STEP_SELECT_QUERY {
list.push_back(SELECT_RESULT_TEXT(0));
}
LOOP_SELECT_QUERY;
END_QUERY;

{
  sqlite3 * _db = (sqlite3 *)dbHandle;
  sqlite3_stmt *_stmt = prepareSql(dbHandle, sql);
  
  __try {;
    {
      int _i = 0; _i;
      
      if (SQLITE_OK != sqlite3_reset(_stmt)
        // BIND_INT(100) が展開できないぞ、こら!エスパーによる展開。
        || SQLITE_OK != sqlite3_bind_int(_stmt, ++_i, (int)(100))
      ) throw SqliteException::NewException(_db);
    };
    int err = 0;
    
    while(SQLITE_ROW == (err = sqlite3_step(_stmt)))
    {
    {
      list.push_back(SELECT_RESULT_TEXT(0));
    }
    };
    
    if (err != SQLITE_DONE)
      throw SqliteException::NewException(_db);;
  }
  __finally {
    sqlite3_reset(_stmt);
    sqlite3_finalize(_stmt);
  }
};


480 名前:NAME IS NULL mailto:sage [2008/02/26(火) 01:50:56 ID:???]
展開してみるとそう馬鹿にしたコードでもない気がするけど、
まちがえると、while の中で関数に飛んで、そのなかでまたこのマクロ群を利用したりして
そのあたりがなかなかやばそう。

BIND〜のところ、わざわざ if 文を || で短絡させる必要があるのか?
一つ BIND するごとに if 文一つで良いと思うけど。

err になると、NewException して、__finally に飛んでるみたいだけど
そのときの _stmt がどうなってるかだな。
あとは自分でかんがえれ。



481 名前:NAME IS NULL mailto:sage [2008/02/26(火) 08:12:55 ID:???]
プログラマの素質ない

482 名前:NAME IS NULL mailto:sage [2008/02/26(火) 09:08:02 ID:???]
例外はたいてい投げられっぱなしで上まで貫通してくるからな
Java なら e.printStackTrace() してやんよ(AA略

483 名前:NAME IS NULL mailto:sage [2008/02/27(水) 12:40:41 ID:???]
アドビ、SQLite Consortiumに参加で開発を支援:ニュース - CNET Japan
ttp://japan.cnet.com/news/biz/story/0,2000056020,20368174,00.htm

484 名前:NAME IS NULL mailto:sage [2008/02/29(金) 10:30:22 ID:???]
1つのフィールドに長い文章を入れるとINSERTされないんですけど、どうしてでしょうか?…
長すぎるときにちょっとづつ削るとある地点でINSERTされます。

sukura internetでPerlでやってます。

485 名前:NAME IS NULL mailto:sage [2008/02/29(金) 11:31:30 ID:???]
>>484
お前のプログラムのバグか Perl ラッパーの仕様。
SQLite には制限は一切ない。

以上


486 名前:NAME IS NULL mailto:sage [2008/02/29(金) 13:15:16 ID:???]
sakura internet ?

しばし考えちゃったよ。

487 名前:NAME IS NULL mailto:sage [2008/03/01(土) 12:30:04 ID:???]
>>484
何文字?ていうかそういう質問する時はテストコードも貼ってね。時間の無駄になるから。

488 名前:NAME IS NULL mailto:sage [2008/03/01(土) 14:40:02 ID:???]
>>484
ていうかそういう質問する時はエラーメッセージも貼ってね。時間の無駄になるから。

489 名前:NAME IS NULL mailto:sage [2008/03/01(土) 15:17:19 ID:???]
質問はしないでね。時間の無駄になるから。

490 名前:NAME IS NULL mailto:sage [2008/03/01(土) 15:27:33 ID:???]
2chなんか見てないでね。仕事が進まないから。



491 名前:NAME IS NULL mailto:sage [2008/03/01(土) 16:20:28 ID:???]
>>490
正直すまんかった

492 名前:NAME IS NULL mailto:sage [2008/03/02(日) 14:14:00 ID:???]
System.Data.SQLiteって接続文字列間違ってても
Openできるんか、なんだこれ?

493 名前:NAME IS NULL mailto:sage [2008/03/02(日) 14:25:36 ID:???]
勘違いだった、スマソ

494 名前:NAME IS NULL mailto:sage [2008/03/07(金) 11:06:46 ID:???]
SQLiteにはFirebirdみたいにトランザクション回数に制限とかない?
Accessみたいに定期的に最適化の必要があるとか
今Postgres使ってるんだけどSQLiteに興味が沸いてきた

495 名前:NAME IS NULL mailto:sage [2008/03/07(金) 13:30:40 ID:???]
同時に書き込めるのは1つのプロセスだけ
最適化(VACUUM)は要らないけど、ある程度の期間でやった方がサイズが小さくて済む

496 名前:NAME IS NULL mailto:sage [2008/03/07(金) 22:27:46 ID:???]
そうか、ということはマルチスレッドで同時アクセスはできるんだ
VACUUMもあるんだ、やはり日本語コミュニティサイトがないときついなぁ

497 名前:NAME IS NULL mailto:sage [2008/03/08(土) 02:44:16 ID:???]
あるよ

498 名前:NAME IS NULL mailto:sage [2008/03/08(土) 07:41:54 ID:???]
ここにあるじゃんw

499 名前:NAME IS NULL mailto:sage [2008/03/08(土) 15:02:56 ID:???]
えいえんは

500 名前:NAME IS NULL mailto:sage [2008/03/08(土) 18:51:40 ID:???]
>>499
氏ね




501 名前:NAME IS NULL mailto:sage [2008/03/10(月) 07:35:46 ID:???]
C++ で sqlite を使用しているんですが,重複した値を持つデータをすべて抜き出す場合, どのようにしたらいいのでしょうか?
例えば,

num value
1   0
2   1
3   2
4   2
5   3
6   3
7   2
8   4
9   5

このようなテーブルから, 以下のように value に同じ値が 2 つ以上ある行をすべて抜き出したいのです.

num value
3   2
4   2
7   2
5   3
6   3

考えて以下のようにしてみたんですが,value = 2 の場合しか抜き出せ無いです.
(後半の SELECT が発見した最初の count( value) > 1 の value しか返さないため?)

SELECT * FROM table WHERE value = (SELECT value FROM table GROUP BY value HAVING count( value ) > 1 )

502 名前:NAME IS NULL mailto:sage [2008/03/10(月) 08:29:31 ID:???]
IN使え

SELECT * FROM table WHERE value IN (SELECT value FROM table GROUP BY value HAVING count( value ) > 1 );

503 名前:NAME IS NULL mailto:sage [2008/03/10(月) 22:12:42 ID:???]
>>502
ありがとうございます.おかげで希望どおりの動作が出来ました.

504 名前:NAME IS NULL mailto:sage [2008/03/10(月) 22:35:15 ID:???]

はい、はい、おまえら Google Gears に SQLite が来ましたよー
code.google.com/apis/gears/api_database.html
code.google.com/apis/gears/

505 名前:NAME IS NULL mailto:sage [2008/03/10(月) 22:46:40 ID:???]
Googleまでスポンサーになったら安泰だな

506 名前:NAME IS NULL mailto:sage [2008/03/11(火) 00:22:49 ID:???]
pc11.2ch.net/test/read.cgi/db/1176223619/311n
> 311 名前:NAME IS NULL[] 投稿日:2007/05/31(木) 15:18:07 ID:detEBJcT
> japan.cnet.com/news/media/story/0,2000056023,20349880-2,00.htm
>
> >  Google Gear自体は、ブラウザで稼働するローカルウェブサーバ、
> > データ保存用オープンソースデータベース「SQLite」、
> > 複数のJavaScriptジョブを並列に実行するためのブラウザエクステンション、
> > という3つのコンポーネントで構成されている。
>
> あのGoogleもSQLite。

507 名前:NAME IS NULL mailto:sage [2008/03/11(火) 00:44:57 ID:???]
脳内にsqliteが欲しい

508 名前:NAME IS NULL mailto:sage [2008/03/11(火) 02:24:33 ID:???]
むしろ脳内を検索できる Google Brain を頼む

509 名前:NAME IS NULL mailto:sage [2008/03/11(火) 07:37:10 ID:???]
時間と金が欲しい

510 名前:NAME IS NULL mailto:sage [2008/03/11(火) 18:22:12 ID:???]
>>508
それ実現できたら完全に攻殻だな



511 名前:NAME IS NULL mailto:sage [2008/03/12(水) 00:12:38 ID:???]
いや、外部記憶もいくつか持てないとな。

512 名前:NAME IS NULL mailto:sage [2008/03/12(水) 02:29:29 ID:???]
「ばあさんや、わしの外部記憶知らんかね?」
「あら、やだよ。首に掛かってるじゃないの」

513 名前:NAME IS NULL mailto:sage [2008/03/12(水) 12:28:39 ID:???]
「ばあさんや、Google Brain の使い方が思い出せないんじゃが、どうやったかの?」

514 名前:NAME IS NULL mailto:sage [2008/03/13(木) 20:33:26 ID:???]
グーグル脳と訳すと侮蔑語っぽい

515 名前:NAME IS NULL mailto:sage [2008/03/14(金) 11:44:02 ID:???]
他のプロセスが10秒に1回くらいの速度でinsertしてるデータベースを
sqlite3コマンドでdumpすると何か恐ろしいことが起こりますか?
ぱっと見何も問題ないようなんですが。

516 名前:NAME IS NULL mailto:sage [2008/03/14(金) 14:10:21 ID:???]
dumpに10秒以上かかる量のデータ溜めてからもっかいやれば

517 名前:NAME IS NULL mailto:sage [2008/03/14(金) 21:01:50 ID:???]
普通はトランザクション中の読み取り一貫性が確保されてるんじゃないの?
トランザクション使わない馬鹿が書いてないなら、いつdumpしても問題ないだろ。

518 名前:NAME IS NULL mailto:sage [2008/03/14(金) 21:37:28 ID:???]
insertだけなら大丈夫じゃねえかな。入るか入らないかどっちかになるっしょ。

519 名前:NAME IS NULL mailto:sage [2008/03/14(金) 21:41:05 ID:???]
SQLite って行番号があるらしいけど、どうやって使うの?
桐みたいに直前値使った残高計算とか簡単にできるの?

520 名前:NAME IS NULL mailto:sage [2008/03/14(金) 21:50:51 ID:???]
桐みたいにって言われてもなあ・・・



521 名前:NAME IS NULL mailto:sage [2008/03/14(金) 22:06:40 ID:???]
いや、SQLiteの行番号を使った使用例ってのを見たいんだけど、どこかにない?

522 名前:NAME IS NULL mailto:sage [2008/03/14(金) 22:09:07 ID:???]
ガウバンゴウ!

523 名前:NAME IS NULL mailto:sage [2008/03/15(土) 02:44:55 ID:???]
行番号ってautoincrementのこと?

524 名前:NAME IS NULL mailto:sage [2008/03/15(土) 08:02:03 ID:???]
まずは行番号の定義を述べよ

525 名前:NAME IS NULL mailto:sage [2008/03/15(土) 08:28:16 ID:???]
行番号って、SQLite の ROWID の事なんだけど
どうやって使うの?

526 名前:NAME IS NULL mailto:sage [2008/03/15(土) 09:57:36 ID:???]
SELECT ROWID FROM mytable;

527 名前:NAME IS NULL mailto:sage [2008/03/15(土) 15:56:06 ID:???]
>>525 ていうかDB設計の勉強からやりなおせばいいじゃん。うぜえ。

528 名前:NAME IS NULL mailto:sage [2008/03/15(土) 16:02:29 ID:???]
一生桐使ってればいいと思うよ。

529 名前:NAME IS NULL mailto:sage [2008/03/15(土) 17:36:26 ID:???]
>>525
ユニークな番号として使う

530 名前:NAME IS NULL mailto:sage [2008/03/15(土) 23:35:47 ID:???]
rowidってユニークなだけで、順番通りって訳じゃないよなぁ?



531 名前:NAME IS NULL mailto:sage [2008/03/15(土) 23:43:53 ID:???]
>>530
「順番」の定義による

532 名前:NAME IS NULL mailto:sage [2008/03/16(日) 00:23:28 ID:???]
順番ったら順番だ
INSERTされた時系列的順番だだだ!

533 名前:NAME IS NULL mailto:sage [2008/03/16(日) 00:28:35 ID:???]
>>532
それなら大丈夫じゃないかなあ

534 名前:NAME IS NULL mailto:sage [2008/03/16(日) 08:33:57 ID:???]
532はプログラマの素質もなさそう。
基本情報処理でも受けろ。

535 名前:NAME IS NULL mailto:sage [2008/03/16(日) 09:46:59 ID:???]
SQLiteではレコードの編集すると、実際は新たなレコードが挿入されて、元のレコードに削除マークがされるから
ROWIDも新しくなる?

536 名前:NAME IS NULL mailto:sage [2008/03/16(日) 12:08:09 ID:???]
>>532
書き換えられる可能性もあるから順番どおりってわけでもないよ

537 名前:NAME IS NULL mailto:sage [2008/03/17(月) 18:03:15 ID:???]
>>535
削除マーク付くの?マジ?

538 名前:NAME IS NULL mailto:sage [2008/03/17(月) 18:31:04 ID:???]
バキュームされるまで削除レコード保持されてる

539 名前:NAME IS NULL mailto:sage [2008/03/17(月) 19:03:49 ID:???]
え、そうなん?
てことはバキュームしないと削除レコードがドンドン溜まってくのか
知らんかったぜ・・

540 名前:NAME IS NULL [2008/03/17(月) 21:46:26 ID:eNgCUU7z]
this is test



541 名前:NAME IS NULL mailto:sage [2008/03/18(火) 11:26:16 ID:???]
質問です。
CREATE TABLE hoge(
number INTEGER -- 登録番号
PRIMARY KEY
,x DECIMAL(13,6) -- xの値
NOT NULL
,y DECIMAL(13,6) -- yの値
NOT NULL
,z DECIMAL(13,6) -- zの値
NOT NULL
);
というテーブルをもつデータベースの値を
CREATE TABLE hoge(
number INTEGER -- 登録番号
PRIMARY KEY
,x DECIMAL(13,6) -- xの値
NOT NULL
,y DECIMAL(13,6) -- yの値
NOT NULL
,a DECIMAL(13,6) -- aの値
NOT NULL
);
というテーブルを持つデータベースに移し替えたいのですが、
どうすればよいでしょうか?
カラムの名前だけ変えたものなのですが....

542 名前:NAME IS NULL mailto:sage [2008/03/18(火) 12:51:21 ID:???]
INSERT 〜SELECT

543 名前:NAME IS NULL mailto:sage [2008/03/19(水) 02:43:36 ID:???]
SQLite Release 3.5.7 On 2008 Mar 17 (3.5.7)

544 名前:NAME IS NULL mailto:sage [2008/03/19(水) 13:01:24 ID:???]
VM変えた影響はもっと多いかと思ったけど、意外と少ないですね。
3.5.6, 3.5.7で1件ずつ修正されてる。

545 名前:NAME IS NULL mailto:sage [2008/03/26(水) 22:00:15 ID:???]
SQLite Manager のSQLを書き込む枠が狭杉!

546 名前:NAME IS NULL mailto:sage [2008/03/31(月) 22:11:04 ID:???]
sqlite3ってENUM使えないみたいですね。

547 名前:NAME IS NULL mailto:sage [2008/04/03(木) 00:16:53 ID:???]
普通に integer でいいし、制約を作りたいならトリガー書けばいいだけ


548 名前:NAME IS NULL mailto:sage [2008/04/03(木) 09:45:49 ID:???]
トリガーかよw

549 名前:NAME IS NULL mailto:sage [2008/04/03(木) 22:46:58 ID:???]
CHECK制約の立場は...?

550 名前:NAME IS NULL mailto:sage [2008/04/04(金) 01:37:03 ID:???]
sqlite jdbc で hibernate してみた。

挫折した。



551 名前:NAME IS NULL mailto:sage [2008/04/04(金) 13:04:48 ID:???]
SQLでこういうことってできるの?

SELECT rowid, ID, NAME FROM foo WHERE ID BETWEEN 10 AND 20;

rowid ID NAME
5 11 abc
7 13 def
9 17 ghi



No ID NAME
1 11 abc
2 13 def
3 17 ghi

のようにNo(抽出した順に1から連番)を取得するSELECT文は書ける?


552 名前:NAME IS NULL mailto:sage [2008/04/04(金) 13:21:38 ID:???]
すべてをSQLで済ませようという人って滑稽だなあ

553 名前:NAME IS NULL mailto:sage [2008/04/04(金) 16:28:11 ID:???]
ORDER BY No ASC

554 名前:NAME IS NULL mailto:sage [2008/04/04(金) 16:29:01 ID:???]
意味が違ったなすまん。

555 名前:NAME IS NULL mailto:sage [2008/04/05(土) 02:35:27 ID:???]
SQL において、行の並び順は何の意味も持たないっていうのを
理解してないバカって多いよね


556 名前:NAME IS NULL mailto:sage [2008/04/05(土) 08:08:13 ID:???]
>>555
ゆとり&底辺乙


557 名前:NAME IS NULL mailto:sage [2008/04/05(土) 09:39:59 ID:???]
重複あったらアウトだけど
SELECT (SELECT COUNT(*) FROM foo sub WHERE sub.NAME<=foo.NAME AND sub.ID BETWEEN 10 AND 20),
ID, NAME FROM foo WHERE ID BETWEEN 10 AND 20;

仕事でこんなん書いてたら小一時間(ry

558 名前:NAME IS NULL mailto:sage [2008/04/05(土) 12:25:12 ID:???]
ORDER BY ってのも "SQL 言語" の正式な仕様じゃないしな

SQL はあくまでも集合操作言語であり、集合には
「集合内の順序」ってものは存在しないから
「集合内の順序」を扱うような処理は「純粋な SQL」では
記述できない。


559 名前:NAME IS NULL mailto:sage [2008/04/05(土) 12:28:05 ID:???]
Structured Query Language

560 名前:NAME IS NULL mailto:sage [2008/04/05(土) 12:48:39 ID:???]
>>558
>>558
>>558




561 名前:NAME IS NULL mailto:sage [2008/04/05(土) 14:21:19 ID:???]
>>558
ヒント:順序対

562 名前:NAME IS NULL mailto:sage [2008/04/05(土) 14:56:43 ID:???]
>>558はSQLの標準規格を知らないそうです

563 名前:NAME IS NULL mailto:sage [2008/04/05(土) 14:57:56 ID:???]
集合についても知らない・・・

564 名前:NAME IS NULL mailto:sage [2008/04/05(土) 15:17:50 ID:???]
アクセス使わないからそういうことになるんだよwww

565 名前:NAME IS NULL [2008/04/07(月) 03:13:21 ID:Eq8tqB18]
>>558
本当にそんなことがあるのかと思って規格を参照してみたけど、少なくとも
SQL92においてはどのレベルでも実装が必須のようでした。
もうちょっと詳しい説明をお願いします。

566 名前:NAME IS NULL mailto:sage [2008/04/07(月) 08:27:03 ID:???]
普通に考えて、検索結果を並び替えられないのはあり得ないと思うがな。

567 名前:NAME IS NULL mailto:sage [2008/04/07(月) 11:11:59 ID:???]
>>551
仮テーブルにぶっこんでそれを取得すればおk

568 名前:NAME IS NULL mailto:sage [2008/04/07(月) 19:28:40 ID:???]
>567
おまえ頭いいな

569 名前:NAME IS NULL mailto:sage [2008/04/07(月) 22:28:51 ID:???]
select count(*) as no, a.* from foo as a, foo as b where a.id >= b.id group by a.id;


570 名前:551 mailto:sage [2008/04/08(火) 08:08:05 ID:???]
みんな、ありがとう。

>>569の方法が一番簡単そうでした。
WHERE句にb.id between 10 and 20を追加して
うまく結果が得られました。





571 名前:NAME IS NULL mailto:sage [2008/04/12(土) 09:28:09 ID:???]
OS X Leopard に SQLite3 あるんで、これ始めるのに SQLite 書籍 Amazoneに頼んでみた。ただそれだれ・・
実のところよくわかってない世界に行くのはドキドキする。

572 名前:NAME IS NULL mailto:sage [2008/04/12(土) 13:47:16 ID:???]
あーあ

573 名前:NAME IS NULL mailto:sage [2008/04/12(土) 15:34:07 ID:???]
ttp://game14.2ch.net/test/read.cgi/gamef/1207868978/

574 名前:NAME IS NULL mailto:sage [2008/04/17(木) 01:07:03 ID:???]
SQLite Release 3.5.8 On 2008 Apr 16 (3.5.8)

575 名前:NAME IS NULL mailto:sage [2008/04/17(木) 19:16:35 ID:???]
>574
おお、早速アップ。

576 名前:571 mailto:sage [2008/04/18(金) 17:59:03 ID:???]
C++ api から小物ばかり作り始めてます。

で、ちょいとメンテナンスするのにお手軽 SQLite DatabaseBrowser 1.3 for OS X 使ってます。
少しずつ視野を広げてみようということで>>2 にある TkSQLite 。
スクリーンショット良さげなんですが OS X に tcl 入れたら動くって物ではないですよね。port から tcl をとりあえず入れて TkSQLite ダウンまでして・・止まってます。

577 名前:NAME IS NULL mailto:sage [2008/04/18(金) 23:52:59 ID:???]
>>576
素人はコンパイル済みライブラリ詰め合わせの
ActiveTclインストールしとけ。

578 名前:571 mailto:sage [2008/04/19(土) 01:16:00 ID:???]
>>577
おおお、そんなものが。なんと素人の私にかなりぴったりな気配。
今から調べにいきまふ。

579 名前:NAME IS NULL [2008/04/20(日) 09:11:46 ID:knIGR9c9]
すみません質問です
sqliteを最近知ったのですが、これは他のDBと違って、保存用のエンコードと
phpの開発用のエンコードの違いを意識しなくていいようなものなんでしょうか?
php5の機能として動いているDBというような説明を見たような気がするんですが、、
もしそうなら文字コードは考えなくていいのかなぁと。

あと、mysqlと比べても速度に遜色なしなどの他に、sqliteならではの優位性があれば
教えてください。 お願いします

580 名前:NAME IS NULL mailto:sage [2008/04/20(日) 11:06:42 ID:???]
自分で調べろハゲ



581 名前:NAME IS NULL [2008/04/20(日) 13:34:27 ID:knIGR9c9]
>>580
気に食わない質問なら無視すればいいじゃないですか…
エラソーにしないと気がすまない性格なんですか?

582 名前:NAME IS NULL mailto:sage [2008/04/20(日) 13:52:26 ID:???]
>>581
自分で調べろハゲ

583 名前:NAME IS NULL mailto:sage [2008/04/20(日) 16:49:06 ID:???]
>>581
自分で調べろデブ


584 名前:NAME IS NULL mailto:sage [2008/04/20(日) 19:42:58 ID:???]
PHP厨は全員バカ

585 名前:NAME IS NULL mailto:sage [2008/04/20(日) 20:02:45 ID:???]
>>579
入れるのも出すのもUTF-8にするのを絶対ルールにする。
掟を破ったら死刑。

586 名前:NAME IS NULL mailto:sage [2008/04/20(日) 21:46:39 ID:???]
>>585
たまには UTF-16 のことも思い出してあげてください。

587 名前:NAME IS NULL mailto:sage [2008/04/20(日) 22:12:12 ID:???]
インストール不要どころか、exe内にすら取り込めるのが最大の利点だろうに。
phpで使う利点なんて無いだろ?

588 名前:NAME IS NULL mailto:sage [2008/04/20(日) 22:29:04 ID:???]
MySQL や PostgreSQL を別途立てたりアカウント作ったりしなくていい
ってだけで PHP でも十分利点があると思うが

589 名前:NAME IS NULL mailto:sage [2008/04/21(月) 01:13:31 ID:???]
PHPを使ってる人にはメリットあるんだろうな。俺には想像も付かない世界だが。

590 名前:NAME IS NULL mailto:sage [2008/04/21(月) 11:57:23 ID:???]
いろいろ悩むぐらいなら
「MySQL や PostgreSQL を別途立てたりアカウント作ったりし」たほうがはやくね?




591 名前:NAME IS NULL mailto:sage [2008/04/21(月) 18:06:46 ID:???]
>>579
sqlite(3) そのものは文字コードの変換とかはしない。
なのでたとえば php5 から使うならその世界でという事かな。
sqlite の優位性・・ファイル感覚で使えるって事じゃない?


592 名前:NAME IS NULL mailto:sage [2008/04/22(火) 02:20:50 ID:???]
引っ越しが楽

593 名前:NAME IS NULL mailto:sage [2008/04/23(水) 18:00:03 ID:???]
商用DBMSはローンつきの一戸建て 将来が心配

594 名前:NAME IS NULL mailto:sage [2008/04/26(土) 09:49:30 ID:???]
Webで使っていて、システムをSQLite化しようと思います。
トランザクション処理を行うとファイルロックが不要という理解で良いですか?

595 名前:NAME IS NULL mailto:sage [2008/04/26(土) 11:57:33 ID:???]
良い

596 名前:NAME IS NULL mailto:sage [2008/04/26(土) 14:58:45 ID:???]
sqlite3_errmsg で得られた文字列って解放しちゃいけないのな。
3時間ぐらいはまったぜ。

597 名前:NAME IS NULL mailto:sage [2008/04/26(土) 18:50:16 ID:???]
ソース読んでないけどそういうのは中のリソース文字列をそのまま参照することも多いからな。

598 名前:594 mailto:sage [2008/04/26(土) 23:26:41 ID:???]
>>595
ありがとう!

599 名前:NAME IS NULL mailto:sage [2008/04/28(月) 10:28:56 ID:???]
>>596
SQLite3 C/C++ API のドキュメントにはその通り書いてあると思うけど、
どこか誤解する余地があったりする?

600 名前:NAME IS NULL mailto:sage [2008/04/29(火) 11:21:26 ID:???]
文字列解放戦線



601 名前:NAME IS NULL mailto:sage [2008/04/29(火) 14:20:50 ID:???]
sqlite2.cの2543行目に書いてあるね。
プログラマ側が解放すると、DLLのバージョンの違いで困ったことになるし。

602 名前:NAME IS NULL mailto:sage [2008/04/30(水) 10:58:14 ID:???]
「sqlite2.cの2543行目」ってどこやねん!?

603 名前:NAME IS NULL mailto:sage [2008/04/30(水) 11:32:31 ID:???]
「sqlite2.cの2543行目」だと思うよ。

604 名前:NAME IS NULL mailto:sage [2008/04/30(水) 17:05:56 ID:???]
>>602

なんという質問だよ。w

605 名前:NAME IS NULL mailto:sage [2008/04/30(水) 18:08:33 ID:???]
>>602は質問ではなくツッコミなんだ。
関西人の俺にはわかる。

606 名前:NAME IS NULL mailto:sage [2008/04/30(水) 23:53:47 ID:???]
空気読めない香具師がいるようだな

607 名前:NAME IS NULL [2008/05/02(金) 07:24:43 ID:6IlB3GeO]
>>576
できた?
こちらはでけん。

608 名前:NAME IS NULL mailto:sage [2008/05/02(金) 17:08:57 ID:???]
>>607
tclsh までいった。
その前に tcl が(あれを使うには何だったか追加せよ)とのことで、仰せの通りそれは見つけてゲットしてたんだけど・・どこにどうすればそれが tcl でロードしてくれるのかが判らん。あと、あまりそれに時間さいてなかったり・・
VirtualBox に Linux いれてるのでそちらに走りろうかと軟弱な気持ちもよぎるこの頃です。
この変のツールが(個人的に OS-X) で充実してくれるとうれしい。

609 名前:NAME IS NULL [2008/05/02(金) 18:24:12 ID:EQbqqQ9p]
>>608
あぁ同じ感じ...
このくらい解らにゃ、使っちゃいかんってことか...
windowsバイナリ版がよかったのでmacでもと思ったのだが....
adobe airがらみとかで、TkSQLiteみたいなの必要な奴は増えると思うのだが、OS-Xだといいのないのよねん。

610 名前:NAME IS NULL mailto:sage [2008/05/02(金) 21:17:24 ID:???]


  作  者  に  聞  け  





611 名前:NAME IS NULL mailto:sage [2008/05/04(日) 11:48:23 ID:???]
>>609
>このくらい解らにゃ、使っちゃいかんってことか...

OSXを?

612 名前:NAME IS NULL mailto:sage [2008/05/04(日) 12:19:32 ID:???]
DelphiからSQLite3を扱うサンプルありませんか?

613 名前:NAME IS NULL mailto:sage [2008/05/04(日) 12:20:02 ID:???]
あ、すみません
>>612はDelphi6でお願いします

614 名前:NAME IS NULL mailto:sage [2008/05/04(日) 13:53:00 ID:???]
すいません、ぐぐったら自己解決しました。


615 名前:NAME IS NULL mailto:sage [2008/05/04(日) 13:59:54 ID:???]
>614
自己解決オメ。
できれば、どうやって解決したか簡単にリンクとかカキコしてやると
同じように困ってる人にも手助けになっていいと思う

616 名前:NAME IS NULL [2008/05/04(日) 18:51:37 ID:fzaMDVez]
>>610
作者はmac持ってないらしい。

>>611
tclって何ってレベルからやってまふ。


ちなみにこんな雰囲気。作者は日本人の方らしい。
reddog.s35.xrea.com/wiki/TkSQLite.html

617 名前:NAME IS NULL mailto:sage [2008/05/04(日) 19:15:52 ID:???]
いつだったか忘れたが、俺が最後に Aqua 版の Tk を触った時は
日本語入力出来なかったよ。X11 版ならオーケーかもしれん。

日本語入力しないなら全く気にする必要ないけど。

618 名前:NAME IS NULL mailto:sage [2008/05/04(日) 20:44:29 ID:???]
>>616
教えてくれてありがとうでも>>2にも書いてあるんだ。

619 名前:612 mailto:sage [2008/05/04(日) 20:52:35 ID:???]
>>614
無かったですよ

620 名前:NAME IS NULL mailto:sage [2008/05/05(月) 00:41:04 ID:???]
あるある



621 名前:NAME IS NULL mailto:sage [2008/05/05(月) 00:46:41 ID:???]
其処には無く(無い無い!!)
此処にだけ在る(在る在る!!)
何処にも無い
烏滸めく 姿を 最後に 確と見届けよ!!

622 名前:NAME IS NULL mailto:sage [2008/05/05(月) 00:52:51 ID:???]
おこめくって言葉初めて知った

623 名前:NAME IS NULL mailto:sage [2008/05/05(月) 02:34:18 ID:???]
お米喰って

624 名前:NAME IS NULL mailto:sage [2008/05/05(月) 20:29:54 ID:???]
>>620
どこ?SQLite2しかないけど

625 名前:NAME IS NULL mailto:sage [2008/05/05(月) 22:23:04 ID:???]
もうゆとりも流行らないんだけどな。

google から delphi sqlite で検索して、トップのページからたどれるコンポーネントの
アーカイブの中にソースがある。

3分もかからないぞ?

626 名前:NAME IS NULL mailto:sage [2008/05/07(水) 10:18:34 ID:???]
メモリ上のDBに他のプロセスからデータをフェッチすることはできますか?
ファイル上であれば当然できるますけど、
同じようなことがメモリのDBでもできます?

627 名前:NAME IS NULL mailto:sage [2008/05/08(木) 08:35:21 ID:???]
>>626
RPC でもなんでもお好きなものをどうぞ


628 名前:NAME IS NULL mailto:sage [2008/05/11(日) 01:01:23 ID:???]
delete from hoge where id in (〜〜〜);
とかに配列を bind することは出来ませんか?

629 名前:NAME IS NULL mailto:sage [2008/05/11(日) 12:52:38 ID:???]
何のために?


630 名前:NAME IS NULL mailto:sage [2008/05/11(日) 12:56:36 ID:???]
>>628
何個バインドしたいかしらんけど。
まずIN句を手書きベタ打ちして実行した時間と、
1個ずつループで回して実行した時間を比べてみるべきじゃね?
トランザクション忘れずになー。



631 名前:NAME IS NULL mailto:sage [2008/05/11(日) 14:20:16 ID:???]
・・・単純にその方がプログラム書くのもSQL 書くのも楽そうだなってだけなんだけど。
ログも一行ですむし。

632 名前:NAME IS NULL mailto:sage [2008/05/11(日) 20:41:06 ID:???]
>>631
"where id=?" の形式をプリペアドステートメントにして
トランザクションで囲ってループ回す方が、
配列を作って bind するよりプログラム書くのも簡単だと
断言してやるよ。

ループじゃなくて STL アルゴリズムならより簡潔に書けるし。


633 名前:NAME IS NULL mailto:sage [2008/05/11(日) 20:49:45 ID:???]
SQL以外の言語を知らない人だっているんですよw

634 名前:NAME IS NULL mailto:sage [2008/05/12(月) 01:07:50 ID:???]
えーと、>>628=>>631=>>633か?
言い訳する前にみんなの意見素直に聞いたら?わかんないならもうちょっと勉強しような。

別にSTL使わなくてもいいから、forでループさせて、その中でPreparedStatementにバインドするか、
IN句の中身を生成して一発SQL流せばいい。C言語すら知らない奴がSQLiteなんて使えないし、
forとか文字列生成くらいわかるだろ?

635 名前:NAME IS NULL mailto:sage [2008/05/12(月) 01:16:54 ID:???]
>>634
> C言語すら知らない奴がSQLiteなんて使えないし、

俺も使うべきじゃないと思ってるが、実際使ってるから怖いんだよ。
使えないと思ってるならただの世間知らず。
>>633は皮肉だ。勝手に = とかすんな。w

636 名前:NAME IS NULL mailto:sage [2008/05/12(月) 01:32:03 ID:???]
あー、628 だけど 633 でないです。

prepare させてループさせてbindしてstep は出来てるので問題なしです。
CやJavaなら出来るけど、SQLite (というかデータベース)は初めてなんです。
勉強中にループさせてるのを眺めてたら、そーいえば IN 句ってあったよなーと思って
使えないのかな?って思っただけです。

で、631 の答えと 公式の api を見る限り IN の中に bind させる方法はなさそうですね。

それで思ったのですが、多対多の関係を表す↓のようなテーブルがあったとして、
 CREATE TABLE relation (Left INT, Right INT);
Left の集合から、関係の貼られている Right の集合を得たいときの SQL って
 SELECT DISTINCT Right FROM relation WHERE Left IN (〜〜〜);
とかになるとおもう(未検証)のですがそういうばあいでもループさせて、
C側で積をとったりするんですか?

もしくはそのためにtempテーブルを一つ作って、SQL 一回ですませます?


637 名前:NAME IS NULL mailto:sage [2008/05/13(火) 21:53:36 ID:???]
えーとよくわからんが"サブクエリ"でググれに一票


638 名前:NAME IS NULL mailto:sage [2008/05/13(火) 22:06:19 ID:???]
>>637
だなあ。
つーか、そんな環境依存な話を「どう?」とか聞かれても。
そもそもLeftの集合ってのはどこにあるんだよ。

639 名前:NAME IS NULL mailto:sage [2008/05/13(火) 23:39:36 ID:???]
まぁDB自体初めてならしょうがないでしょ。
SQLとRDBMS自体を勉強した方がいろいろ近道になるかもね。

640 名前:NAME IS NULL mailto:sage [2008/05/14(水) 00:38:56 ID:???]
Left の集合って、ユーザー選択とかか?今日仕事で作ったぜ。



MySQL と Hibernate でw

まぁ、サブクエリでとれるならサブクエリで。とれないならループで良いと思う。
いちいちテーブル作るのもあほくさいしな。



641 名前:NAME IS NULL mailto:sage [2008/05/14(水) 23:50:07 ID:???]
near "": syntax error
ってのがsql実行出来ていても出るんですが。
これって一体なんでしょうか。

642 名前:NAME IS NULL mailto:sage [2008/05/15(木) 00:00:41 ID:???]
ヌルバイトが尻にありませんでした。

643 名前:NAME IS NULL mailto:sage [2008/05/15(木) 00:19:48 ID:???]
SQLiteで、SELECT COUNT(*) from table;を実行するとものすごく時間がかかるのですが、
WHEREなどの条件指定がなくてもCOUNTのコストは線形なのでしょうか。
インデックスにレコード数があると思っていたので、あまりの遅さに驚いています。

644 名前:NAME IS NULL mailto:sage [2008/05/15(木) 00:22:41 ID:???]
>>643
スキーマと件数くらい書きなさいよ・・・

645 名前:NAME IS NULL mailto:sage [2008/05/15(木) 01:10:45 ID:???]
ついでに「ものすごく」「あまりの遅さ」がどれくらいの時間なのかと
explainの結果くらい書いてもいいんじゃなかろうか・・・

646 名前:NAME IS NULL mailto:sage [2008/05/15(木) 02:28:28 ID:???]
>>644-645
すみません。
COUNTのコストが線形かどうかに件数やスキーマはあまり関係ない気がしたので省いていたのですが。

英単語の辞書で、件数は100万件、スキーマは{英単語(TEXT PRIMARY KEY), 意味(TEXT)}です。
PenM1.5G, メモリ768MBのマシンでSELECT COUNT(*) FROM table;に1分くらい待たされます。

647 名前:NAME IS NULL mailto:sage [2008/05/15(木) 02:32:12 ID:???]
SELECT COUNT(ROWID) FROM table; だと?

648 名前:NAME IS NULL mailto:sage [2008/05/15(木) 04:10:24 ID:???]
643ではないが、同じようなテストをやってみた。
内容は25万件程度の Web サーバのログだが、
COUNT(*) でも COUNT(ROWID) でも速度に差がなく200ミリ秒程度だった。
適当な列にインデックス作ってそれを COUNT 対象に指定しても同じだった。
SQLite ってこういうもんだったっけ…?

649 名前:NAME IS NULL mailto:sage [2008/05/15(木) 06:29:45 ID:???]
>>646
それ、マシン起動直後の1回目&ファイルがGB級、じゃないか?
ttp://www.sqlite.org/whentouse.html
ここの「Very large datasets」参照。

650 名前:NAME IS NULL mailto:sage [2008/05/15(木) 08:30:44 ID:???]
>>649
情報ありがとうございます。
起動直後だけでなく、毎回同じくらいの時間がかかります。それと、データベースのサイズは162MBなので、
Very largeというほどでもないと思います。



651 名前:NAME IS NULL mailto:sage [2008/05/15(木) 08:42:37 ID:???]
それもしかしてWindowsじゃないですか?

652 名前:648 mailto:sage [2008/05/15(木) 14:51:42 ID:???]
とりあえず漏れは Windows で試した。
Linux だと違うの?

653 名前:NAME IS NULL mailto:sage [2008/05/15(木) 20:54:55 ID:???]
>>650, ALL
Rubyでテストスクリプト書いた。暇な人よろしく。
require 'rubygems'
require 'sqlite3'
require 'benchmark'

DB_FILENAME = "testdb.sqlite3" #DBファイル名
DEFAULT_COUNT = 5 #デフォルトデータ件数(単位:万件)

#DBファイル削除(件数指定時のみ)
FileUtils.rm_rf DB_FILENAME if ARGV[0] and File.exist? DB_FILENAME
cc = (ARGV[0] || DEFAULT_COUNT).to_i

#DB速度の計測
db = SQLite3::Database.new(DB_FILENAME)
begin
#データを数える
br = Benchmark.measure {
@r = db.execute "SELECT COUNT(*) FROM words"
}
puts "-"*78, "# COUNT DATA : count = #{@r[0]}"
puts Benchmark::CAPTION, br
puts "-"*78, "[END]"
rescue SQLite3::SQLException => ex
#DBアクセス失敗時にデータを作成する
puts "-"*78, "# CREATE DATA : count = #{cc*10000}"
db.execute "CREATE TABLE words (word text primary key, note text)"
cc.times do |i|
print "*"; STDOUT.flush
db.transaction do
10000.times do |j|
db.execute "INSERT INTO WORDS
VALUES(¥"word-#{i}-#{j}¥", ¥"note-#{'*'*100}-#{i}-#{j}¥")"
end
end
end
puts ":done."
#再挑戦
retry
ensure
db.close
end

初回、ruby script.rb 100 って打つとファイルtestdb.sqlite3に100万件作ってテストする。
2回目以降は ruby script.rb だけでオK。

結果は、OSX 10.5, CoreDuo1.83GHz, RAM2GB で
------------------------------------------------------------------------------
# COUNT DATA : count = 1000000
user system total real
0.340000 0.580000 0.920000 ( 0.914474)
------------------------------------------------------------------------------
0.9秒。


654 名前:NAME IS NULL mailto:sage [2008/05/15(木) 22:26:15 ID:???]
0.9秒ってかかりすぎじゃね?

655 名前:NAME IS NULL mailto:sage [2008/05/15(木) 23:06:08 ID:???]
とりあえず、あらゆるクエリーの中で一番軽そうな

SELECT EXISTS( SELECT * FROM words );

の計測結果を希望


656 名前:NAME IS NULL mailto:sage [2008/05/15(木) 23:12:21 ID:???]
!?

657 名前:NAME IS NULL mailto:sage [2008/05/15(木) 23:29:09 ID:???]
>>655
user system total real
0.000000 0.000000 0.000000 ( 0.000364)


658 名前:NAME IS NULL mailto:sage [2008/05/16(金) 00:45:47 ID:???]
>>653
CPU:PenM1.1GHz
Memory:1GB
OS:Linux
FileSystem:tmpfs
------------------------------------------------------------------------------
# COUNT DATA : count = 1000000
user system total real
0.370000 0.440000 0.810000 ( 0.829914)
------------------------------------------------------------------------------

659 名前:NAME IS NULL mailto:sage [2008/05/17(土) 00:35:46 ID:???]
>653
CPU:Core2Duo 6300
Memory: 2GB
OS: WinXP SP3
FileSystem: NTFS

------------------------------------------------------------------------------
# COUNT DATA : count = 1000000
user system total real
0.235000 0.578000 0.813000 ( 0.813000)
------------------------------------------------------------------------------
[END]

これカキコしてるJaneとかきつねさんとか他にもいろいろ動かしてるけど。

660 名前:NAME IS NULL mailto:sage [2008/05/17(土) 01:44:39 ID:???]
なんで0.8〜0.9秒もかかるんだろ…



661 名前:NAME IS NULL mailto:sage [2008/05/17(土) 02:59:09 ID:???]
>>653
一度実行して db 作製 > windows 再起動 > もう一度実行

------------------------------------------------------------------------------
# COUNT DATA : count = 1000000
user system total real
0.601000 1.552000 2.153000 ( 58.174000)
------------------------------------------------------------------------------
[END]

そのままもう一度
------------------------------------------------------------------------------
# COUNT DATA : count = 1000000
user system total real
0.611000 0.590000 1.201000 ( 1.392000)
---------------------------------------

CPU: AthlonXP1700
Memory: 2GB
OS: Windows2000
FileSystem: NTFS

662 名前:NAME IS NULL mailto:sage [2008/05/17(土) 20:44:45 ID:???]
>>661
明らかに seq. scan してるな

663 名前:NAME IS NULL mailto:sage [2008/05/18(日) 02:23:50 ID:???]
で、1分かかると言ってた人はどこいっちゃったんだ。

664 名前:NAME IS NULL mailto:sage [2008/05/18(日) 22:42:58 ID:???]
遅いとか言ってる人はSQLを見直した方がいいかも
V2を使ってるけど今までトラブったことが一度もない
おまけに爆速だ
PHP5のおまけ程度に思っていたけど仕事でいじったオラクルなんぞよりぜんぜんマシだ

665 名前:NAME IS NULL mailto:sage [2008/05/18(日) 23:57:01 ID:???]
SELECT COUNT(*) FROM tbl をどう見なおすの?w

666 名前:NAME IS NULL mailto:sage [2008/05/19(月) 00:00:55 ID:???]
トリガー使ってcountを記録しておくぐらいか。

667 名前:NAME IS NULL mailto:sage [2008/05/19(月) 00:57:32 ID:???]
>>666
それやると UPDATE が爆遅になる悪寒…

668 名前:NAME IS NULL mailto:sage [2008/05/20(火) 02:02:02 ID:???]
>>667
もっと複雑なトリガーをいくつも使ってるけど
お前の想像するよりは速いよ


669 名前:NAME IS NULL mailto:sage [2008/05/20(火) 10:51:59 ID:???]
結局COUNTが1秒近くかかるのはなぜ?
対策は?

670 名前:NAME IS NULL mailto:sage [2008/05/20(火) 13:28:27 ID:???]
>>669
数えてるから。
数えなくても良いようにする。



671 名前:NAME IS NULL mailto:sage [2008/05/20(火) 17:47:30 ID:???]
>>669
100万件のカウントに0.X秒で不満な用途ってなによ。

672 名前:NAME IS NULL mailto:sage [2008/05/20(火) 17:52:58 ID:???]
今まで食べたパンの枚数をたった1秒で思い出せると考えればすごい

673 名前:NAME IS NULL mailto:sage [2008/05/20(火) 19:23:05 ID:???]
>>672

う〜ん、たぁしかにぃ(Daigo風に)

674 名前:NAME IS NULL mailto:sage [2008/05/21(水) 10:40:59 ID:???]
MySQLだと0.01秒もかからない件

675 名前:NAME IS NULL mailto:sage [2008/05/21(水) 15:36:57 ID:???]
innodbでも?

676 名前:NAME IS NULL mailto:sage [2008/05/21(水) 21:24:25 ID:???]
>>674
比較に意味がねえ。
軽トラよりクラウンのほうが速い、って言ってるようなもんだ。

677 名前:NAME IS NULL mailto:sage [2008/05/21(水) 21:39:26 ID:???]
今まで食べたパンの枚数を思い出すか、毎回パンを食べるごとに何枚目かメモってるか
性格の違いというべきじゃね?

678 名前:NAME IS NULL mailto:sage [2008/05/22(木) 14:58:44 ID:???]
普通にSELECTやINSERTするだけなら他とそんなに変わらないのに、
SELECT COUNTだけ軽トラとクラウンの比較だとか意味不明すぎる。

SQLiteが出回り始めた頃、INSERTが極端に遅いと言われ、実際は毎回トランザクションしていたというオチだったように、
これも何か理由があると思うのだが。

679 名前:NAME IS NULL mailto:sage [2008/05/22(木) 15:06:08 ID:???]
理由は明白だと思うが

680 名前:NAME IS NULL [2008/05/22(木) 15:30:28 ID:99Ki/vJe]
TABLEにどんなカラムがあるか調べたいときどうするの?
oracleのdescみたいなかんじ。



681 名前:NAME IS NULL mailto:sage [2008/05/22(木) 20:59:21 ID:???]
>>680
隙間コマンドだっけ?

682 名前:NAME IS NULL [2008/05/23(金) 01:11:57 ID:9fblhP+v]
隙間コマンド??

683 名前:NAME IS NULL mailto:sage [2008/05/23(金) 09:20:09 ID:???]
>>678
まさかテーブルに行数用のフィールドが用意されていないとか?
まさかね

684 名前:NAME IS NULL mailto:sage [2008/05/23(金) 20:12:00 ID:???]
データベース始めたばかりの者ですが
インデックスってどういう時に使う物なんですか?

685 名前:NAME IS NULL mailto:sage [2008/05/23(金) 20:27:54 ID:???]
>>684
インデックスが無いということは、国語辞典でいえば、項目名であいうえお順に並んでない乱雑な状態
目的の語句が見つかるまで先頭から読んでいくのはつらいだろう

686 名前:NAME IS NULL mailto:sage [2008/05/23(金) 21:16:45 ID:???]
>>684
データベース始めた時に使います。

687 名前:NAME IS NULL mailto:sage [2008/05/23(金) 22:00:26 ID:???]
>>684
データベースが遅いと思ったとき

688 名前:NAME IS NULL mailto:sage [2008/05/23(金) 22:33:10 ID:???]
ムラムラしたときに使うんだぜ。
>>684はエロイなぁ。

689 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:26:48 ID:???]
インデックスを作っておくとselectやupdate,insertの速度が上がるの?

>688
それラテックスw

690 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:29:12 ID:???]
insertは変わらんだろ



691 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:49:22 ID:???]
で、どういうタイミングでインデックスは作るもんなの?

692 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:50:03 ID:???]
>>691
>686

693 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:51:29 ID:???]
1回作ったら後は自動?

694 名前:NAME IS NULL mailto:sage [2008/05/23(金) 23:52:15 ID:???]
うん

695 名前:NAME IS NULL mailto:sage [2008/05/24(土) 01:04:57 ID:???]
>>690
インデックス張り過ぎると遅くなると聞いたことが。

696 名前:NAME IS NULL mailto:sage [2008/05/24(土) 01:40:36 ID:???]
DB板自治・質問・雑談スレにどうぞ
pc11.2ch.net/test/read.cgi/db/1056957157/l50

697 名前:NAME IS NULL mailto:sage [2008/05/24(土) 03:03:08 ID:???]
>>690
インデックスもテーブルの一種なんだが。

つまり、インデックスが1つ増えるごとに、
1回のinsert で更新されるテーブルが
1つずつ増えていくんだが。


698 名前:NAME IS NULL mailto:sage [2008/05/24(土) 03:39:48 ID:???]
ちょっと違う

699 名前:NAME IS NULL mailto:sage [2008/05/25(日) 13:03:01 ID:???]
インデックス設定してもinsertは早くならないだろ、って意味だ

700 名前:NAME IS NULL mailto:sage [2008/05/25(日) 20:33:33 ID:???]
だな

しかしSQLiteに変えてからサイト表示が爆速になった
早く知ってればって感じだよ



701 名前:NAME IS NULL [2008/05/26(月) 23:43:09 ID:91P+nn7N]
windowsでsqlite3を使ってるのですが、DOS窓で2バイトキャラクタを表示すると
文字化けしちゃうのですが、(UTF-8だから?)どうしたらイイですか?

702 名前:NAME IS NULL mailto:sage [2008/05/26(月) 23:50:55 ID:???]
>>701
UTF-8の使えるDOS窓(みたいなもの)を使うか、sqlite3コマンドをちゃんとMBCS対応にする。

703 名前:NAME IS NULL mailto:sage [2008/05/26(月) 23:54:58 ID:???]
>>701
UTF-8で2バイト文字ってどんなの?
と言ってみたかった、すまない。

704 名前:NAME IS NULL mailto:sage [2008/05/27(火) 01:50:10 ID:???]
ギリシャ文字とかキリル文字のあたり

705 名前:NAME IS NULL [2008/05/27(火) 15:28:19 ID:5NdwlP2d]
701です。どうもです。
>UTF-8の使えるDOS窓(みたいなもの)
ってどんなのありますか? 教えてください。

windowsで使ってる人はどうしてます?

706 名前:NAME IS NULL mailto:sage [2008/05/27(火) 16:10:22 ID:???]
Cygwin + UTF-8 TeraTerm Pro とか

707 名前:NAME IS NULL mailto:sage [2008/05/27(火) 17:48:59 ID:???]
>>701
UTF-8 は 1〜4 bytes 可変だしょ?半角カナとかは 3 bytes 領域になるよね。

708 名前:NAME IS NULL [2008/05/28(水) 14:54:50 ID:lKeadwlE]
701です。

とにかく、DOS窓でsqlite3をUTF-8のまま使うと文字化けて困ってます。
Cygwinはインストールを試みましたが、随分と時間がかかるので嫌気がさしました。

709 名前:NAME IS NULL mailto:sage [2008/05/28(水) 15:11:14 ID:???]
あの程度で嫌気がさすような人はコンピュータに向いていない

710 名前:NAME IS NULL mailto:sage [2008/05/28(水) 16:23:11 ID:???]
ちょっとググればGUIのフロントエンドも見つかるよ。
俺はフロントエンドはほとんど使わないから使用感はわかんないけど。



711 名前:NAME IS NULL mailto:sage [2008/05/29(木) 01:37:33 ID:???]
>>708
お前みたいなクズには何を教えても無駄だからさっさと消えろカス


712 名前:NAME IS NULL mailto:sage [2008/05/29(木) 20:12:31 ID:???]
>>708
文字コードでぐぐれ

713 名前:NAME IS NULL mailto:sage [2008/06/01(日) 19:24:07 ID:???]
SQLiteSpy

714 名前:NAME IS NULL mailto:sage [2008/06/01(日) 20:18:18 ID:???]
略してSqyだな

715 名前:NAME IS NULL [2008/06/02(月) 21:04:05 ID:zi+V95Us]
CSVのインポートしたいのですが
インポートするファイルは
sqlite3.exeのあるフォルダに入れればよいのでしょうか

sqlite3 -separator , test.db ".import test.csv tablename"


716 名前:NAME IS NULL mailto:sage [2008/06/03(火) 08:44:03 ID:???]
そこまで調べてて、なぜ試してみないの?

717 名前:NAME IS NULL mailto:sage [2008/06/03(火) 10:35:48 ID:???]
やって駄目ならdb消せばいいんだし、怖いなら事前にdbコピーしておけばいい。

718 名前:NAME IS NULL mailto:sage [2008/06/03(火) 17:15:41 ID:???]
1万件くらいの住所みたいなデータをinsertするのに普通どれくらい時間かかる?

今やってるんだがなんかやたらと遅いんだが…10分越えてる…

719 名前:NAME IS NULL mailto:sage [2008/06/03(火) 17:29:15 ID:???]
>>718
1万件なぞ数秒ですがな。
トランザクション忘れてね?

720 名前:NAME IS NULL mailto:sage [2008/06/03(火) 17:33:01 ID:???]
はぁはぁ、まだ終わらないぜ

忘れてました。



721 名前:NAME IS NULL mailto:sage [2008/06/03(火) 22:02:59 ID:???]
2500万件のCSVインポートしたんだけど、
インデックス貼るのに4時間位かかった。
でも、その甲斐あってSelectは爆速だわ。

722 名前:NAME IS NULL mailto:sage [2008/06/03(火) 22:19:14 ID:???]
4時間あれば

あれ?人生あと4時間って言われたらどうしよう

723 名前:NAME IS NULL mailto:sage [2008/06/04(水) 00:59:05 ID:???]
>>721
PRAGMA cache_size = XXXXXX でキャッシュサイズ増やしてる?
明示的に増やしてやらないと確か数 MB 程度しかメモリ使ってくれなくて
ディスクアクセスばっかり繰り返すことになるよ。
まあキャッシュサイズ増やしても SQLite のインデックス作成は遅いが…

724 名前:723 mailto:sage [2008/06/04(水) 01:01:32 ID:???]
スマソ、
209.85.175.104/search?q=cache:g7o4mZAFlzoJ:pc11.2ch.net/test/read.cgi/db/1176223619/n-
の86-87見ると、cache_size 増やしても数時間かかるみたいだな…

725 名前:NAME IS NULL mailto:sage [2008/06/04(水) 08:35:35 ID:???]
>>705
chcp 65001

726 名前:NAME IS NULL mailto:sage [2008/06/04(水) 13:40:19 ID:???]
>>725
それだと日本語入力できないと思うけど。

727 名前:NAME IS NULL mailto:sage [2008/06/04(水) 17:38:44 ID:???]
インデックス作成が遅いって言うけど
インデックスって一度作ったら後は自動なんだろ?
と言うことはあらかじめインデックスを作ったテーブルに
insertする度に遅いインデクス作成も同時に行われると言うこと?

728 名前:NAME IS NULL mailto:sage [2008/06/04(水) 23:31:02 ID:???]
2500万件のcreate indexが4時間ということは、
単純計算で1件あたりの処理にかかった時間は0.000576秒になる。

これが遅いかどうかは人によるだろうね

729 名前:NAME IS NULL mailto:sage [2008/06/05(木) 00:37:31 ID:???]
209.85.175.104/search?q=cache:g7o4mZAFlzoJ:pc11.2ch.net/test/read.cgi/db/1176223619/n-
の86より

> 86 :NAME IS NULL:2007/04/27(金) 19:35:55 ID:???
>  sendmail のログを1〜2年分解析するために
>  Perl + DBD::SQLite で1000万行程度突っ込んだことがある。
>
>  ■環境
>  CPU: Pentium 4 2.4GHz
>  MEM: 1GB
>  HDD: 5400rpm 80GB
>  OS: Windows XP SP2
>  Perl: ActivePerl 5.8.8
>
>  ■こんな処理をやった
>  1.ログの各行毎に、
>  ・時刻、プロセスID、キューID、行全体テキストに分けてmaillogテーブルに突っ込む
>  ・送信主と送信先のメールアドレスとmaillogテーブルの行IDをmailaddrテーブルに突っ込む
>  2.maillogテーブルのキューIDにインデックス作成
>  3.mailaddrテーブルのメールアドレスにインデックス作成
>
>  ■かかった時間
>  1.1000万行の行追加 → 約8分
>  2.キューIDインデックスの作成 → 約3時間
>  3.メールアドレスインデックスの作成 → 約13時間
>
>  ちなみに2と3のインデックス作成はデフォルトだと無限と思えるほど遅かった。
>  PRAGMA cache_size = 100000;
>  してメモリを大量に使うようにしてやっと↑の時間で済んだ。(それでも遅いが…)
>
>  全件挿入後の DB ファイルサイズはメモってなかった。
>  確か 4GB くらいだったと思う。

730 名前:NAME IS NULL mailto:sage [2008/06/05(木) 00:37:54 ID:???]
209.85.175.104/search?q=cache:g7o4mZAFlzoJ:pc11.2ch.net/test/read.cgi/db/1176223619/n-
の87より

> 87 :86:2007/04/27(金) 19:41:04 ID:???
>  で、上記の通り SQLite はインデックス作成が妙に遅かったので、他の DBMS と比べてみた。
>  環境は同じで、行数は1000万じゃやってらんないので、そのうちの一部、80万行程度を材料にした。
>
>  ■SQLite 3.3.5 (DBD::SQLite 1.12)
>  insert: 7:09
>  index1: 0:17
>  index2: 10:49
>  total: 18:15
>
>  ■MySQL 5.0.21 (DBD::mysql 3.0002)
>  insert: 22:45
>  index1: 8:35
>  index2: 8:07
>  total: 39:27
>
>  ■PostgreSQL 8.1.3 (DBD::PgPP 0.05)
>  insert: 83:07
>  index1: 1:07
>  index2: 1:31
>  total: 83:45
>
>  ・SQLite は INSERT は速いがインデックス作成が遅い。
>  ・MySQL は INSERT は SQLite より遅いし、インデックス作成もあまり速くない
>  ・PostgreSQL は INSERT は遅いがインデックス作成がとても速い。
>   (なお、INSERT が遅いのは PP 版のモジュールを使った影響が大きそう。
>    もし XS 版のモジュールが使えたら他と肩を並べられた可能性あり。)
>
>  index1 と index2 で偏りがあるのは、
>  index1 はキューIDで、値が偏りなく分散しているのに対し、
>  index2 はメールアドレスで、一部の値に偏って多数重複している
>  という傾向の違いが影響してそうだ。



731 名前:NAME IS NULL mailto:sage [2008/06/05(木) 00:46:42 ID:???]
>>728

まず着目すべきは>>86
>  ■かかった時間
>  1.1000万行の行追加 → 約8分
>  2.キューIDインデックスの作成 → 約3時間
>  3.メールアドレスインデックスの作成 → 約13時間
の部分。

SQLite は INSERT (1) に比べて CREATE INDEX (2、3) が圧倒的に遅い。

次に>>87
>  ■SQLite 3.3.5 (DBD::SQLite 1.12)
>  insert: 7:09
>  index1: 0:17
>  index2: 10:49
>  total: 18:15
>
>  ■MySQL 5.0.21 (DBD::mysql 3.0002)
>  insert: 22:45
>  index1: 8:35
>  index2: 8:07
>  total: 39:27
>
>  ■PostgreSQL 8.1.3 (DBD::PgPP 0.05)
>  insert: 83:07
>  index1: 1:07
>  index2: 1:31
>  total: 83:45
も要注目。

これを見ると、MySQL も大差なく遅いが、PostgreSQL と比べるとかなり遅いことがわかる。

しかし、>>86 の1000万件の場合と違って CREATE INDEX がそこまで極端に遅くないことから、
レコード数が特に多い場合に SQLite は CREATE INDEX が劇遅になるらしいと思われる。


>>727
> insertする度に遅いインデクス作成も同時に行われると言うこと?

そう。既存レコード数が多ければ多いほどインデックス付きテーブルへの INSERT は遅くなる。

732 名前:NAME IS NULL mailto:sage [2008/06/05(木) 16:05:23 ID:???]
昨日1万件をinsertしてたものだけど
1万件くらいかと思ったら4万件くらいだった。

2万〜3万件辺りからCPU使用率が50%(Pen4 3Gデュアルスレッド?だから実質100%)だった。
発熱により効率が落ちて1秒で2件くらいしか登録できなくなってきたりしたしw

733 名前:NAME IS NULL mailto:sage [2008/06/05(木) 16:06:44 ID:???]
>>732
だからトランザクション宣言しろと

734 名前:NAME IS NULL mailto:sage [2008/06/06(金) 00:35:54 ID:???]
ExcelのVBAからODBCドライバで
日本語の値を取得する方法はどうしてもありませんか?

735 名前:NAME IS NULL mailto:sage [2008/06/06(金) 01:41:48 ID:???]
>>734
日本語でOK

736 名前:NAME IS NULL mailto:sage [2008/06/06(金) 19:26:48 ID:???]
>>734
アーハイハイ
Excelの文字コードとSQLiteの文字コードが違うということ?
それぞれのコードは何なの?

737 名前:NAME IS NULL mailto:sage [2008/06/08(日) 11:57:19 ID:???]
VBAにはStrConvという関数があってだな…

738 名前:NAME IS NULL mailto:sage [2008/06/09(月) 00:02:02 ID:???]
StrConvに文字コード変換なんてあったっけ?

739 名前:NAME IS NULL mailto:sage [2008/06/09(月) 21:55:31 ID:???]
SQLite を UTF-16 LE で使えば変換なんて不要


740 名前:NAME IS NULL [2008/06/10(火) 14:00:00 ID:+qvmQ9/2 BE:1915288597-2BP(999)]
accessで作ったシステムが重くなってきたので、
別の形にリメイクしようと思い、
sqliteを利用したものを作ろうか悩んでいます。
accessのフォームウィンドウのようなGUI環境を作るには、
C++等の言語を使うしかないのでしょうか
何かフリーの言語で構築できればと思っています。

素人も使いやすい独立したアプリケーションが望ましいので、
mysqlのようなサーバー型のDBでは不適切です。
データ部分を社内LANで共有しながら使うようなものにしたいのですが、
どのようにしたらいいのでしょうか

ほとんど素人の質問で申し訳ありません。
ご教授願います。



741 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:11:22 ID:???]
>>740
GUIはSQLiteの範囲外。
きつい言い方だけど、普通のGUIアプリの作り方を勉強してから
出直してきなさい、ということになる。

742 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:18:11 ID:??? BE:1276859276-2BP(999)]
>>741
スレ違いになるかもしれません。
「普通のGUIアプリ」っていうのはいわゆるオブジェクト指向言語各種ってことでしょうか。
sqliteとの相性とかあると思うのですが、
フリーの言語で適当なものはありますか?
VBはフリーじゃないし重いイメージがあったりしますが・・・

743 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:24:11 ID:???]
>>742
例えば Visual Basic 2008 Express Edition なら無料

744 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:30:42 ID:??? BE:729634638-2BP(999)]
あまり聞きなれないものですがとっつきやすそうではありますね。
一般的にはどういう言語を使うものなんでしょう。
参考になるご意見ありがとうございました。

745 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:36:49 ID:???]
C#とかVBとかの.NETな言語でやれば、Expressエディションは無料だし
System.Data.SQLiteとかいうフリーのラッパが使えるんじゃね?

746 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:47:44 ID:??? BE:608028454-2BP(999)]
ちなみにそれらで作ったものを売っても偉い人には怒られないですか?

747 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:52:09 ID:???]
もうキーワードは十分集めただろ

748 名前:NAME IS NULL mailto:sage [2008/06/10(火) 14:55:15 ID:??? BE:1368063195-2BP(999)]
はい。
あとはあれこれぐぐってきます。
ありがとうございました。

749 名前:NAME IS NULL mailto:sage [2008/06/10(火) 21:59:48 ID:???]
>>745
System.Data.SQLiteはラッパーじゃないよ。C#で書き直しているよ。


750 名前:NAME IS NULL mailto:sage [2008/06/10(火) 22:07:45 ID:???]
環境は

Windows XP Pro SP2
Visual Basic.NET 2008 Express Edition
System.Data.SQLite 1.0.49.0

データベースエクスプローラの接続の追加からもプロジェクトにデータベース追加
でもSQLiteを選択すると

> ファイルまたはアセンブリ 'Microsoft.VisualStudio.Data, Version=8.0.0.0, Culture
> =neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の1つが読
> み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照
> に一致しません。(HRESULTからの例外: 0x80131040)

というエラーが出て進めません。System.Data.SQLiteのフォーラムにも同様の症状
の報告があり、参照が追加されているか確認しろとのコメントが書かれてますが、
参照は追加されてます。 System.Data.SQLiteを使って問題ない方は居るんですか?
こちらが単に勉強不足で設定が不完全なだけなんでしょうか?



751 名前:NAME IS NULL mailto:sage [2008/06/10(火) 23:38:56 ID:???]
>>750
Vista x64でVC#2008Proだけど使えた。インストーラでちゃんとインストールした?

752 名前:NAME IS NULL mailto:sage [2008/06/11(水) 07:07:07 ID:???]
>>751
インストーラは使いました。
ちょっと気になったのは参照の追加眺めても

Microsoft.VisualStudio.Data

が一覧にはありません。これはエディションの違いから
なのか...少なくともVC#2008Proなら使えてるんですね。
VC#2008EEで試す価値があるのか分かりませんが、時間
割いて試してみますm(__)m


753 名前:NAME IS NULL mailto:sage [2008/06/11(水) 07:59:51 ID:???]
今朝はちょっと時間的に余裕がありましたのでVC#2008EEを
インストールして試しましたが同じエラーになりました。

以前MySQL関連を眺めていた時にExpress Editionでは出来
ないとかを見かけたんですが、これもやはりEEでは問題があ
るのかも? 一応サイトの説明にはEEでも問題なく動く感じで
は書かれてるのですが...ググって見たりすると試した方の
ブログとかを見つける事が出来ましたが、いずれも最新のバ
ージョンではない様で、接続の追加ダイアログがこちらで試し
ているものとは違ってます。単に1.0.49.0の問題なら違うバー
ジョン探して試した方が良いのかも? サイトには過去バージ
ョンが残っているか探してませんが、これはまた時間見つけ
て探してみます。

754 名前:NAME IS NULL mailto:sage [2008/06/11(水) 14:54:13 ID:???]
>>740
accessの置き換えでGUIフォームがほしいなら OpenOffice.org の Base とか試してみたら?
JDBC/ODBC つかえてSQLite も使えた気がするし。
まぁ Base 使うなら SQLite にこだわる必要もないかも知れんけど…

755 名前:750 mailto:sage [2008/06/11(水) 20:42:34 ID:???]
サイトには古いバージョンが沢山あったので少しずつ戻ってみました。
しかし、1.0.46.0からVB2008EEやC#2008EEの開発環境認識しないの
か、デザインタイムの設定が出来ません。1.0.44.0も同様でしたので、
それ以前のバージョンは試しませんでした。1.0.46.0の日付が2007/09/30
なのでまだVS.NET 2008がリリースされる前だったかな〜っと^^;

で、結局バージョンでの不具合とかではなさそうな結果だったのです
が、Pro版はVS.NET2003まではどうにかバージョンアップしてたんで
すが...サンデープログラマーのお小遣いでは現在断念してEEで
我慢しながらだったのですが、まずはお小遣い貯めるのが先決かな(T_T)

756 名前:NAME IS NULL mailto:sage [2008/06/11(水) 20:50:32 ID:???]
>>755
そんなことグダグダやってるくらいなら
Ruby on Railsでもやったほうが
ずっとラクダとおもうよ。

757 名前:NAME IS NULL mailto:sage [2008/06/11(水) 21:05:49 ID:???]
他人の敷いたレールにとらわれ、不満を述べる人生は要らない

758 名前:750 mailto:sage [2008/06/11(水) 21:24:00 ID:???]
>>756
Ruby on Railsをググってざっと見てみましたが、Webアプリとかの
話っぽい感じがしました。単独のWinアプリでデータベースが7GB
程度になる予定でSQLiteにたどり着いたのですが、VB.NET以外
にもプログラム経験はありますが、何分仕事としてではなく余暇の
限られた時間でサクッと作る予定で居たので...いや、そんなつ
もりでVS.NET2003 Proはバージョンアップしてたんですが、気が
付けば2005がリリースになり、今では2008って(;一_一) まあ、情
け無い話でが、もう何年も経ってます(T_T)

開発環境の進化で随分楽に開発が進むかな〜っと甘い気持ちが
ダメなんでしょうね。でも、今回のVB.NET2008EEとSystem.Data.SQLite
の組合せが本来の動作してくれたら凄くいい感じがしたんですよ。
MySQLよりもSQLiteの方が単独アプリでは無駄も少なく早い処理が
出るんじゃないかな〜っと。SQL Server 2005 Express Editionの遅さ
には泣きました。

本家Forumの進展に期待しながら、動きが無かったら書き込んでみます。

長々と失礼しましたm(__)m

759 名前:NAME IS NULL mailto:sage [2008/06/11(水) 21:30:22 ID:???]
(;一_一)

760 名前:NAME IS NULL mailto:sage [2008/06/11(水) 21:49:52 ID:???]
>>758
無駄が少なく速い処理がしたいならC/C++でやれば良いのに。
7GBのデータ表示・編集してるとVBじゃどっかで破綻しそうな気が



761 名前:NAME IS NULL mailto:sage [2008/06/11(水) 22:19:24 ID:???]
>>758
7GBのデータ共有をファイル型DBで、って時点でアウトだ。
大体そんなファイル、SQLiteもWindowsもまともにハンドリングできない。
あきらめてMySQL/PostgreSQL+Webアプリで勉強し直せ。


762 名前:750 mailto:sage [2008/06/11(水) 23:08:40 ID:???]
>>760
トータルで7GB程度のデータベースですが、表示や編集自体は
その一部なので問題ないとは思ってます。C/C++がVBよりも劇的
に効率がいいって程変わらない様にも思える時代になったと思っ
てましたが...そんな部分も仮に踏まえてもSQL Server 2005 EE
よりは遥かに高速なSQLiteに補ってもらおうかと思ってました^^

>>761
データ共有は全く考えておりません。でも、やはり7GBが1つの
ファイルになるSQLiteでは無茶ですかね? 無難にMySQLに戻
ろうかな〜っとしばらく悩んでみます。

助言ありがとうございましたm(__)m

763 名前:NAME IS NULL mailto:sage [2008/06/11(水) 23:44:47 ID:???]
いやその程度のファイルサイズはSQLiteにとって問題ない

764 名前:NAME IS NULL mailto:sage [2008/06/12(木) 01:34:33 ID:???]
ンGBの SQLite DB を扱った経験のある俺が>>763に同意する。
>>761はステレオタイプでものを語るな。

>>760も見当違い。
重いデータ処理を DBMS にやらせればフロントエンドとなるプログラミング言語の差なんて無視できる程度のもの。
どうして今 LL がこんなに流行っているか考えてみろ

が、>>750は別の次元でダメなんじゃないかと思う…

>>762
MySQL より SQLite の方が断然速いというほどの違いもないのだから、
MySQL なら使えるというなら MySQL に戻った方が良いと思われ。
MySQL なら使えるならだけどね…

765 名前:NAME IS NULL mailto:sage [2008/06/12(木) 06:52:07 ID:???]
>>764
そんじゃSQLiteでデカイDB使う時のコツを教えれ。
俺は1テーブル300万件あたりで重くて重くて困ったけど。
いわゆるVery large datasets問題。


766 名前:NAME IS NULL mailto:sage [2008/06/12(木) 09:15:29 ID:???]
俺も764に同意。
>>765
Very large Databases問題という言葉に全て責任を押しつけているように見えるけど。
対処法を調べるとか、プロファイリングするとかした?
情報が少なすぎて何ともいえない。

767 名前:NAME IS NULL mailto:sage [2008/06/12(木) 14:50:00 ID:???]
35Gぐらいだけど問題ないよ。
vacuumが大変だから、dump/loadしてるけど。

768 名前:NAME IS NULL mailto:sage [2008/06/12(木) 20:03:33 ID:???]
>>755
sqlite.phxsoftware.com/forums/t/1038.aspx
ぐぐったらすぐにこんなものを見つけたぞ。

769 名前:750 mailto:sage [2008/06/12(木) 20:51:22 ID:???]
>>768
やはりデザインタイムはVB2008EEとでは動かないんですね。
なんか一安心っていうか...まあ、MSも無償提供している物
にはやはりある程度の制限はつけてるって事ですかね^^;
2005EEなら動くらしいが、一度2008環境に慣れると戻るのが
辛かったりします。

>>764
別次元でダメなのは自覚してるかも(;一_一)
プログラミング暦だけはアホの様に30年とかなんですが、
DBは今一苦手な分野なのかも。

MySQLとSQLiteで格段の差があるとは思っている訳では
無いのですが、スタンドアロンなDBソフトに特にMySQLは
必要無いなと感じたり、MySQL関連の開発環境でも実は
Express Editionでは不可能と明記されたものがあり、止
めたんですよ。今回SQLiteのラッパーはEEでもOK的な
感じで書かれてたので試したのですが...

金銭的にケチって無駄な時間すごし過ぎてる感じなので
資金繰りして再度MSDN Proサブスクリプションの復活を
検討するのが最短距離に思えてきました。

770 名前:NAME IS NULL mailto:sage [2008/06/12(木) 21:00:29 ID:???]
(;一_一)



771 名前:NAME IS NULL mailto:sage [2008/06/12(木) 21:29:21 ID:???]
>>769
アクセス使っとけ…

772 名前:NAME IS NULL mailto:sage [2008/06/12(木) 21:39:08 ID:???]
>>769
アクセスには7GB無理

773 名前:NAME IS NULL mailto:sage [2008/06/12(木) 21:40:10 ID:???]
アンカミス
>>769ではなくて>>771


774 名前:NAME IS NULL mailto:sage [2008/06/12(木) 22:21:21 ID:???]
じゃ OOo Base でもつかっとけ

775 名前:NAME IS NULL mailto:sage [2008/06/12(木) 23:54:33 ID:???]
>>765
コツもなにも、普通に使うだけ。

敢えて挙げるなら、
トランザクション有効化するとか
PRAGMRA cache_size をデフォルトより大幅に増やすとか
全件 INSERT 終了してから CREATE INDEX するとか
…まあこのスレに書いてあることばっかりだな。

776 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:10:45 ID:???]
>>769
使えないわけじゃないだろう?デザインタイムで使えないだけで


777 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:14:00 ID:???]
>>775
DB一般のチューニングじゃなくてさ。

たとえば1テーブル7GBとかのファイルで、開いた直後にCOUNT(*)すると
分単位で返ってこなかったりする。しないか?
1つのDBを開きっぱなしなら最初だけ我慢すればいい。
でも「クライアントアプリでデータファイル代わり」なんて用途だと
データファイルを開くたびにこれが発生するわけで。

そりゃ回避方法や実装テクニックはいろいろあるけど、
あまりアクロバットでないSQLite固有の技があるなら知りたい、と思ったの。


778 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:18:37 ID:???]
そもそもいきなりCOUNT(*)する時点で設計が変だと思わないかなあ

779 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:21:25 ID:???]
>>778
そーゆー突っ込みはなしで。話がややこしくなるから。要件とかいろいろあんだから。


780 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:23:59 ID:???]
やれやれ、話にならんわ



781 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:30:50 ID:???]
count(*)厨w

782 名前:NAME IS NULL mailto:sage [2008/06/13(金) 00:54:12 ID:???]
>>643-679

783 名前:NAME IS NULL mailto:sage [2008/06/13(金) 01:15:40 ID:???]
>>779みたいなクズってさ、要件だのなんだの言うくせに
自分の好きなDBMSは銀の弾丸扱いするんだよなw


784 名前:NAME IS NULL mailto:sage [2008/06/13(金) 01:42:19 ID:???]
前スレでも前々スレでも出てたけど、SQLiteのCOUNT(*)は実装が糞。

ttp://blog.jojo.jp/?eid=440775
ichiro.maruta.googlepages.com/storageの使い方


785 名前:NAME IS NULL mailto:sage [2008/06/13(金) 01:51:26 ID:???]
やっぱそうだったのか!
俺も今5千件くらいのデータをチェックする時にcountで取得してからループしてたけど
あり得ないくらい遅かったんで何でだろうとずっと悩んでいた。

SQLiteってダメな子なん?

786 名前:NAME IS NULL mailto:sage [2008/06/13(金) 02:06:51 ID:???]
別のDBでの話だけど、countで件数取得した後に別のプロセスがinsertしてて、
先の件数をあてにしてるコードが落ちるバグを出して悩んでるやつがいた。

787 名前:NAME IS NULL mailto:sage [2008/06/13(金) 09:55:39 ID:???]
>>776
デザインタイムの昨日は使えないけど、使えないわけじゃ
ないですね。ただ、折角統合環境の機能としてある機能が
利用出来ないと魅力は半減かな〜っとわがままなだけで
すかね?^^;

>>774
OOo Baseは秋にリリースされるVer3が落ち着いたら触ろ
うかな〜っと思ってます。2.4でも十分なのかもですが...

788 名前:NAME IS NULL mailto:sage [2008/06/13(金) 10:33:49 ID:???]
>>785
> countで取得してからループしてた
kwsk

789 名前:NAME IS NULL mailto:sage [2008/06/13(金) 12:00:43 ID:???]
>>784
前スレ前々スレでそれらしいレスが見付けれなかったんだけど、それは今もそうなん?
挙げられている URL も 2006 年で古いっぽいし。

試しに漏れの環境 (3.5.6) で 100万件の "select count(*) from hoge;" が 0.5sec. 未満程度。

790 名前:NAME IS NULL mailto:sage [2008/06/13(金) 12:24:19 ID:???]
>100万件の "select count(*) from hoge;" が 0.5sec. 未満程度。

Windows 起動直後でも?



791 名前:NAME IS NULL mailto:sage [2008/06/13(金) 13:06:11 ID:???]
0.5秒というのも、MySQLやSQL Serverから見たら激遅だけどな。
0.01秒かからないから。
COUNTが遅いのか、テーブルを開いて準備するのが遅いのか、キャッシュが不足しまくるのか、GiB単位になると内部の処理が変わるのか。

792 名前:NAME IS NULL mailto:sage [2008/06/13(金) 13:46:49 ID:???]
InnoDBだと遅いぞ。

793 名前:NAME IS NULL mailto:sage [2008/06/13(金) 14:04:23 ID:???]
countがcountしてるから遅いだけだろ。

794 名前:NAME IS NULL mailto:sage [2008/06/13(金) 18:17:44 ID:???]


795 名前:NAME IS NULL mailto:sage [2008/06/13(金) 18:24:55 ID:???]
count が遅いのって、where 句がある場合もほかの DBMS とそんなに差が出て?

796 名前:NAME IS NULL mailto:sage [2008/06/14(土) 01:15:07 ID:???]
確かに SQLite の count は遅いがその1点だけで

>>761
> 7GBのデータ共有をファイル型DBで、って時点でアウトだ。
> 大体そんなファイル、SQLiteもWindowsもまともにハンドリングできない。

を断言するのはだいぶ無理があるな。

797 名前:NAME IS NULL mailto:sage [2008/06/14(土) 03:34:23 ID:???]
条件なしのcountだったら、テーブルの全データの数を
あらかじめ保存しておけばいいわけで、
あまり参考にはならないな。

798 名前:NAME IS NULL mailto:sage [2008/06/14(土) 11:25:55 ID:???]
SQLiteのためだけに、わざわざINSERT/DELETEごとに足したり引いたりするSQLを書かないといけないの

799 名前:NAME IS NULL mailto:sage [2008/06/14(土) 12:22:50 ID:???]
>>798
別にそんなことしなくても使えるが
何でそんなに叩きたいのか意味腑

800 名前:NAME IS NULL mailto:sage [2008/06/14(土) 13:05:46 ID:???]
そもそも自分のニーズに合わないなら無理に使う必要ねえじゃん



801 名前:NAME IS NULL mailto:sage [2008/06/14(土) 13:33:32 ID:???]
count厨、あたまわりーなw

802 名前:NAME IS NULL mailto:sage [2008/06/14(土) 16:35:41 ID:???]
>>799
トリガーで INSERT/DELETE 時に±すればいいのか。
ちょっと面倒だが…まあ SQLite と仲良くつきあっていくには仕方ないか。

ただ、全件の count だったらそれでいいかもしれないけど
特定条件の count とか考え出すとかなりややこしくなってくるね。
ま、そういう場合は素直に MySQL 使えってことだろうな。

>>774
> OOo Baseは秋にリリースされるVer3が落ち着いたら触ろうかな〜っと思ってます。
> 2.4でも十分なのかもですが...

要するに単にやる気無いんだろ。
違うなら 3.0 を待つ理由を言ってみろよ

803 名前:NAME IS NULL mailto:sage [2008/06/14(土) 18:47:00 ID:???]
>> 802
3.0待つ理由は単にBaseの2.xは最初のバージョンになるので
敬遠してます。現時点で人柱になる余裕が自分自身無いので
安定を待ってるってのが甘えという事なら...既に数回は試し
たのですが、ヘルプを全く見ずに使える域には達してません。
いや、達して無いのが自分自身のレベルなのも承知してます
が、OOoの他のWriterとCalc、Drawはヘルプ無しで利用してま
す。いや、同列で語れるものではないですけど、それらのバグ
とも付き合ってますので、単にトラブルを最小限にしたいだけ。

やる気が無いととらわれても仕方ないですねm(__)m まっ、色々
と事情があるんです(T_T) そもそも、OOo Baseが使いたい訳じ
ゃなく、SQLiteがVB2008EEで使いたかったんです。デザイン時
をゴリゴリと統合環境ではなく別の手段でするか悩む所ですが、
ちょっとお小遣いと相談中...

文章が下手でだらだら申し訳ないですm(__)m

804 名前:NAME IS NULL mailto:sage [2008/06/14(土) 19:08:05 ID:???]
(;一_一)

805 名前:NAME IS NULL mailto:sage [2008/06/15(日) 01:28:14 ID:???]
言い訳好きなのね

806 名前:NAME IS NULL mailto:sage [2008/06/15(日) 02:48:17 ID:???]
countが遅いと言ってるやつ、countの前後にBEGIN/END TRANSACTION入れたらどうなる?
ttp://ichiro.maruta.googlepages.com/storage%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

807 名前:NAME IS NULL mailto:sage [2008/06/15(日) 03:06:30 ID:???]
それ784で出てる。
しかしなんでそれで速くなるんだろう。

808 名前:NAME IS NULL mailto:sage [2008/06/15(日) 03:16:29 ID:???]
OOo Writer や Calc 等もこれまでのバージョンアップで大きく変わったとは思えないが…
>>803 は 3.0 になってもなんだかんだ理由をつけて結局 Base をまともに(使えない|使わない)に10万ペリカ

809 名前:NAME IS NULL mailto:sage [2008/06/15(日) 05:38:32 ID:???]
SELECT COUNT(*) で BEGIN TRANSACTIONしてみたけど、速くならなかった。
むしろわずかに遅くなった。
Windows 32bit + Core 2 + 2GBで、30万件5MB、30万件100MBで試した。
時間は5MBが0.084s、100MBが1.05s。

ソース追ってみたけど(10万行近くあるから本当にざっと見ただけだが)、テーブルの行数を求めるというような命令や関数は見当たらなかった。
SELECT COUNT(*) FROM tblは、SELECT * FROM tblと似たSQLを発行して、単純に結果の行数を1つ1つ数えているように見えた。
EXPLAINすると、SELECT * FROMだと結果を1行読んでセットする部分が、SELECT COUNT(*)だとAggStepというよくわからんオペコードに置き換わっていただけ。(Aggはアグレッシブモードの略っぽい?)
アマルガムされた(CVSのじゃなくてまとめたやつ)Cソースの46289行や66410行から下あたりがミソっぽいけど、俺の頭では理解不能orz

結論としては、高速化するなら新たにテーブルを作り、そこにあらかじめ数えた行数を格納するしかないという感じか。
ちなみにデータベースファイルが肥大化しても、別テーブルであればそれほど速度に影響は無かった。
インデックスのありなしも試したかったが眠いので誰か頼む

810 名前:NAME IS NULL mailto:sage [2008/06/15(日) 12:11:00 ID:???]
>> 809 検証乙.

>100MBが1.05s。

 これは database 作製直後? >>661 見ると Window 起動直後に
database にアクセスするともっと時間が掛かるように見えるけど.



811 名前:NAME IS NULL mailto:sage [2008/06/15(日) 12:42:56 ID:???]
OS起動直後指定ってのはどういうこだわり?

812 名前:NAME IS NULL mailto:sage [2008/06/15(日) 13:05:55 ID:???]

  別に直後でなくてもいいけど,database ファイル作成直後に count(*) したら
OS のキャッシュでファイルの読み自体が早くなるでしょ?起動直後ならその可能性
を確実に潰せる.


813 名前:NAME IS NULL mailto:sage [2008/06/15(日) 15:43:08 ID:???]
じゃあむしろ、キャッシュしてた方が COUNT(*) 自体の本来の性能を測れるんじゃね?

814 名前:NAME IS NULL mailto:sage [2008/06/15(日) 15:48:56 ID:???]
>>813
キャッシュされてるときされてないときの両方計ればいいお

でも大体はキャッシュなんかどっかボーンだから
ノーキャッシュな感じで計測するのがステキングだ

815 名前:NAME IS NULL mailto:sage [2008/06/15(日) 16:05:13 ID:???]
中東の笛みたい

816 名前:NAME IS NULL mailto:sage [2008/06/15(日) 16:57:09 ID:???]
日本語でおk

817 名前:NAME IS NULL mailto:sage [2008/06/16(月) 14:04:04 ID:???]
Firefox 3 のプロファイルには
なんか一杯sqliteファイルが置いてあるぞ。

818 名前:NAME IS NULL mailto:sage [2008/06/16(月) 14:38:33 ID:???]
Firefox2 から SQLite を導入し始めていますから、さほど驚くことでもないかと。

819 名前:NAME IS NULL [2008/06/17(火) 16:57:40 ID:HbUMmgrG]
Jane Style の Borad.db の中身を見たいんだけど、バイナリエディタで見ると
> ** This file contains an SQLite 2.1 database **
と書いてある。
www.sqlite.org/download.html は 3 ばかりだし
sourceforge.net/projects/sqlitebrowser/ の 1.1 でも開けない。
CUI でも GUI でもいいんだけど 2.1 のファイル開ける win 用ソフトどっかにない?

820 名前:NAME IS NULL [2008/06/17(火) 16:59:56 ID:mS8AeiML]
中年だと思ってない中年じじー死ね 中年だと思ってない中年じじー死ね
中年だと思ってない中年じじー死ね 中年だと思ってない中年じじー死ね
中年だと思ってない中年じじー死ね 中年だと思ってない中年じじー死ね
中年だと思ってない中年じじー死ね 中年だと思ってない中年じじー死ね
その老いたすがた気持ち悪すぎ
その老いたすがた気持ち悪すぎ
その老いたすがた気持ち悪すぎ
その老いたすがた気持ち悪すぎ
死ぬとき このレスの事思い出してくれよ
ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・)



821 名前:NAME IS NULL mailto:sage [2008/06/17(火) 17:02:59 ID:???]
俺は中年なのにイケメンだから困る

822 名前:NAME IS NULL mailto:sage [2008/06/17(火) 17:14:00 ID:???]
と思ったらテンプレ見逃してたよ。TKSQLiteでいけた。
中年だと思ってる中年だけど吊ってくる

823 名前:NAME IS NULL mailto:sage [2008/06/17(火) 22:16:52 ID:???]
>>818
それは知らなかった。
世の中データ連携が便利になったものだ。

824 名前:NAME IS NULL mailto:sage [2008/06/18(水) 00:22:22 ID:???]
C++でのSQLiteでsqlite3_value(Mem)のバッファ保持できないもんかな
全データ取得した後動的に変換して取得したいのに消えてしまう

825 名前:NAME IS NULL mailto:sage [2008/06/18(水) 14:08:15 ID:???]
SELECT * FROM Hoge Where name like '%ほげほげ%'

SELECT * FROM Hoge Where name like '%ほげほげ%' order by name
で処理速度が5倍近く変わるんですが、そういうものですか?
総件数10万件程度で、前者は2秒、後者は0.4秒程度です。
nameにはインデックスがついています。

並び替えた方が早いのがよく分かりません。'ほげほげ%'ならまだそういうこともあるのか
と思うのですが・・・

826 名前:NAME IS NULL mailto:sage [2008/06/18(水) 18:42:31 ID:???]
SELECT * FROM Hoge Where name and name like '%ほげほげ%';

827 名前:NAME IS NULL mailto:sage [2008/06/18(水) 20:05:16 ID:???]
t

828 名前:NAME IS NULL mailto:sage [2008/06/18(水) 22:52:18 ID:???]
>>826
すみません、それがどういう意味なのか分からないのですが、そのまま投げてみたら
ヒット数が12787件から59件に減少しました。

ひょっとしてそれは高速化の定石で、ヒット数が減るのはこちらの何らかのミスでしたら
ごめんなさい。

829 名前:NAME IS NULL mailto:sage [2008/06/19(木) 02:13:46 ID:???]
>>825
カーディナリティの問題じゃないの?


830 名前:NAME IS NULL mailto:sage [2008/06/19(木) 02:46:49 ID:???]
困ったときの explain query plan




831 名前:NAME IS NULL mailto:- [2008/06/20(金) 12:50:31 ID:???]
SSHが使えない無料レンタルサーバでsqlite3使ってる人います?

832 名前:NAME IS NULL mailto:sage [2008/06/20(金) 14:25:41 ID:???]
>>831
質問の仕方が悪いよ。何が聞きたいんだ。
そもそも、SSHとsqlite3って関連がないだろう。

833 名前:NAME IS NULL mailto:sage [2008/06/20(金) 17:33:26 ID:???]
System.Data.Sqlを使ってるんですが、同じクエリを実行してもものすごく時間がかかる時がないですか?
普通なら0.01秒で終わるクエリが、稀に30秒近くかかることがあります。
PRAGMA CACHE_SIZEを大きくしても出る時は出る模様で、いまいち発生するタイミングがつかめません。
.NETのガベージコレクションが関係しているのかな?と思ってるのですが、どなたか同じ体験をしたり
回避方法をご存じの方はいらっしゃらないでしょうか。

834 名前:NAME IS NULL mailto:sage [2008/06/21(土) 06:29:05 ID:???]
>>831
そもそもSQLiteが使える無料レンタルサーバってどこよ?

835 名前:NAME IS NULL mailto:sage [2008/06/21(土) 08:12:12 ID:???]
>>834
xreaとかだろ。
あとphp5.x以上+pdo-sqliteが入ってればphp経由で使えるし。

836 名前:NAME IS NULL mailto:sage [2008/06/21(土) 14:08:16 ID:???]
>833
パフォーマンスモニタでヒープサイズとGC発生を監視したら?

837 名前:NAME IS NULL mailto:sage [2008/06/21(土) 19:16:13 ID:???]
select count(*)で一つ一つ存在確認しながらinsertをやってるんだけど
1000件程度で1分もかかっちゃうんだ。
なんか速くするいい方法無い?俺のやり方がおかしいからこんなに遅いのかな?
もちろんトランザクションはループの前に置いてます。

838 名前:NAME IS NULL mailto:sage [2008/06/21(土) 19:18:26 ID:???]
毎回count(*)で確認してるってこと?
もうちょっとDBMSを信用しろよ。w

839 名前:NAME IS NULL mailto:sage [2008/06/21(土) 19:26:00 ID:???]
ふつーは INSERT OR REPLACE とかすんじゃないかな?

840 名前:NAME IS NULL mailto:sage [2008/06/21(土) 19:36:31 ID:???]
信用って?

あるリストのデータを登録するんだけど、このリストはあとからちょこちょこデータを追加したりする
このリストを何とか高速に重複無く登録したい。

1行ずつ先にselectで検索して取得したcountが1ならスルー、0なら登録って方法でやってるんだけど





841 名前:NAME IS NULL mailto:sage [2008/06/21(土) 20:01:33 ID:???]
not exists
って知ってるか?

842 名前:NAME IS NULL mailto:sage [2008/06/21(土) 20:06:17 ID:???]
勉強になります。

843 名前:NAME IS NULL mailto:sage [2008/06/21(土) 20:18:17 ID:???]
>>840
この問題の答えを聞いて解決したとしても今後ろくな事がなさそう。
普通にSQLを勉強することを奨める。

844 名前:NAME IS NULL mailto:sage [2008/06/21(土) 20:52:12 ID:???]
どうにかしてcount(*)の話がしたいだけなんだろw

845 名前:NAME IS NULL mailto:sage [2008/06/22(日) 00:08:38 ID:???]
SQLの勉強におすすめの良書があれば教えてください。
ネットの情報でもいいのですが、出来るだけわかりやすく網羅してあるところがいいでせう。

846 名前:NAME IS NULL mailto:sage [2008/06/22(日) 00:19:10 ID:???]
SQLの絵本

847 名前:NAME IS NULL mailto:sage [2008/06/22(日) 00:20:42 ID:???]
SQLポケットリファレンス

848 名前:NAME IS NULL mailto:sage [2008/06/22(日) 00:29:21 ID:???]
萌えるSQL(だったっけ?オーム社のやつ)

849 名前:NAME IS NULL mailto:sage [2008/06/22(日) 03:20:33 ID:???]
必要なのはSQLの本じゃなくてデータベース設計の本だろ

850 名前:NAME IS NULL mailto:sage [2008/06/22(日) 03:21:13 ID:???]
両方だろうな



851 名前:NAME IS NULL mailto:sage [2008/06/23(月) 12:03:15 ID:???]
Head First SQL

852 名前:NAME IS NULL mailto:sage [2008/06/24(火) 00:05:10 ID:???]
いろんな本を紹介してくれてありがとう。
だけどさ、俺、今、本買う金もないんだw
さしあたってexistsの効率的な扱い方を教えてくれないか?

853 名前:NAME IS NULL mailto:sage [2008/06/24(火) 00:43:50 ID:???]
exists ()
ってやると高率的だお

854 名前:NAME IS NULL mailto:sage [2008/06/24(火) 00:46:06 ID:???]
>>852
『習うより慣れろ』
という素晴らしい言葉がある

855 名前:NAME IS NULL mailto:sage [2008/06/24(火) 17:20:05 ID:???]
>>852
www.geocities.jp/mickindex/database/idx_database.html

856 名前:NAME IS NULL mailto:sage [2008/06/24(火) 17:57:46 ID:???]
まあ
『習ってから慣れよ』
という素晴らしい言葉もある

857 名前:NAME IS NULL mailto:sage [2008/06/25(水) 00:03:39 ID:???]
すごく親切な人たちばかりで感激だお

858 名前:NAME IS NULL mailto:sage [2008/06/25(水) 01:40:02 ID:???]
みんなありがとう、だけど、exists使うより
limit 1設定した方が1000件あたりで15秒短縮されたよ。
exists使うと見つけた段階で終了するとか>855に書いてあったけど
なにやらexists設定したら余計に時間かかるようになった。
MySQLとは実装が違うんですかね?

習うより慣れろですね。わかりました。

859 名前:NAME IS NULL mailto:sage [2008/06/25(水) 20:20:13 ID:???]
>>855
情報ありがと。
そして作者に感謝。
SQLite3 で DB 初めたんだけど何気ない?疑問が沸いてくるのが自分なりに歯がゆかったけど質問する勇気もなく(上手く質問もできんし)・・

860 名前:NAME IS NULL mailto:sage [2008/06/25(水) 20:20:49 ID:???]
>>858
気になったら、ベンチマーク試してみる習慣つけるといいかも



861 名前:NAME IS NULL mailto:- [2008/06/26(木) 17:04:46 ID:???]
SQLite Manager(ver 0.2.44)をFireFoxにアドオンしたんだけど、
[ConnectDatabase]のボタン押しても動かない。(どのボタンおしても動かない)

どうやって使うの?

862 名前:NAME IS NULL mailto:sage [2008/06/26(木) 18:02:58 ID:???]
>>861
試しにやってみたら確かに何も起こらなかったんだけど、「Connect Database」を
2回やったら開けたよ。バグだろうね

863 名前:NAME IS NULL mailto:sage [2008/06/26(木) 19:31:34 ID:???]
今までv0.2.43を普通に使ってたんだけど、v0.2.44にしたらダメになった。

864 名前:NAME IS NULL mailto:sage [2008/06/26(木) 19:50:42 ID:???]
あー俺の友達も。今まで普通だったんだけどダメになった

865 名前:861 mailto:- [2008/06/26(木) 21:28:30 ID:???]
v0.2.43にしたら動いた。

866 名前:861 mailto:- [2008/06/26(木) 21:31:58 ID:???]
ちょっと使った感じtksqliteの方がスキだわ。

867 名前:NAME IS NULL mailto:sage [2008/06/27(金) 10:50:27 ID:???]
SQLite Manager v0.2.44.1 にしたら動いたぜ。

868 名前:NAME IS NULL mailto:sage [2008/06/27(金) 10:53:06 ID:???]
>>867
うちでは0.2.44と変わらず

869 名前:861 mailto:- [2008/06/27(金) 16:03:16 ID:???]
0.2.44.1は「Connect Database」で2回やらないと開かない。
>>862と同じだ。


870 名前:NAME IS NULL mailto:sage [2008/06/27(金) 20:08:55 ID:???]
WindowsでCからSQLiteいじってます。
複数のプロセスからDBへアクセスする必要があるんですが、
排他処理しないといけませんよね。
で、Mutexを使うんですが、複数のプロセスが同時にsqlite3_open()でオープンして、
書き込む関数を呼ぶところで排他制御できていれば問題ないですか?
それともsqlite3_openを呼んでcloseするまで排他制御すべきでしょうか?



871 名前:NAME IS NULL mailto:sage [2008/06/27(金) 20:23:45 ID:???]
DLL版しか使ってないけど吐いた処理は勝手にやってるようだ
sqlite_busyの適切に処理できればおk

872 名前:NAME IS NULL mailto:sage [2008/06/27(金) 21:25:00 ID:???]
なんかウェブでは、排他制御ちゃんとするべし、とかあるけど、古いバージョンの話かな。
SQLite3では考えなくていいのだろうか・・・
ちなみに最初にオープンしてアプリ終了までクローズしなくてもいけるかな。
書き込みの時だけファイルロックする仕組みならいいけど、なんかのタイミングで握ったままにならないかが心配だったり。

873 名前:NAME IS NULL mailto:sage [2008/06/27(金) 21:41:34 ID:???]
スレッドごとにsqlite3*を開きっぱなしで持ってるけど、特に問題ない。
-DTHREADSAFE=1 でコンパイルしてる。

874 名前:NAME IS NULL mailto:sage [2008/06/27(金) 22:10:20 ID:???]
>>872
> なんかウェブでは、排他制御ちゃんとするべし、とかあるけど、古いバージョンの話かな。

それ晒せ。

875 名前:872 mailto:sage [2008/06/27(金) 22:19:57 ID:???]
ここにはソースレベルで対応してありそうなことを見たとが書いてある
ttp://www.liris.org/blog/736/
ここには自前で排他制御とか
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070529/272887/
あとSQLiteの過去スレにも排他制御のことが書いてあったはず。

876 名前:872 mailto:sage [2008/06/27(金) 22:23:46 ID:???]
もし排他制御してるとして、busyの間Sleepしてループでいいのかな。
そもそも複数プロセスに対応してるのかまでソースみるべきか・・・
クリティカルセクションなら同一プロセスマルチスレッド対応でしかない。

877 名前:NAME IS NULL mailto:sage [2008/06/27(金) 22:24:28 ID:???]
複数プロセスに対応している

878 名前:872 mailto:sage [2008/06/27(金) 23:02:41 ID:???]
なる。だとするとlinuxサーバーでネットで使うときも割と使用に耐えうるということかな。
別途、PHPでブログみたいなシステム作ってて、データの保存はsqliteでやろうとしてるのだけれど。

879 名前:NAME IS NULL mailto:sage [2008/06/27(金) 23:07:24 ID:???]
同一マシン内の複数プロセスなら全く問題ない。
ネットワーク越しのファイル共有だと(環境によっては)問題があるかも。

880 名前:872 mailto:sage [2008/06/27(金) 23:11:36 ID:???]
ああ、ロードバランシングとかまで考えると問題になりますね。
個人の弱小ブログレベルならsqliteで十分だなー



881 名前:NAME IS NULL mailto:sage [2008/06/27(金) 23:16:59 ID:???]
>>875
そこで言ってる排他処理って、ユーザ毎のアクセス制御の話じゃない?
同時アクセスに関する排他制御とは違うように (俺には) 読めた。

882 名前:872 mailto:sage [2008/06/28(土) 00:43:57 ID:???]
ソース見たけど、どうもCriticalSectionを使っているような・・・
winceはmutexを使う??

883 名前:NAME IS NULL mailto:sage [2008/06/28(土) 00:53:04 ID:???]
CriticalSectionだとプロセスまたいだらマズイんじゃね?

884 名前:NAME IS NULL mailto:sage [2008/06/28(土) 00:58:11 ID:???]
CriticalSectionを使ってるからといってCriticalSectionだけに頼ってるとは限らんだろ

885 名前:NAME IS NULL mailto:sage [2008/06/28(土) 01:02:37 ID:???]
Can multiple applications or multiple instances of the same application access a single database file at the same time?
ttp://www.sqlite.org/faq.html#q5

886 名前:872 mailto:sage [2008/06/28(土) 09:14:16 ID:???]
おお〜ファイルロック使って排他制御してるのね。
WindowsならFAT32じゃなければ大丈夫っぽいね。
安心しました。

887 名前:NAME IS NULL mailto:sage [2008/07/01(火) 09:05:42 ID:???]
>>3
SQLite性能評価その1
www.sutosoft.com/room/archives/000450.html

↑の性能評価なんですが、10万件のデータの挿入で実験していますが、これを100万件にした場合は
大体何倍の時間がかかると考えられるでしょうか?

あと100万件の住所録の中から特定の文字列を含む住所を検索する場合↑の環境と同じような場合大体
どの程度の検索時間がかかるでしょうか?1秒以下・数秒・数十秒程度のおおざっぱな感覚でいいので
教えてください

888 名前:NAME IS NULL mailto:sage [2008/07/01(火) 09:59:53 ID:???]
簡単にできることをなぜ自分でやらないの?

889 名前:NAME IS NULL mailto:sage [2008/07/01(火) 10:17:20 ID:???]
コンパイラがBorland C++でヘッダー書き換えないとコンパイル通らないみたいな記事読んだので、ちょっと
ダウンロードに躊躇していて、とりあえず予備知識として聞いてみたかったんです

890 名前:NAME IS NULL mailto:sage [2008/07/01(火) 12:36:50 ID:???]
自分でやれ。



891 名前:NAME IS NULL mailto:sage [2008/07/01(火) 14:25:43 ID:???]
なんか話がかみ合わないけど別にコンパイルして実験してくれって言ってるわけじゃないですよ
私にはその知識がないけど、できる人ならSQLiteのアルゴリズムは〜だからデータ量がn倍にな
ればコストは何倍になるとかすぐに答えられるんじゃないのかと思って聞いてみただけです

892 名前:NAME IS NULL mailto:sage [2008/07/01(火) 14:28:13 ID:???]
リンク先は見てないけど、インデックスが効くなら10万でも100万でもあまり変わらんよ。
微妙な条件で変わったりするから、自分の条件でちゃんと測定したほうがいいぞ。

893 名前:NAME IS NULL mailto:sage [2008/07/01(火) 23:36:29 ID:???]
だいたい高望みしすぎなんじゃね?
自分でできないことを他人に押し付けるなんてさ。

ここは専門板だ。恥を知れ。

894 名前:NAME IS NULL mailto:sage [2008/07/06(日) 16:03:52 ID:???]
>>887
とりあえずデータベースというものを
勉強したほうがいい。

ここで○倍という答えを聞いたとしても、
SQLによって大きく違うのだから
参考にならない。

895 名前:NAME IS NULL mailto:sage [2008/07/06(日) 19:03:42 ID:???]
SELECt * from table; で 10000 件のデータがとれるとして、
100 件目から 15 件のデータをとりたいときはどうすればいいの?

896 名前:NAME IS NULL mailto:sage [2008/07/06(日) 22:58:07 ID:???]
マニュアルに書いてあるよ。

897 名前:NAME IS NULL mailto:sage [2008/07/07(月) 16:26:36 ID:???]
LIMIT

898 名前:NAME IS NULL mailto:sage [2008/07/07(月) 18:29:53 ID:???]
OFFSET

899 名前:NAME IS NULL mailto:sage [2008/07/07(月) 19:45:30 ID:???]
ADDRESS

900 名前:NAME IS NULL mailto:sage [2008/07/08(火) 02:16:24 ID:???]
ありがとう〜



901 名前:NAME IS NULL mailto:sage [2008/07/09(水) 10:58:19 ID:???]
MDBで作成していたToolをSQLiteに移行しています。
その作業中に下記のようなSQLで失敗してしまいます。
SELECT T1.No1,T1.No2,T1,No3, T1.Name,T2.Name,T3.Name
FROM T3 INNER JOIN (T2 INNER JOIN T1 ON T2.No2=T1.No2) ON T3.No3=T1.No3;
実行下記のエラーが返されます。
Error occurred: no such column:T1.No1

SQLiteのJOIN句は一部サポートしていないようですが、上記のSQLと同内容のSQLを
作るにはどうすればよいでしょうか。SQL自体も殆ど触ったことがないので困っています。




902 名前:NAME IS NULL mailto:sage [2008/07/09(水) 11:24:32 ID:???]
自己解決しました。
JOIN関数ではバレーンが使えない?ようなので、バレーンなしで作成したらうまくいきました。

903 名前:NAME IS NULL mailto:sage [2008/07/09(水) 16:39:31 ID:???]
「バレーン」て何すか?

904 名前:NAME IS NULL mailto:sage [2008/07/09(水) 16:41:41 ID:???]
木版刷の際、版木の上に当てた紙の上をこする用具

905 名前:NAME IS NULL mailto:sage [2008/07/09(水) 18:16:57 ID:???]
お弁当に付いている笹(あるいはプラスチック)でできた仕切り

906 名前:NAME IS NULL mailto:sage [2008/07/09(水) 19:00:00 ID:???]
中東にある王国

907 名前:NAME IS NULL mailto:sage [2008/07/09(水) 19:30:03 ID:???]
ネタバレーンするなんてひどいでゲソ!

908 名前:NAME IS NULL mailto:sage [2008/07/09(水) 20:09:14 ID:???]
残念だ

909 名前:NAME IS NULL [2008/07/13(日) 21:52:23 ID:MhhGLDBm]
SQLite3のインデックスってB+treeですか?
という事は完全一致か前方一致にしか使えませんか?
値が近いものを探すとかできないですよね。


910 名前:NAME IS NULL mailto:sage [2008/07/13(日) 22:01:40 ID:???]
あたりまえだ



911 名前:NAME IS NULL mailto:sage [2008/07/13(日) 23:18:01 ID:???]
c から sqlite を操作しているときに、

ALTER TABLE tbl RENAME TO origin
CREATE TEMP TABLE tbl AS SELECT * FROM origin ORDER BY read ASC
DROP TABLE origin

という3つの命令を走らせると DROP のところで
Error: database table is locked
となります。

CUI からだと上記操作を行っても問題はないのだけど
なにがいけないのか教えてください。

912 名前:NAME IS NULL mailto:sage [2008/07/14(月) 12:31:03 ID:???]
エラーなんて出ないけど・・(´・ω・`)

913 名前:NAME IS NULL mailto:sage [2008/07/14(月) 20:53:51 ID:???]
ごめんなさい、sqlite_stmt の解放し忘れでした。
一命令ごとに解放するようにすることで、実行できるようになりました。

914 名前:NAME IS NULL mailto:sage [2008/07/19(土) 10:22:06 ID:???]
SQLite 3.6.0
www.sqlite.org/releaselog/3_6_0.html


915 名前:NAME IS NULL mailto:sage [2008/07/21(月) 17:48:21 ID:???]
だがβ

916 名前:NAME IS NULL mailto:sage [2008/07/29(火) 02:14:58 ID:???]
ソートの時の比較に使われる関数を
ユーザーデファインドなものでやる事ってできますか?

TEXT の列でソートするのに
Win32APIのStrCmpLogicalWを使いたいなぁ・・・ってことなのですが。

つまりXPのエクスプローラと同等にソートしたい。

# これからはエクスプローラー?

917 名前:NAME IS NULL mailto:sage [2008/07/29(火) 08:24:09 ID:???]
>>916
できる。
sqlite3_create_collation()で比較関数を定義しといて、
テーブル作成時に COLLATE 宣言すればおk。


918 名前:NAME IS NULL mailto:sage [2008/07/29(火) 09:10:52 ID:???]
がんばってみる。ありがとう〜

919 名前:NAME IS NULL mailto:sage [2008/08/02(土) 20:39:25 ID:???]
できましたー。ありがと。

でも、
create table file (
 path unique collate path_collate
);

create temp table cache as select * from file;

alter table cache rename to origin;
create temp table cache as select * from origin order by path;
drop tabl origin;

ってやると、普通のソートになってしまうです・・・。
create table 〜 as select 文は collation の情報を
引き継いではくれないのですね。

920 名前:NAME IS NULL mailto:sage [2008/08/03(日) 02:09:03 ID:???]
create temp table cache as select path collate path_collate from file;




921 名前:NAME IS NULL mailto:sage [2008/08/18(月) 15:01:23 ID:???]
ttp://www.sqlite.com/ が消えてるけど、これって非公式なミラーだったのかな?

922 名前:NAME IS NULL mailto:sage [2008/08/19(火) 22:50:13 ID:???]
.com ってあったんだね。知らんかった。
ttp://web.archive.org/web/*/www.sqlite.com/






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<204KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef