当前位置:首页 > 数据库 > SQlite

java-如何优化将具有多个字符串和图像的条目插入到SQLite数据库中

我定义了一种方法,可以在数据库帮助程序类中添加一个条目,并使用该条目将数据插入数据库中,但是这种方法不起作用.这是我在databasehelper类中定义的方法:

 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" ));

而且我有一个JavaBean用于保存条目

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; }
}

而且由于我要一个接一个地添加条目,所以程序运行非常慢,所以有插入多个条目的较快方法吗?想让所有人都参加一次活动吗?

解决方法:

我建议不要将图像保存在数据库中,而是将它们保存为文件,并在数据库中保存它们的路径(使用普通的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();
}

(最后可以确保关闭事务和连接,即使在插入过程中由于某种原因导致连接失败:在这种情况下,您所有的插入都将被取消)


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!