• ベストアンサー

SQLite 生のクエリ

質問させて頂きます。お願いします。 Cursor cursor = db.rawQuery(sql.toString(), null); 「rawQuery( )」ですが調べて引数にSQL文を入れるものだという事と生のクエリを実行する物だという事はわかったのですが 生のクエリである事に意味はあるのでしょうか? また生のクエリとは何ですか? http://docs.djangoproject.jp/en/latest/topics/db/sql.html

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

SQLiteを使ったことがありませんが、一般論として聞いてください。 生のSQLとは、例えば、SELECT id, name, address FROM TBL_USERというようなものです。 つまりSQL文そのものです。 また生のクエリに意味があるかというと、例えばSQL文を直接書かせず、メソッドなり何なりでプログラマが指定して実行する場合、そのメソッドを機械的にSQL文にしていて、それだと遅い場合があります。 そんな時に生のSQL文で直接指定することによって速くなることがあります。 データベースを扱う職業であれば、SQL文がわかっている方がかなり良いと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sqlite_query()に関する質問

    ブラウザからポストでSQL文を受け取り、それをもとにDBを作成するスクリプトを考えています。 スクリプトの実行権限は、ページにログインできたユーザ(サイト管理者)のみ与えられています。 では、質問に移ります。 スクリプトに渡される$_POST['sql']の値が、クエリ文の言語仕様的に正しい書式ではなかった場合、 $sql = sqlite_escape_string($_POST['sql']); sqlite_query('hoge',$sql); の結果は、 Warning: sqlite_query() [function.sqlite-query]: near "なんたら~": syntax error in /なんたら~ といったエラーを吐き、 さらに、ファイルサイズ0の余計なクズファイルが作成されてしまうのですが、、 このクズファイルが結果的に作成されないように設計するには、どのようにしたら良いでしょうか。 私なりに2つの方法を考えてみましたので、アドバイスを頂けると嬉しいです。 (1) $_POST['sql']の時点で正規表現をもとに、SQL文の書式が正しいかチェックをし、 誤った書式のSQL文をsqlite_query()に渡すことを回避する方法。 ※私の能力的に、希望とする正規表現を正確に考え出すことができるか、はなはだ怪しいため、 できれば、避けたい方法です。 (2) 正規表現を使った方法だと、やや繁雑になりそうなので、それはやめにし、 ひとまず、SQL文の正誤を問わず、sqlite_query()を実行させ、 その結果、クズファイルが出来てしまうようなら削除する、といった方法。 ※クズファイルが生成されたかどうかのチェックは、 生成されたファイルのファイルサイズ == 0? をもとに行います。 ※ただし、私の利用するサーバの仕様上、 クズファイルは 所有者=「apache」 として作成されてしまうため、 もしかしたら、スクリプトからは削除できないかもしれません。 その場合には、こちらの方法は廃案となります。汗 (3) その他の方法(オススメの方法がありましたら、是非教えて下さい!) 以上、どなたか、ご助言よろしくお願い致します。

    • ベストアンサー
    • PHP
  • mysql_queryがある場所について

    ZendFramework-1.11.7を使用しています。 Zend_DbでPdo_Mysqlで接続して利用しています。 そこで、クエリを実際に実行している箇所を探しているのですが、 ソースの中にmysql_queryが見つからないのです・・・ PHPとかでSQLを発行したい場合にはmysql_queryでやるんですよね?? ┬ Zend │└ Db │ ├ Statement.php ファイルには public function execute(array $params = null) { /* * Simple case - no query profiler to manage. */ if ($this->_queryId === null) { return $this->_execute($params); } があるのですが、これは $this->_execute($params); を実行していて ┬ Zend │└ Db │ ├ Statement │ │ ├ Pdo.php ファイルには public function _execute(array $params = null) { try { if ($params !== null) { return $this->_stmt->execute($params); } else { return $this->_stmt->execute(); } があるのですが、これは $this->_stmt->execute(); を実行しているようなのです。 なんか行ったり来たり(^^;)していて最終的にどこでSQLを発行(mysql_queryを実行)しているのかが フォルダ全体を文字列検索しても見つからないのです・・・ _stmtが何のオブジェクトなのかが定かではないので、追跡しづらいのかもしれませんが、 どこでSQLを発行しているのか教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • SQLiteは明示的に閉じる

    いつもお世話になっております。 androidアプリの開発を行っています。 まだまだ勉強不足なのですが、ご教示お願いいたします。 下記のようにSQLiteでデータの操作をしています。 activityは詳細画面のような感じで、違うnameで複数アクセスされます。 close()を実行すると、closeしていません。みたいなエラーがでて、 close()を実行しないと、selete()が実行できなくなってしまいます。 activity.java ------------------------------ SQLiteHelper dbHelper = new SQLiteHelper(getApplicationContext()); SQLiteDatabase db = dbHelper.getWritableDatabase(); dbHelper.select(db); database.java ------------------------------ public class DatabaseHelper extends SQLiteOpenHelper { public SQLiteHelper(Context context) { super(context, DATABASE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id integer primary key autoincrement, name text not null)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } public select(SQLiteDatabase db, String name) { String sql = "SELECT * FROM " + TABLE_NAME + " WHERE name=" + name; Cursor cursor = db.rawQuery(sql, null); // ↓これが原因かと。 db.close(); } } closeは明示的に書かないといけないのでしょうか。 分かりずらいかもしれませんが、エラーを出さない方法をご教示お願いいたします。 よろしくお願いいたします。

  • sqliteへのデータ追加

    sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>

  • ACCESSのクエリ実行について

    ACCESSのクエリを作成しておりますが  ・クエリを「開く」で実行すると固まる  ・クエリを「デザイン」でSQL文表示させてから実行すると固まる  ・クエリを「デザイン」でSQL文表示させてコピーし、   コピーしたSQL文を新規クエリに貼り付け、実行すると正しく動作する 上記現象の場合、考えられる原因はなんでしょうか? 環境はWIN2K、ACCESS97を利用しております。 SQL文は追加クエリ(INSERT文)で、抽出行数は1000行程度です。

  • クエリファイルから外部のクエリファイルを実行する方法

    SQL Server2000です。 DB構築を行うにあたり、インストールで実行するクエリファイルから、 別のクエリファイル(実際にテーブル、ストアドを構築する内容を記述)を実行できる方法がわからず悩んでいます。 a.sql・・・b.sqlやc.sqlを統括するクエリファイル b.sql、c.sql・・・テーブル構成、ストアドを構築するクエリファイル SQL クエリアナライザからa.sqlのクエリファイルを開いて、 クエリ実行するイメージでいます。 a.sqlからb.sqlを呼び出すには、どのような記述をすればよろしいのでしょうか? よろしくお願いします。

  • mysql_queryの処理速度が遅い

    PHP+MySQLでプログラミングをしているのですが、実行時にmysql_queryの処理に時間がかかっています。状況は以下の通りです。 ・処理時間を計測するとmysql_queryの実行に15秒程度かかっています。 ・Webminで直接同じSQL文を実行すると1秒程度で終わります。 ・SQLのコマンドは単純なUPDATEです。 ・indexは設定してあります。 ・DBに格納してあるレコード数は数100件程度です。 ・optimizeは実行してみましたが、あまり効果はありませんでした。 お聞きしたいのはWebminで実行すると1秒程度で終わるSQL文がmysql_queryで実行すると、なぜ時間がかかるのかということです。 mysql_queryで時間がかかる原因およびmysql_queryの処理時間を短縮する方法などがあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • sql文のヵウント関数について

    sql文のcountを使い、humanテーブルのレコード件数を取得し出力したいのですが、 Object of class SQLite3Result could not be converted to string in のエラーが出て困っています。 (1)humanテーブルのレコード件数を表示する方法を教えてください。(sql文はうまく動いているのが確認できているので、表示する方法を教えていただきたいです。データベースの接続も正常です。) (2)sqlの出力って配列のみなのでしょうか? <?php // 変数の初期化 $db = null; $query=null; $con =null; $db = new SQLite3("test.db"); $res = $db->query ($sql); // データの取得 $query = "SELECT count (id) from human"; //クエリを実行 $con = $db->query($query); //データの件数を表示する print $con; ?>

    • ベストアンサー
    • PHP
  • SQLでCSVを出力する際のNULLをどうにかしたい

    いつもお世話になっております。 SQL(2005)でクエリ文を書いて、その結果をCSV保存する際、NULLの部分が空白ではなく「NULL」と出力されてしまいます。 今まではSQL(2000)で処理しており、その時はNULLはちゃんと空白になっていたのですが、SQL(2005)でも同様にNULLを空白にして出力する方法は無いでしょうか? なお、クエリ文で変換する方法は知っていますが、SQL(2000)の頃のクエリ文を全て直すのは骨なので、出来ればSQL(2005)の設定の方で何とかできればと考えています。 新しいDBとなり、戸惑っておりますので、皆様のお知恵を拝借いたしたく、よろしくお願い致します。

  • アクセスで更新クエリ 「引数が無効です」

    アクセスで更新クエリを実行しようとしたら 「引数が無効です」というエラーになってしまいます。 更新クエリの内容(SQL文)は、 UPDATE T_詳細 SET T_詳細.name = StrConv([T_詳細]![name],8); のような感じで、半角にしようとしています。 どこが間違っているのでしょうか?