Android内部のSQLiteデータベースを使う

このQ&Aのポイント
  • Androidアプリ内で既に存在するSQLiteデータベースを利用したいが、方法が分からない
  • ExcelデータをCSVファイルに変換し、カンマ区切りでUTF-8に変換してSQLite3でインポートしたが、Android内のassetsフォルダからデータベースにアクセスできない
  • 自作のデータベースにアクセスするためのコーディング方法やSQLiteHelperの利用方法を教えてほしい
回答を見る
  • ベストアンサー

Android内部のSQLiteデータベースを使う

Androidアプリ内の既にあるSQLiteデータベースを利用したいのですが、 やり方が分かりません・・。 私が実行したのは、 excelデータ->csvファイルを変換しカンマ区切り,UTF-8変換した上で SQLite3(winコンソール)で .import ファイル名 テーブル名 を実行し実行ファイルを作成しました。 winコンソール上でデータベースにアクセス・文字化け等せずきちんとアクセス、表示することができました。 しかしながら、このデータベースをandroid内のassets?フォルダ内に保持した上で android(のプログラミング上)からオープンし、利用する方法が分かりませんでした・・。 どのようにコーディングすれば 自分で作成したデータベースにアクセスすることができるのでしょうか・・。 SQLiteHelper?というのでアクセス出来るのでしょうか・・。 すみませんがご教授お願いいたします。

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

  • ベストアンサー
noname#161640
noname#161640
回答No.2

>sqliteの固定データベースを読み込みたいので・・ >今回の件に関しましてはreadonlyで大丈夫です。 いえ、readonlyかどうかに関わらず、SQLiteからアプリ内のリソースをデータベースファイルとしてアクセスすることはできない、ということなのです。assetsにあるのは、ファイルではなく、リソースですので。 ちなみに、多くのアプリでは、こうした場合、assetsに入れておいたデータベースファイルを指定の場所にコピーし、このコピーしたデータベースファイルにアクセスするように設計しています。アプリ起動時に指定の場所にデータベースファイルがあるかチェックし、なければassets内からコピーするようにしておくわけです。 InputStream input = mContext.getAssets().open(データベースファイル名); OutputStream output = new FileOutputStream(保存先のファイルパス); byte[] buffer = new byte[1024]; while ((size = mInput.read(1024)) > 0){ output.write(buffer, 0, 1024); } output.flush(); output.close(); input.close(); こんな感じで、assets内にあるリソースをInputStreamで開き、これを読み込んで指定の場所にファイルとして保存します。後は、保存されたデータベースファイルにSQLiteからアクセスします。

khp20xx
質問者

お礼

お礼が遅くなってしまい大変申し訳がありません。。 おっしゃっていただいた意味が分かりました。 リソースなのですね・・。 今はInputStreamでcsvファイル(というかリソース)を取り込み アプリ内でsqliteテーブルを作成してデータを流し込む方法をしております。。 分かりやすいご説明をいただき、ありがとうございました。

その他の回答 (1)

noname#161640
noname#161640
回答No.1

データベースファイルは、ストレージに保存する場合、/data/data/パッケージ/database/ファイル という場所に保存されるようになっています。これ以外の場所には、セキュリティの関係で保存はできません。 android内のassetsフォルダ内ということは、すなわちアプリのapkファイルの内部を書き換えることになります(実際のアプリでは、アプリで使うファイルは圧縮ファイル内のデータとなることをよく理解して下さい)。アンドロイドのアプリは作成した後に署名され、その内容が書き換えられるとセキュリティ上の問題が発生しているとみなされます。したがって、アプリ内においたファイルを書き換えて動くようなプログラムは作れないと考えたほうが良いでしょう。

khp20xx
質問者

お礼

sqliteの固定データベースを読み込みたいので・・ 今回の件に関しましてはreadonlyで大丈夫です。 お忙しい中お返事をいただき、ありがとうございました。

関連するQ&A

  • SQLiteのデータベースの互換性

    phpのSQLite3で作成したデータベースを、アンドロイド開発環境のSQLiteで読み込めません。 そもそも、phpとアンドロイド開発環境では、SQLiteデータベースの互換性はないのでしょうか?

  • EXCELからデータベース(SQLite)に登録

    EXCELの各セルのデータをデータベースに登録したいのですが、調べてもいまいちピンと来ないので質問させて頂きました。 データベースの内容を読み込んでEXCELに表示・保存させることはできたのですがEXCELからデータベースに登録する方法が解りません。 データベースからEXCELへの方法はPHP言語でCSV変換ファイルを作成しました。できれば逆もPHP言語で変換ファイルを作成したいと思っています。 適当なツール名やサンプルプログラムがあると助かります。 宜しくお願いします。 環境 OS:XP 言語:PHP5.1.6 ローカルサーバ:Apache2.0 データベース:SQLite

    • ベストアンサー
    • PHP
  • Androidでデータベースファイルの保存場所は?

    Android実機でSQLiteを使ったプログラムを実行しました。 SQLiteのデータベースファイルはどのフォルダに保存されているのでしょうか? 削除したいのですが、場所が分かりません。

  • python2.5を使用してSQLite3のデータベースを読み込みたいのです。

    いま、python2.5を使用してSQLite3のデータベースを読み込みたいのですが、うまく接続できません。pythonとSQLiteは単体ではうまく起動しているので、問い合わせ方に問題があるようなのですが、参考書のとおりに実行してもエラーが出てしまします。接続の書き方を教えていただければ幸いです。以下には、エラーが出た問い合わせを書きました。違うところがあれば指摘してください。 import sqlite3 con = sqlite3.connect("データベース名") cur = con.cursor() //ここまではうまくいきました。 cur.execute("""create table テーブル名(name text,age text)""") cur.execute("select * from テーブル名") print cur.fetchall()

  • MySQL又はSQLiteについて

    お世話になります。 Androidアプリ開発でPHPファイルを読み込み、更にMySQLへ接続してデータベースの中身を反映させるとこまでは成功しました。 しかし、Androidアプリとデータベースの連携で調べると、SQLiteを推奨しているサイトや書籍が多いのですが、軽量のファイルベースで手軽に構築・運用できるという点は、何となくイメージできるのですが、MySQLに比べてSQLiteが明らかに優れている点はあるのでしょうか? 私は、8割方PHPでwebコンテンツの開発を行ってきました。そしてデータベースは100%MySQLを利用してきました。Androidアプリ開発を開始したのは、つい最近の事でSQLiteも今まで殆ど触れていませんでしたので、特にMySQLとSQLiteでメリット・デメリットの大差が無いのであれば、触りなれているMySQLを選択しようと考えています。 因みに、iOSアプリについては別の者が開発しています。 最終的には、AndroidとiOS両方の端末が1つのデータベースへ読みに行く構想ですので、もしiOSの開発側で、SQLiteの方が圧倒的に優れているとなれば話は変わってきますが・・・。 MySQLとSQLiteを比較して、SQLiteが優れている点のアドバイスをいただければ幸いです。 何卒、どうぞよろしくお願い申し上げます。

  • PHP+ACCESSのデータベース接続について

    こんにちわ。PHP+ACCESSを使って、データベース接続を試みようとしておりますが、最初のところでつまづております。 <?php //データベースに接続する $DB = sqlite_open('db.mdb'); $SQL = "create table db (id integer ,name,time) $result = sqlite_query($DB, $SQL); ?> 上記のPHPで、ACCESSファイルを作成しましたが、作成したファイルを開くと、"データベース形式が認識できません"と表示し、データベースを閲覧することができません。 また、ACCESSから手動で作成したファイルをsqlite_openで接続しようとすると、sqlite_open(): file is encrypted or is not a database inエラーが表示接続することができません。 PHPとACCESSの相性の問題なのでしょうか。この原因がわかる方がいらっしゃいましたら、教えていただけないでしょうか。 宜しくお願い致します。 【php4.3.10 SQLite Library2.8.14 ACCESS2000】

    • ベストアンサー
    • PHP
  • AndroidアプリでSQLiteファイルを更新

    随時更新されるデータベース(以下DB)のAndroidアプリを作成しています。 今回はそんなに大きなDBではないので 初回起動時: assetフォルダにSQLiteファイルを用意しておく 起動時に「/data/data/[package_name]/」以下にSQLiteファイルをコピーしてDBを作成 次回起動時: DBに更新があったかチェック 更新があった場合、WEB上に用意したSQLiteファイルをHTTP通信で取得 既存のSQLiteファイル(/data/data/[package_name]/)に上書き という処理を書こうとしています。 初回起動時の処理は書けたのですが、 更新時の処理で、HTTPから取得したSQLiteデータを、どのように上書き保存したらよいのかわかりません。 処理はAsyncTask内でHTTP通信とともに行う予定です。 どなたかご教授お願いいたします。

    • ベストアンサー
    • Java
  • sqliteでのデータベースのlocalhostとサーバーアップ時について

    xamppとPHP5をWindowsXP環境で使っています。 現在sqliteでデータベースを作成するプログラムを作り終えたのですが、 localhostで作成したデータベースをそのままサーバーにアップすると localhostと同じプログラムなのに読み込んでくれないのです。 で、サーバーでデータベースを作り直すと今度は読み込んでくれます。 もしかしてlocalhostで作成したデータベースはそのままサーバーに アップロードしてもダメなのでしょうか? ちなみにそのままアップするとデータベースを読み込んで表示する プログラムを動かすと下記の類の警告が出てデータベース関数も失敗しているようです。 Warning: sqlite_query() [function.sqlite-query]: database disk image is malformed in /home/ドメイン名/www/index.php on line 50 Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in /home/ドメイン名/www/index.php on line 54 現在さくらのレンタルサーバーですが、もしかしたらそれも影響している のかもしれません、、

    • ベストアンサー
    • PHP
  • PHPとデータベースsqliteの関連について

    PHP初心者です。 独学で勉強し、現在ようやくデータベース関連にまで到達いたしましたが、分からない点がございますのでご教授ください。 開発環境 xampp-win32-1.7.0にて Apache HTTPD 2.2.11, MySQL 5.1.30, PHP 5.2.8 など一括ダウンロードいたしました。 参考にしている書籍がデータベースのsqliteを使っているので私もそれを使用しようと思っているのですが、 PHPマニュアル http://www.php.net/manual/ja/sqlite.installation.php ではPHP5.1以降を使用する際は手動で何らかの作業が必要だとの記載があります。 ただ、さきほど参考にしている書籍のsqliteを用いているコードをそのままエディタに移し、ブラウザ上への繁栄を試みたところ、 結果が出力され、sqliteが使えているようでした。 これはどういうことなのでしょうか。 上にも書きましたとおり、私が使用しているPHPのバージョンは5.2.8であり、PHPマニュアルの文を信じる(PHP5.1以降を使用する際は手動で何らかの作業が必要)なら主導での作業を経ないとsqliteデータベースは使用できないのではないかと思うのですが。 もし手動で何かしらの作業が必要なのでしたら、私のいまのPHPバージョンでsqliteを正しく使用可能にできる状態にするにはどのような手順が必要でしょうか。 どなたかよろしくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • データベースと文字コードの関係

    お恥ずかしい話ですが、文字コードのことが良くわかっておりませんので、utf-8を使ったデータベースをWindowsから取り扱う方法を教えて下さい。 Excelマクロからフリーのデータベースを使って簡単なアプリケーションを作成しようと思っています。 軽くて設定も簡単なSQLiteを使いたいのですが、文字コードがutf-8になっているとのことで、Windows上でCSVファイルをutf-8で保存してから、SQLiteのデータベースにインポートしてみました。 Windwosサーバー上にあるSQLiteに対して、コマンドラインでSELECT命令を発行したり、Excelのデータベースクエリーを実行したりしてみましたが、当然というべきか文字化けしてしまいます。 Excelのシート上で入力したS-JISの値をutf-8のSQLiteに書き込む(また、Excel上でSQLiteのコードを文字化けさせずに表示させる)には、どうしたらよいのでしょうか?