X



トップページDB@2ch掲示板
1002コメント312KB
SQLite Part.10
■ このスレッドは過去ログ倉庫に格納されています
0038NAME IS NULL
垢版 |
2012/10/03(水) 08:58:58.06ID:7gCK7EIm
>>37
これで挿入は出来るんだけどカラム増やすためにDB作り直したときにいっつもこまってるんだよね
sqlite> CREATE TABLE jedict (jword TEXT, eword TEXT)

sqlite> CREATE TABLE jedict (jword TEXT, eword TEXT, hword TEXT);
にしたとき
INSERT INTO jedict ('hon', 'book') , ('kon', 'navy'), ('mon', 'gate');
だと困るからいっつも
INSERT INTO jedict ('hon', 'book', '') , ('kon', 'navy', ''), ('mon', 'gate', '');
こんな感じに書き直してから挿入するので手間がかかってしょうがない


0039NAME IS NULL
垢版 |
2012/10/03(水) 10:20:22.92ID:CNQU59aT
hword カラムを not null default '' にして追加したあと
INSERT INTO jedict (jword, eword) values ('hon', 'book') , ('kon', 'navy'), ('mon', 'gate');
じゃダメ?
0040NAME IS NULL
垢版 |
2012/10/03(水) 19:31:42.90ID:7gCK7EIm
そういう手もあるか

そもそもSQLiteで移植ってみんなどうやってんの?
MySQLとかならphpyAdminとか使ってラクラク出来るけどSQLiteでそういうのあるの?
0041NAME IS NULL
垢版 |
2012/10/03(水) 19:47:28.65ID:???
ごめん、移植ってのがよく分からない。

流れ的に>>38みたいにDB作り直して中のデータの一部or丸ごとをコピーすること?
それとも他のRDBMSにデータを持って行ったり、持って来たりすること?
004240
垢版 |
2012/10/03(水) 20:11:21.92ID:/OiJBnwO
>>41
DB作り直して中のデータを丸ごとコピーしたりすること
言葉足りずで申し訳ない
0043NAME IS NULL
垢版 |
2012/10/03(水) 21:01:38.97ID:???
そもそも、中身を丸ごとコピーしないといけないような重要なDBを、
構造を変えて作り直す状況があんまり無いんじゃ…。
0044NAME IS NULL
垢版 |
2012/10/03(水) 21:27:07.87ID:???
>>42
sqlで出来るならそれで。
できないならぶっちゃげぱっとスクリプト書いちゃうな。
0045NAME IS NULL
垢版 |
2012/10/03(水) 21:33:00.19ID:???
年中作り直すのは設計に問題がある。
カラムの追加ぐらいでいちいち作り直さない。
004640
垢版 |
2012/10/03(水) 21:45:30.94ID:/OiJBnwO
さすがにカラム追加するだけで作り直しとかはないけど
拡張して追加よりは作り直したほうがいい場合が年に1回くらいあったりしてたんで
みんなどうやってんのかと思って。
0047NAME IS NULL
垢版 |
2012/10/03(水) 21:53:02.00ID:???
年中作りなおすなんて書いてないだろ。
質問者は、作りなおすハメになったのが設計の甘さかどうかなどは問わず、
「みんな、どうするのかな?」って軽いつもりで聞いてるんだろ。

エラソーに設計に問題がーとか言ってるのは意図を汲めない馬鹿丸出しの発言だろ。
SE/PGだけが業務でコンピュータを使いう時代じゃないんだ。
少しは考えろよ。
0048NAME IS NULL
垢版 |
2012/10/03(水) 21:55:52.76ID:???
>>47
訂正、業務かどうかも前提とすべきではなかったな。
0049NAME IS NULL
垢版 |
2012/10/03(水) 22:44:52.67ID:???
「作り直す時のテクニックをみんなで考えよう」じゃなくて「みんなどうやってんの?」だからなー。
業務だったらそんなマズい設計にはならないし、趣味だったら入れなおすほどのデータなんて扱わない人が大半だろうから、
質問者へのレスとしては間違ってないと思うぞ。年中云々は知らんけど。

仮に前者を問いかけたつもりなんだとしたら聞き方を間違えてる。
0050sage
垢版 |
2012/10/04(木) 10:04:32.41ID:???
phpMyadminみたいにWEB上でお手軽に出来るのがあればいちいちスクリプト組んだりコマンド流したりやんなくていいんだろうけどね

俺はデータをどっかに持ってく場合は
各値を'で囲んで取り出して1レコードを()でくくる感じで吸い出す
('a', 'b', 'c')
こんな感じ。
あとは引越し先にinsertで突っ込む。
1回だけ構造が違うところに突っ込むことがあったけど、そんときは
('a', 'b', '', 'c')
って感じにして対応した。
そんときは80万レコードあったので2個目の,のあとに'', を追加するスクリプト組んで書き換えた。

このやり方がスマートかどうかはわかんないけど、おれは引越しするときはいつもこんな感じでしてる。
0051NAME IS NULL
垢版 |
2012/10/04(木) 11:55:58.87ID:???
>>47
いったい誰と戦っているんだよ?空気脳さん.
0053NAME IS NULL
垢版 |
2012/10/09(火) 09:14:57.50ID:???
PHP上からSQLiteファイル内のデータを全部引っこ抜くようなのって無いんだっけ?
全レコードを>>50みたいな感じでおいらも引っこ抜いてるんだけど。
0054NAME IS NULL
垢版 |
2012/10/14(日) 21:06:47.63ID:???
keyとvalueしかない構造だから悩まない
0056NAME IS NULL
垢版 |
2012/10/15(月) 10:31:13.09ID:???
追加とか変更とかは適当にコマンド流すけど
何か変更することあればFirefoxのSQLiteManagerってやつでいじってる

それ以上のことやろうと思うならそもそもSQLiteとか使わずMySQLとか使ってるしな
0057NAME IS NULL
垢版 |
2012/10/23(火) 19:10:42.58ID:???
だからどうした?
0058NAME IS NULL
垢版 |
2012/10/25(木) 17:03:37.52ID:???
以下の様なデータが格納されているデータベースで

1
1
1
2
2
3
3
3
4

とあるデータで各値が何回出てくるかカウントするってことは出来ますか?

1=3回
2=2回
3=3回
4=1回

みたいな検索結果を得たいと思ってます。
0059NAME IS NULL
垢版 |
2012/10/25(木) 18:29:44.22ID:???
table名 theTable
カラム名 a int

a
--
1
1
1
2
2
3
3
3
4
--

select a, count(*) as cnt from theTable group by a order by a
0060NAME IS NULL
垢版 |
2012/10/25(木) 19:00:24.67ID:???
>>59
解凍ありがとうございます。
こういう組み合わせ知らなかったので凄い勉強になりました。
0061NAME IS NULL
垢版 |
2012/10/25(木) 20:50:40.94ID:???
まさかこんなレベルでプログラマじゃないよなw
0063NAME IS NULL
垢版 |
2012/10/26(金) 11:16:29.38ID:???
SQL知らなくても凄腕のプログラマもいるし
0064NAME IS NULL
垢版 |
2012/11/02(金) 09:43:36.96ID:jaaHOkOC
SQLiteって別ドメインであってもファイルにアクセスさえ出来れば、どこに置いてても操作できる?
0065NAME IS NULL
垢版 |
2012/11/08(木) 09:55:55.42ID:???
http://www.sqlite.org/faq.html#q5

5) Can multiple applications or multiple instances of the same application access a single database file at the same time?

抜粋意訳
NFSでマウントすればリモートアクセス出来るが、NFSのファイルロックは信頼性か低いものもありオススメしない
0066NAME IS NULL
垢版 |
2012/11/08(木) 13:44:03.61ID:NYXd8Y9V
SQLiteってクロスドメインとかいけるんだっけ
0067NAME IS NULL
垢版 |
2012/11/12(月) 06:32:33.62ID:???
ファイルって複数のテーブル突っ込んでサイズデカくなっても
ひとつのテーブルへの速度に影響ないレベル?
0068NAME IS NULL
垢版 |
2012/11/12(月) 12:11:03.33ID:Gm0PmwJY
検索はそんなにかわんない
でもinsertとかupdateとかとかになると件数が10万件とかあると多少違ってくる
0069NAME IS NULL
垢版 |
2012/11/12(月) 16:19:44.77ID:???
>>68
ありがと! 検索メインなのでまとめてみます!
0070NAME IS NULL
垢版 |
2012/11/13(火) 09:20:19.20ID:nIGWXzwT
SQLiteってDB自体を暗号化って出来る?
0071NAME IS NULL
垢版 |
2012/11/13(火) 11:25:00.29ID:???
SQLCipherってので暗号化できるみたいだけど半有料
0072NAME IS NULL
垢版 |
2012/11/13(火) 14:18:38.88ID:???
書き出しと読み出しの部分のソスを書き換えて...
なんてのは出来そう?
0073NAME IS NULL
垢版 |
2012/11/13(火) 19:05:43.34ID:???
>>70
>>1のSupportを参照。有料で別ライセンス(パブリックドメインではない)だけど本家が出してる。
0074NAME IS NULL
垢版 |
2012/11/13(火) 20:11:51.28ID:???
暗号化してインサートすればいいんじゃね?
0075NAME IS NULL
垢版 |
2012/11/14(水) 13:58:27.32ID:???
>>72 する手間かけるくらいなら >>74 の方が良いね
0076NAME IS NULL
垢版 |
2012/11/14(水) 14:22:17.72ID:???
そか IO部分はそのままという事ね。
すぐ 出来そうな感じはする。
出来ないけどorz
0077NAME IS NULL
垢版 |
2012/11/14(水) 15:01:33.23ID:???
>>74-75
暗号化してinsertしちゃったら
検索出来なくなるじゃん
0078NAME IS NULL
垢版 |
2012/11/14(水) 17:19:18.60ID:???
I/Oはそのままってだけですよ。
0079NAME IS NULL
垢版 |
2012/11/14(水) 19:33:12.83ID:???
>>77
検索キーも暗号化して検索すればいいんじゃね?
0080NAME IS NULL
垢版 |
2012/11/14(水) 19:42:07.35ID:???
部分文字列の比較とか難しくないか?
SUBSTRINGを使った場合位置が保証されるかとか。
0081NAME IS NULL
垢版 |
2012/11/16(金) 09:14:45.66ID:A4atXoQO
そりゃrotみたいな単純なもんならいいけど、暗号化とは言えないし、そもそもそれだと部分一致とかマルチバイトとか面倒だろ
0082NAME IS NULL
垢版 |
2012/11/16(金) 12:01:41.64ID:???
>>79
キーだけ暗号化した暗号文と
キーを含む文字列を暗号化した暗号文が
部分一致することは普通はあってはならない
0083NAME IS NULL
垢版 |
2012/11/16(金) 19:56:51.69ID:???
というか、一般にそれを暗号化とは言わない。
スレ違いなのでプログラム技術板あたりへどうぞ。
0084NAME IS NULL
垢版 |
2012/11/18(日) 18:11:07.08ID:???
出来ないなら普通に出来ないって言えばいいのに
0085NAME IS NULL
垢版 |
2012/11/18(日) 18:41:32.22ID:???
暗号化した文字の比較とかの話だからスレ違いってことでしょ

暗号化が出来る/出来ないの話なら>>73で出来るって結論が出てる
0087NAME IS NULL
垢版 |
2012/11/26(月) 18:23:42.86ID:???
sqliteってファイルベースのデータベースじゃん
その作成されるデータファイルのパーミッションやユーザ権限ってどうなってんの?
ユーザ毎に保存してくれる?
0088NAME IS NULL
垢版 |
2012/11/26(月) 19:29:19.32ID:???
最後の一行がよく分からないけど、実行したユーザの権限で作成されるよ。
0090NAME IS NULL
垢版 |
2012/11/27(火) 21:34:23.08ID:???
sqlite3_close_v2 よいよね
0092NAME IS NULL
垢版 |
2012/12/19(水) 16:46:02.85ID:???
SQLite3の1つのDBの中に、最大でいくつまでテーブルが作成できるのでしょうか?
0093NAME IS NULL
垢版 |
2012/12/19(水) 20:57:45.96ID:???
>>92
>>1
答えはないけどヒントは書いてある。
0095NAME IS NULL
垢版 |
2012/12/24(月) 08:40:38.60ID:???
.netなんですけど1つ目のテーブル読みながら2つめにコピーしようと
してるんですがdatabase file is lockedになります
mdbでやってた時は動いててそれをsqliteに置き換えただけなのですが
原因わかりますでしょうか
0096NAME IS NULL
垢版 |
2012/12/24(月) 13:12:05.39ID:???
エスパーじゃないので分かりません
コードとかSQL文を貼ってみてはいかがでしょうか
0097NAME IS NULL
垢版 |
2012/12/25(火) 12:26:49.38ID:???
>>93
すみません
いろいろと調べているのですが見つかりません。

レコード数やフィールド数はビルドオプションで設定ができるのですが、テーブル数の設定は見つけることもできません。
定数ではなく、環境依存の値になってしまうのでしょうか?
0098NAME IS NULL
垢版 |
2012/12/28(金) 01:40:36.64ID:???
テーブル数の上限はたぶん未定義で環境(ディスク残量など)に依存。
ソースを見ても SQLITE_MAX_TABLES みたいなそれらしき記号定数なし。

ためしに機械的な名前(T_0, T_1, .. T_99999)でテーブルを10万個作成してみたが作れた。
0099NAME IS NULL
垢版 |
2012/12/29(土) 00:55:06.02ID:???
予想だけど…。

SQLiteは作ったテーブルやインデックス、ビュー、トリガーとかのスキーマ情報を、
同じファイル内の特殊な予約テーブル"sqlite_master"に格納してる。
で、レコード数の上限は2の64乗=18446744073709551616と書いてある。
これをテーブル情報だけで全部使い切るには1800京個くらいのテーブルを作る必要があるけど、
仮に1レコード1バイトしか使わなかったとしても全部使えばsqlite_masterテーブルだけで170億GBくらい必要。
実際にはテーブル情報以外にも格納するから、もう少し減るとは思うけど、事実上無制限。

と、ここまで書いて気がついたけどsqlite_masterが埋まる前にページ数の上限の方が先に来るのかな?
アーキテクチャをちゃんと読まないで適当に書いてるけど、sqlite_masterの各行に、それぞれのデータが
格納されているページ番号(の先頭)を指定してた気がするから、ページ番号とB-Treeの先頭の対応が1:1で、
それぞれのテーブルが全部1ページ内に収まってるとすれば、ページ数の上限は2の31乗-2=2147483646だと
書いてあるから、そっちの上限に先に到達するのかもしれない。


どっちにしても通常運用で支障が出ることはないくらい沢山作れそうだけど、
嘘をいっぱい書いてるかもしれないので詳しい人いたら解説お願いします。
0101NAME IS NULL
垢版 |
2013/01/07(月) 09:17:58.44ID:6FlDIcs/
10万個もテーブル作れるならもう1データ1テーブルとかでもいいかと思ってしまうわ。
実際にはやんないけどSQLiteで扱う程度のデータならそこまで大規模になるなら別のDB使うだろうし。

それにしても暗号化ないのがちょっと不安になるわ。
案件にもよるんだろうけどみんな暗号化とかそういうの気にせず使ってるの?
0102NAME IS NULL
垢版 |
2013/01/07(月) 16:13:46.18ID:???
他で暗号化してから格納したら?
0103NAME IS NULL
垢版 |
2013/01/07(月) 16:58:50.08ID:???
案件によるって書いてあるじゃんw
0104NAME IS NULL
垢版 |
2013/01/07(月) 18:30:21.13ID:???
気にせずと言うか、SQLiteを使う案件で、かつ暗号化が必要というのに今のところ出くわしたことが無い。
もしそういうのが来たら自前で暗号化して積むか、本家の暗号化オプション買うかの2択かなあ。
0105NAME IS NULL
垢版 |
2013/01/07(月) 22:41:13.14ID:???
自前で暗号化とかすると検索が面倒になる気がしないでもないけどSQLiteは文字通りLiteなんだからしょうがないか
0106NAME IS NULL
垢版 |
2013/01/07(月) 23:02:36.88ID:???
と言うか先にデータを暗号化してからinsertするじゃ意味無いよね?
>>104はSEEを買うか、代わりにvfsで暗号化レイヤーを実装するか、って話だと思ってた…
0107NAME IS NULL
垢版 |
2013/01/08(火) 02:24:15.71ID:???
>>105
隠したい項目(暗号)をWHERE条件で検索できたら そもそも駄目じゃない?
0109NAME IS NULL
垢版 |
2013/01/09(水) 10:37:48.50ID:PQochI3F
質問です。

全角半角大文字小文字の英数字が入り交じった項目があって、これらを全て同一視して検索する手段はありますでしょうか。
また、ひらがな、カタカナについても、おなじく同一視して検索する手段はありますでしょうか。
0110NAME IS NULL
垢版 |
2013/01/09(水) 18:22:22.81ID:???
質問の意味が分からない
同一視って何?
0111NAME IS NULL
垢版 |
2013/01/09(水) 19:22:29.52ID:???
A=A=a=aとして扱いたいんでしょう。
0112NAME IS NULL
垢版 |
2013/01/09(水) 21:05:14.98ID:???
select文を全角で入れたいのかもしれん。
0113NAME IS NULL
垢版 |
2013/01/09(水) 21:13:02.83ID:???
検索対象の文字列がカラム A に入っているとする。

まずカラム A の文字列の英小文字を英大文字に変換する。
上記で変換したデータの中の、半角英数記号カタカナを全角に変換する。
上記で変換したデータのカタカナを平仮名に変換する。
ここまで変換したら、検索専用カラム AA に格納しておく。

※必要であれば、ギリシア文字やロシア文字の小文字大文字変換も。

検索にあたっては、キーワードを上記ルールで変換してから、カラム AA
に対して where 条件を使う。
0114NAME IS NULL
垢版 |
2013/01/10(木) 09:16:20.51ID:???
>>109
オリジナルデータを入れとくカラム以外に英数を半角大文字とかに正規化して入れとくカラムを作って検索時はそれでやれば?
0115NAME IS NULL
垢版 |
2013/01/10(木) 12:23:53.94ID:???
やったことないけど、sqlite3_create_collation() 使って
比較関数登録して COLLATE 句ないし演算子使うってのは?
0116NAME IS NULL
垢版 |
2013/01/11(金) 10:25:12.80ID:???
WHERE UPPER('ABCdefgHIJKlmn') = 'ABCDEFGHIJKLMN'
0118NAME IS NULL
垢版 |
2013/01/14(月) 06:23:33.49ID:???
sqlite って zerofill できます?
0119NAME IS NULL
垢版 |
2013/01/14(月) 23:31:22.64ID:???
なんで自分で試さないの?
0120NAME IS NULL
垢版 |
2013/01/16(水) 07:12:21.08ID:???
Oracle の LPAD や RPAD 関数みたいな機能のこと?
0121NAME IS NULL
垢版 |
2013/01/21(月) 04:30:51.79ID:???
さすがにSQLiteにquery_cache_sizeみたいなのはない?
0122NAME IS NULL
垢版 |
2013/01/21(月) 21:05:39.97ID:???
さすがにドキュメントは読んだんだよね?
0123NAME IS NULL
垢版 |
2013/01/22(火) 17:15:38.35ID:???
unionは500回までって制限があるんですね
unionで片っ端からつなげようという根性も正しくないんだろうけれど、
select結果は一回一回作業用のテーブルに全部突っ込むのがいいのかな
0124NAME IS NULL
垢版 |
2013/01/22(火) 19:06:50.56ID:???
>>123
>unionで片っ端からつなげようという根性も正しくないんだろうけれど、
その通り。設計が悪すぎるので見直すべき。
0125NAME IS NULL
垢版 |
2013/01/23(水) 11:34:06.01ID:???
500って何か間違ってるw
0126NAME IS NULL
垢版 |
2013/01/23(水) 23:56:33.00ID:???
最新バージョンをCygwinでC++から利用しているんですが
CSVファイルから1行ずつよみこんで
PreparedStatementを使用してINSERTする処理なんですが
いくつかの行で最終カラムに入れた値だけ文字化けする現象が発生しています。
bindする際の値をデバッグして確認したのですが、その際は特に文字化け等も
しておらず(改行コード等の余計なコードも入っていませんでした)
INSERTをすると文字化けしています。

なぜか最終カラムにだけ発生します。
TABLE作成時に最終カラムにダミーの項目を追加してINSERTを行うと
文字化けは発生しませんでした。

調べているのですが、原因が分からず困っています。
どなかかお分かりになるでしょうか?
0127NAME IS NULL
垢版 |
2013/01/24(木) 00:05:14.01ID:keellpin
そんな文章で分かるわけないだろ。ここはエスパー募集スレじゃないっす。

再現コード貼ったら誰かが答えてくれると思うよ。
0128NAME IS NULL
垢版 |
2013/02/01(金) 04:20:10.83ID:???
マルチコアCPUで使っても1コアだけ100%に張り付くだけでもったいない気がしたので
クエリを行うプログラムをマルチスレッドで走らせてみたら
複数のコアが代わる代わる100%になるだけで実行時間は全然変わらなかったと日記
0129NAME IS NULL
垢版 |
2013/02/01(金) 18:22:49.02ID:???
ここは君の日記帳ではありません
どうせプログラムの作りが悪いんだろ
0130NAME IS NULL
垢版 |
2013/02/03(日) 18:02:23.29ID:???
論文にしてどこかに投稿して
0131NAME IS NULL
垢版 |
2013/02/03(日) 20:38:35.28ID:???
リジェクトされますた
0132NAME IS NULL
垢版 |
2013/02/05(火) 16:01:47.88ID:ABxdKMYQ
おすすめのSQLitesqliteクライアントを教えてください。

PCでは
・Common SQL Environment
ttp://www.hi-ho.ne.jp/tsumiki/
を使ってるのですが、それほど高機能は求めていません。
てんぷれにないってことは、鉄板みたいなのはないのでしょうか?

目的
・SQL文の予習・復習 for Android2.3
条件
・無料
・SQLが発行できる
・結果がExcelのような表で表示される

使用中アプリの評価
・Start SQL
ttps://play.google.com/store/apps/details?id=dev.tarow.ss
○SQLの予約語KBがほしい
○公開プロバイダ(例えば電話帳)にアクセスしたい(その場合はInternetパーミッションなし)
0133NAME IS NULL
垢版 |
2013/02/05(火) 18:42:06.40ID:???
俺も前探したことあったけど、これといったのは見つからなかったな
aSQLiteManagerぐらいかな使い物になりそうだったのは
0134sage
垢版 |
2013/02/05(火) 21:43:57.72ID:ABxdKMYQ
>>133
レスありがとうございます
aSQLiteManagerも使ってみました

あれは、タブレットだと綺麗にみれるのかな?
文字が小さすぎてファイルをタップしにくいのと、
たぶん型によって色分けされた表が目に痛くて
すぐアンインストールしてしまいました

なんか、中国製のも目にとまったけど、
パーミッションみてやめたw

無料で欲しいってのがあつかましいのですが
しばらくStart SQLで我慢して
ちょくちょくgoogle playをチェックします

AndroidでSQL打つ需要ってあまりないのかな
0135NAME IS NULL
垢版 |
2013/02/05(火) 22:33:19.13ID:???
まあ、ないよね。
0136NAME IS NULL
垢版 |
2013/02/15(金) 20:56:17.34ID:???
A5:SQL Mk-2 という開発ツールを使い始めたばかりなんですが、
起動すると何の設定をしなくても「ODBC/SQLite3 Database」というのが表示されます。

これは単に表示されるだけのものなんでしょうか?
それとも、設定やフォルダの設置でほかのSQLのように扱えるようになるんでしょうか?
0137NAME IS NULL
垢版 |
2013/02/17(日) 22:23:46.58ID:???
そのA5:SQL Mk-2とかいう開発ツールの作者に聞けば…?
■ このスレッドは過去ログ倉庫に格納されています