2012-03-06 6 views
1

アドオンビルダのDataディレクトリ内のSQLiteデータベースにアドオンsdk v1.5を使用してアクセスする方法はありますか?アドオンビルダのデータディレクトリ内のSQLiteデータベースにアクセスする方法

これは私が使用していたコードです:

var {Cc, Ci, Cu} = require("chrome"); 
var data = require('self').data; 

// This is an active module of the pankajsingh5k Add-on 
exports.main = function() { 

var {Services} = Cu.import("resource://gre/modules/Services.jsm"); 
var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm"); 

var file = FileUtils.getFile("Desk", "Helper.sqlite"); 

var mDBConn = Services.storage.openDatabase(file); 

console.log('loading'); 

var statement = mDBConn.createStatement("SELECT * FROM Words"); 

を今FileUtils.getFileは()デスクトップの略で、「デスク」に設定されています。私はどのように私はBuilderのディレクトリ構造上の追加でSQL Liteのファイルにアクセスできるか分からない。

答えて

1

これは非常に単純な理由があります。bug 638742が固定されています(アドオンSDK 1.5で始まると思います)。dataディレクトリはディスク上のディレクトリではなくなりました。アドオンはディスク上のXPIファイルとしてインストールされ、このディレクトリは実際にはパックされたXPIファイル内のディレクトリです。 SQLiteには実際のファイルが必要です。dataディレクトリ内のデータを変更することは、とにかく悪い考えでした。

"Desk"の代わりに"ProfD"を使用する必要があります。これはユーザーのプロファイルディレクトリです。あなたの内線番号にはっきりと属しているファイル名を選択してください。すべての内線番号がプロファイルにデータを書き込んでいます。

+0

答えに感謝し、詳細を明らかにする。私は "机"の代わりに "ProfD"を使用します。すべての単語は事前にsqliteデータベースに保存されているので(あらかじめ用意されています)、誰かがアドオンをインストールするとsqlliteデータベースをプロファイルディレクトリにコピーする方法はありますか? –

+1

'NetUtil.ioService.newChannel(data.url(...)、null、null).open()'を使用して入力ストリームを取得し、 'FileUtil.openFileOutputStream(...)'を使用して出力ストリームを取得します。それから 'NetUtil.asyncCopy()'を使ってコピーします。 –

+0

私は上記のコメントを理解しているかどうかはわかりません。上記を行うための最良の方法は何でしょうか。私は、アドオンのインストール(または最初の実行)のプロファイルディレクトリに空のsqliteファイルを作成し、インターネット上のどこかでホストされているsqlite dbのデータが入ったテーブルを取得する必要があります。親切なことに、私はアドオン開発の初心者ですからコメントを詳しく説明します。 –

関連する問題