SQLite Part.10
■ このスレッドは過去ログ倉庫に格納されています
>>222 そもそもsqlite3.soが入ってないとか >>223 多すぎってほどか分からないけど、確かに時々落ちるね なかなか、これぞってソフトがない… SQLiteSpy使うか、コマンドラインからsqlite3で操作するかだな 俺はいろいろ試した結果あれ一択だわ あれ、何だったっけか、えーとちょっと待ってて 3.8.0.2来てた〜 ttp://www.sqlite.org/releaselog/3_8_0_2.html 思いだした。 SQLite Expert http://www.sqliteexpert.com excel exportとか使わなければ無料版でも十分 navicatは高いし昔から好きじゃないんだよなー 遅せーんだよボケ、もうNaviCat買っちゃったよ チラ裏だけど sqlite公式のドキュメントって実に良くまとまってるというか、読んでて関心するというか、尊敬さえする。 知りたい情報は探せばちゃんと載ってるし、それで居て機械的な説明に終始してない。読んでて疑問が浮かんだらその答えが次の行に載ってる。 ユーモア的な表現が所々出てくるのも面白い。 暇な時に用も無いのに読んじゃうくらい。 不満はSQL構文図から説明へのリンクが無いことぐらいかな MIPS の H/PC2000で使えるSQLlite 落ちてませんか INTEGERで作成したカラムに試しに文字列を入れてみたら普通に入りました なんかALTER的なことをしないとだめなのでしょうか? ありがとう。 プログラム側で制御することにします。 数字や文字を区別していないのは 分かりましたが、 取り出した時に、文字なのか数字なのか、実体の型がはっきりしないのは 本当に困ります 文字数字判別の備え付け関数とかないのでしょうか >>240 insert,updateする前にチェックして入れろ >>240 そのカラムは、文字や数字を混在してもいいものであるような設計しているんでしょ? だったら、取得後、プログラムで制御しなさい。 そうでなければ、型識別用のカラムを用意するとか検討すれば良い。 >>240 select typeof(1), typeof(0.0), typeof('string'), typeof(null); ユニコードのCSVもしくはmdbかaccdbで書き出せるフリーソフトってありますか? やっぱり作ったほうが手っ取り早いですか… ありがとうございました。 >>247 unlikely(X) 関数追加 Bool型の値Xが6.25%という低確率でしかtrueにならないことを最適化のためにクエリに埋め込んでコアに教える…か 6.25%という数値にはどんな深遠な意味があるのだろうか? 任意の確率を指定出来るlikelihood関数も追加されたとはいえ。 テーブル「table1」が存在していたらその内容を「table2」へコピーする みたいなSQLはどうやって書けばいいですか? いきなりコピーして、エラー処理をちゃんとする テーブルの存在をチェックする構文があったとしても、 それやっちゃうとコピー時にエラーが発生するケースのテストが 難しくなるのでよろしくない >>249 insert 〜 select 〜 とか create table 〜 as select 〜 あぁ勘違いしたスマン無視して下さい mysqlみたいなif exist的なことか 質問です SQLite 3.7で作成したデータベースを 3.3で読んだり書き込んだりすることは通常問題なくできるものでしょうか? 3系は同じはず。 変わったら4になるんじゃないかな。 初歩的な質問です コマンドラインで複数行での入力中に、キャンセルする方法ってあるのでしょうか? sqliteでcteとwindow関数使えたらもう死んでもいい のらないかな 半角の濁点付き文字を検索するにはどうすればいいのでしょう? like ”%[だダ(ダ)]%” こんな感じでタ+”を一文字として扱いたいんですが、何で囲めばいいんでしょう。 正規表現使えるのか 文字列入れるのは無理じゃね [だダ]|ダ とか、、 プログラムがごちゃごちゃして後々面倒くさいことになりそうなので妥協してしまった、、、 SQLigtの初心者で、まだネットで調べながら作ってるレベルです。 で質問なんですが table1 id|year|month|day|・・・ というテーブルと table2 id|year|month|day|・・・ の二つのテーブルがあるのですが yearとmonthとdayが同一である時のみ、色々処理をしたいのですが SQL文をどう書いたらよいかわかりません。 初心者の質問ですみませんが、ご教示願います。 お前はsqliteの初心者じゃなくて データベースの初心者だな はい、現在androidアプリの製作をしてまして DBを使うことになりSQLightを触り始めた感じです。 SQLの初心者向けサイトや本は腐るほどあるだろ なぜそれを見ない? sqliteどうのではなく、基本的なsqlのお勉強が必要だね > SQLigtの初心者 > SQLightを触り始めた すれ違いだな 作成済みのテーブル my_table にて カラム column_a の存在確認のみやりたいです。 (ALTER TABLE IF NOT EXITS ... とかではなく、存在確認のみです) (実際には、「存在しないこと」を確認したいです) 色々とググる中で以下の2つの方法が見つかっていますが どちらもスマートではないなぁと感じています。 ・PRAGMA index_info(my_table) でテーブル情報を取得して、 その中に column_a が存在しないことをループを廻して全件チェックする ・SELECT column_a FROM my_table で例外が発生したら、存在しないとする もっと直接的にカラムの存在確認はできないのでしょうか? 方法がありましたらご教授いただきたく、よろしくお願いします。 >>271 select sql from sqlite_master where type='table' and name='my_table'; で、定義とってきて、中身見ればいいんじゃね? 重複している行の削除をしたいのですが、 どう書けばよいのか思いつきません。 残すのは_IDが一番若いものにしたいです。 _ID | Name | Data −−−−−−−−−−−−−− 0 | AAA | ABC 1 | AAA | DCD 2 | BBB | XXX 3 | AAA | YYY 4 | BBB | ZZZ の場合は、 0 | AAA | ABC 2 | BBB | XXX を残して、それ以外のレコードを削除したいです。 よろしくお願いいたします。 >>274 スレ違いだけど特別に。 delete from tbl where _ID not in ( select min (_ID) from tbl group by Name ); 以後はこちらへ。 SQL質疑応答スレ 14問目 http://toro.2ch.net/test/read.cgi/db/1371476534/ >>275 ありがとうございます。 スレ違いでしたか、大変失礼いたしました。 SQLを自分で書くのがSQLiteが初めてでしたので どこまでがSQL全般の話なのか理解せずに 使っておりました。もっと勉強いたします。 sqliteに3DCGのデータを埋め込みたいのですが… VBAからデータ追加するのにRecordsetでAddNewで入れるのと InsertIntoで入れるのとどっちが速い? C#でクラスからクエリを自動作成してくれるライブラリとかってないですかね ODBCドライバは知らないけど、少なくともSQLiteに「プリコンパイル」なる機能は無いよ。 ttp://d.hatena.ne.jp/mftech/20100929/1285754844 の >/// <summary> >/// SQL文を実行し、検索結果の第1行第1列を返す >/// </summary> > public Object ExecuteScalar(string sql, SQLiteParameter[] parameters) は、原文 ttp://zhoufoxcn.blog.51cto.com/792419/292670 では > public Object ExecuteScalar(string sql, IList<SQLiteParameter> parameters) > { > using (SQLiteConnection connection = new SQLiteConnection(connectionString)) > { > using (SQLiteCommand command = new SQLiteCommand(sql, connection)) > { > if (!(parameters == null || parameters.Count == 0)) > { > foreach (SQLiteParameter parameter in parameters) > { > command.Parameters.Add(parameter); > } > } > return command.ExecuteScalar(); > } > } > } で、 >(注:上面的代码在2011-07-15日代码重新编辑了,参数由SQLiteParameter[] parameters变为IList<SQLiteParameter> >parameters,使用范围更广) とのこと EnumerableRowCollection<DataRow> query = from row in contacts.AsEnumerable() where IsContainArr(row[0].ToString(), fig) select row; の bool IsContainArr(string s, string[] arr) { foreach (var a in arr) { if (!s.Contains(a)) return false; } return true; } って、メソッドで用意されてないんかな いつもmysqlを使っていて、 sqliteを勉強中なのですが。 MySQLの以下のクエリについてなんですが、 INSERT INTO table (a, b) VALUES (aa, 1), (bb, 2), (cc, 3) ON DUPLICATE KEY UPDATE b=b+VALUES(b) 同一行が存在しないときは、新しい行をinsert。 存在するときは、既存のbに新しい数値を足した値を入れる。 なお、複数の行を一括で処理したい。 以上の条件で、SQLiteでは同じことをするクエリは書けませんか? 一括で同じことをするクエリはないみたいですが、 一応自己解決しました。では。 /// <summary> /// NonQueryList /// </summary> /// <param name="sql"></param> /// <param name="param_arr"></param> /// <param name="list"></param> /// <returns></returns> public static int NonQueryList(string sql, string[] param_arr, List<string[]> list) { int records = 0; try { List<SQLiteParameter> parameters = new List<SQLiteParameter>(); using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + DB_FILE)) { connection.Open(); using (DbTransaction transaction = connection.BeginTransaction()) { using (SQLiteCommand command = new SQLiteCommand(connection)) { foreach (string[] line in list) { command.CommandText = sql; for (var i = 0; i < param_arr.Length; i++) { command.Parameters.Add(new SQLiteParameter(param_arr[i], line[i] ?? "")); } records += command.ExecuteNonQuery(); } } transaction.Commit(); } } } catch (System.Exception ex) { Console.WriteLine(ex.Message); return 0; } return records; } カラムにDateTime型を指定出来るけど 実際は、日付入れるとRealかIntegerかTextが入るよね エポック秒使うとして最初からInteger指定しとくのと何が変わるの? >>301 >>1 → Syntax → date and time functions 株価のDBを1ファイルに収めて使ってきたけど1GB超えてるし これを銘柄数だけファイルを作っても良いのではと思うようになった db.open&closeするオーバーヘッドって結構大きいのかな? 分ける事でカラムとIndexを減らせるので1ファイルで見ると速度も上がって容量も減るけど open&closeが4000回近く増えるから、ここで遅くなると意味ないし 他のプログラム見てると結構分けてるんだよね、4000個も無いけど どう思いますか? データベースを勉強してみようと思ってます。 少し変な質問ですが、SQLiteはサーバーを必要とせず、 ローカル環境で導入できるということですが、 それならば、MS-Accessと、どう違うのか、いや全然違うのは判るんだけど。 二つを対比して、特徴があれば教えてください。 >>306 > 少し変な質問ですが、SQLiteはサーバーを必要とせず、 と、言う仕組みは同じだよ。 個々の機能とか、Access は DBMS 以外の機能 (フォームとか) があるからそういうところは違うけど、漫然と特徴とか言われても説明しづらい。 >>306 SQLiteは、一般的なSQLを扱うRDB入門(ex.情報処理試験)としては、まったく向いていない。 結局のところ、サーバ型のDBMSから始めるのが、仕組みを理解するには一番良かったりする。 Access は、 データベースエンジンACE + VBA + フォーム + レポート データベースの何を知りたいんだ sqliteは少なくともデータベースを知ってる人用のプロダクトだと思うぞ 巷のデータベース入門書でも買って、 ポスグレでもMariaDBでもfirebirdでもいいから普通のRDB入れなさい。 全部ローカルで入れて使えるんだから。 いろいろとありがとうございます。 西沢直木さんの本でコマンドを打ってみたりしました。 SQLは初めてですが、いまのところsqliteが扱いやすい(他と実際比べたわけでないけど) と思いました。 Accessを比較にだしたのは個人的にローカルで株価などの経済データを扱いたいと思ったからです。 特にサーバを必要と感じなかったので、MySQLなどは今のところ考えていません。 ちゃんと説明せず申し訳ないです。概要はわかりましたありがとうございました。 Current Status Version 3.8.3 of SQLite is recommended for all new development. Upgrading from versions 3.7.17, 3.8.0.2, 3.8.1, and 3.8.2 is optional. Upgrading from all other prior versions of SQLite is recommended. おい、CTE載ったじゃねーかよ。recursiveも使えるし 素晴らしい!長年の希望がひとつかなった。 valuesも単独で使えるようになってるし、GJ あとはwindow関数・・・ SQLite3のデータファイルと言うのは、それ自体にバージョンの違いが有るのでしょうか? それとも個々が持ってるDLLで決まるのですか? フォーマットが変わるまで何もしなくて大丈夫なんですね 変わればDumpする ファイルを触るプログラム側にバージョンの違いが有り Access2013でmdbファイル操作するようなイメージなのかな SQLite Release 3.8.3 On 2014-02-03 (3.8.3) http://sqlite.org/releaselog/3_8_3.html SQLite Query Language: WITH clause http://sqlite.org/lang_with.html WITH RECURSIVE cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x<1000000) SELECT x FROM cnt; ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる