2011-12-05 11 views
3

データベースヘルパークラスにエントリを追加し、それを使用してデータベースにデータを挿入するメソッドを定義しましたが、機能しません。複数の文字列と画像を含むエントリをSQLiteデータベースに挿入する方法

public void createchannelEntry(ChannelPoster channel) { 
     openDB(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     channel.getPoster().compress(Bitmap.CompressFormat.PNG, 100, out); 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_POSTER, out.toByteArray());    
     cv.put(KEY_CHANNEL, channel.getChannel()); 
     cv.put(KEY_PATH, channel.getPath()); 
     cv.put(KEY_DBLINK, channel.getDBlink()); 

     mDb.insert(channelS_TABLE, null, cv); 
     closeDB(); 
    } 

これは私がデータ

Bitmap sherlock = BitmapFactory.decodeResource(getResources(), R.drawable.sherlock); 

mDB.createchannelEntry(new ChannelPoster(sherlock, "aa" ,"ll" ,"ha")); 

を挿入する方法であると私は

public class ChannelPoster { 
    private Bitmap poster; 
    private String channel; 
    private String path; 
    private String dblink; 

    public ChannelPoster(Bitmap pi, String c, String p, String d) { 
     poster = pi; 
     channel = c; 
     path = p; 
     dblink = d; 
    } 

    public Bitmap getPoster() { return poster; } 
    public String getChannel() { return channel; } 
    public String getPath() { return path; } 
    public String getDBlink() { return dblink; } 
} 

をエントリを保持するためのJavaBeanを持っていると私は追加していので、これはdatabasehelperクラスで定義された私の方法であり、プログラムは非常に遅く実行されるので、そこには多くのエントリを挿入するためのより速い方法がありますか? 1つのイベントでそれらのすべてを得るように?

答えて

4

私はがデータベースに画像を保存するのではなく、ファイルとして保存し、(通常のTEXTフィールドを使用して)データベースににパスを保存していないお勧めします。

あなたは、まだ大幅に処理速度を向上させる二つのものがあることを行うにはしたくない場合は、次の

  • オープンは一度だけ
  • すべてのインサートの周りをデータベースを閉じます

にそのような何かトランザクションを使用します。

SQLiteDatabase db = openDB(); 
db.beginTransaction(); 

try { 
    // Add here the loop with all your inserts 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); // will rollback and cancel the inserts if not marked as successful 
    db.close(); 
} 

finallyあなたはそれが何らかの形で挿入中に失敗した場合でも、トランザクションと接続を閉じることを確認することがあります:この場合にはALLあなたのインサートがキャンセルされます)

+0

uは私が入れどのようにどのように伝えることができますあなたのようにデータベース内の画像へのパス? – oratis

関連する問題