2012-03-06 1 views
1

추가 기능 sdk v1.5를 사용하여 추가 기능 빌더의 데이터 디렉토리에있는 SQLite 데이터베이스에 액세스 할 수있는 방법이 있습니까?추가 기능 빌더의 데이터 디렉토리에있는 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()를 바탕 의미 "데스크"로 설정됩니다

내가 사용하고있는 코드입니다. 내가 어떻게 빌더 디렉토리 구조에 추가에서 SQL 라이트 파일에 액세스 할 수 있는지 모르겠다.

답변

1

bug 638742이 고정 된 (추가 기능 SDK 1.5로 시작하는 것 같음) data 디렉토리가 더 이상 디스크의 디렉토리가 아니라는 것은 매우 간단한 이유입니다. 애드온은 디스크에 XPI 파일로 설치되며 실제로이 디렉토리는 압축 된 XPI 파일 내의 디렉토리입니다. SQLite는 실제 파일이 필요합니다. data 디렉토리의 데이터를 변경하면 어쨌든 나쁜 생각이었을 것입니다.

"Desk" 대신 "ProfD"을 사용해야합니다. 사용자 프로필 디렉토리입니다. 내선 번호에 명확하게 속하는 파일 이름을 선택하십시오. 모든 내선 번호는 프로파일에 데이터를 쓰고 있습니다.

+0

답변을 주셔서 감사 드리며 세부 사항을 명확히하십시오. 나는 "Desk"대신에 "ProfD"를 사용할 것입니다. 모든 단어가 미리 (미리 채워진) sqlite 데이터베이스에 저장 될 것이고 누군가가 addon을 설치할 때 프로필 디렉토리에 sqllite 데이터베이스를 복사 할 수있는 방법이 있습니까? –

+1

예. 'NetUtil.ioService.newChannel (data.url (...), null, null) .open()'을 사용하여 입력 스트림을 얻고 'FileUtil.openFileOutputStream (...)'을 사용하여 출력 스트림을 얻습니다. 그런 다음'NetUtil.asyncCopy()'를 사용하여 하나에서 다른 것으로 복사하십시오. –

+0

위의 의견을 이해할 수 있는지 확실하지 않습니다. 위의 작업을 수행하는 최선의 방법은 무엇입니까? 내가 addon 설치 (또는 첫 번째 실행)에 프로필 디렉토리에 빈 sqlite 파일을 만들고 인터넷 어딘가에 호스팅 된 sqlite db에서 데이터로 채워진 테이블을 얻어야합니다. 친절하게도 내가 addon 개발에 초보자이기 때문에 주석을 자세히 설명합니다. –

관련 문제