2016-07-27 7 views
2

SQLiteOpenHelperを実行する必要があるSQL文を含む変数Stringに関連するSQL文をコピーして、データの一部を挿入しようとすると、すべて正常に動作します。ここに私のクエリは次のとおりです。SQLiteOpenHelperを使用してSQLから文を実行する

String POPULATE_TABLE = 
      "INSERT INTO `en_sahih` (`indexID`, `chapterNo`, `verseNo`, `verseText`) VALUES\n" + 
      "(1, 1, 1, 'This is verse 1'),\n" + 
      "(2, 1, 2, 'This is verse 2'),\n" + 
      "(3, 1, 3, 'This is verse 3'),\n" + 
      "(4, 1, 4, 'This is verse 4'),\n" + 
      "(5, 1, 5, 'This is verse 5'),\n" + 
      "(6, 1, 6, 'This is verse 6'),\n" + 
      "(7, 1, 7, 'This is verse 7');"; 
    db.execSQL(POPULATE_TABLE); 

しかし、私はおそらくこれについて移動するための理想的な方法ではない文字列の中に全体6kの記録をコピーしたときに、AndroidのスタジオはStringが長すぎると言われます。私が既に持っているデータをSQL文の形で簡単に取り込み、それを.sqlファイルに入れ、私のアプリで設定した新しいデータベースでそれらを実行するにはどうすればいいですか?これを行う方法に関する提案はありますか?

+1

excelまたはcsvでデータをエクスポートしてからassetsフォルダに入れ、トランザクションを使用してレコードを挿入します。 – USKMobility

+0

ダンプから.sqlファイルを取得した場合、別々のINSERT文が必要です。次に、これをファイルに保存し、行単位で読み込み、それぞれを実行することができます。ちょっとした考え。 – MPelletier

+1

データベースをCSVファイルまたはXMLファイルにエクスポートしてください。次に、いくつかの関数を使用してデータをデータベースに挿入することができます。 – Razor

答えて

2
  1. (例BufferedReaderの)

    file -> file input stream -> reader 
    

    // records.txt 
    1, 1, 1, 'This is verse 1' 
    2, 1, 2, 'This is verse 2' 
    
  2. が、あなたは、いくつかのリーダーの実装を使用してファイルからレコードを読み取ることができます(CRLF各レコードを区切ることで) How can I read a text file in Android?

    // create the file class object pointing to text file 
    File file = new File(some_path,"records.txt"); 
    
    // initialize reader class object providing file object 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    
  3. 0 whileループ使用の
  4. プロセスデータ - > Reader.readline()メソッド

    while ((line = Reader.readLine()) != null) { 
    
        // a/ do insert 
        // b/ store data in some prim array 
        // or via some list implementation (`ArrayList<String>`) 
        // then use insert or bulk 
    
    } 
    

は私がceph3usどうもありがとう@この回答の包括大好きです。しかし、次の2つのことがあります。1.このアプローチを使用して6kのインサートを実行するは遅くなるかもしれませんが、どうすれば対処できますか? 2.私はこのファイル(別の言語)の複数のコピーを使用して挿入するので、データベース自体と同様にテキストファイルも冗長性を作成し、アプリケーションがデバイス上で占有する領域の2倍をマウントする予定です。可能であれば、は、プログラムで挿入されたテキストファイルを削除しますか?最初の嘆願のための

を読む:

6K、レコードの挿入が :)

は、二次利用のためとしてhttps://www.sqlite.org/faq.html#q19

  • を参照してください数秒かかることがあります

    File.delete(); 
    

    または

    著者から
    RandomAccessFile.setLength(0); 
    
  • アプリケーションがネットワーク通信を使用しません?

    はい場合 - その後、分散サイズは小さくなります - アプリのデータのための外部ソースとしていくつかのウェブホスティングアカウントまたはVPSを使用することを検討してください。 - のデータを最新の状態に保つことはできません(サーバー側で何らかの更新が行われます - 挿入するケースレコードではクライアント側でアプリケーションを更新する必要性が減ります) - サーバー/クライアントアプリケーションへの基本的な移行

    +1

    私はこの回答の包括性が大好きです@ ceph3usありがとうございました。ただし、次の2つのことがあります。1.このアプローチを使用して6kインサートを実行すると、処理が遅くなる可能性があります。 2.私はこのファイルの複数のコピー(異なる言語)を使用して挿入するので、データベース自体と同様にテキストファイルも冗長性を作成し、アプリケーションがデバイス上で占有する領域の倍増を実現します。挿入を完了したら、プログラムでテキストファイルを削除することは可能ですか? @ShahraizT。 –

    +0

    - 更新を参照してください – ceph3us

    +0

    ありがとう! @ ceph3us –

    0

    XMLやCSVのようなものを使用するのが最適です。テーブルのすべてのデータを簡単に配置し、適切なタグを使用して配置してから、データを取得して他のデータベースに挿入することができます。あなたはこれを実現する方法についてわからない場合、私はあなたにデータベースをエクスポートについての質問がありthisページを見てお勧め

    <parent attribute="something"> 
        <child attribute="something"> 
         <!-- More tags or data here //--> 
        </child> 
    </parent> 
    

    :あなたはどのように見えるかをXMLにわからない場合XMLファイル。あなたの行方を見てください。

    テキストファイル内のレコードの保存
    関連する問題