gpt4 book ai didi

android - Android中如何正确使用预加载数据库

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:41 24 4
gpt4 key购买 nike

我想使用预加载的数据库。数据库必须附加到应用程序中,然后才能更新。我对如何连接它以避免出现问题有很多疑问。我问那些处理这个问题的专业人士。谢谢。

  1. 如果我的基数大于 1 MB,它会弹出错误 D/asset (909):数据超过 UNCOMPRESS_DATA_MAX。可以分解成小于1兆字节的小块,可以改为增加(.jpg, ".jpeg", ".png", ".gif", ".wav", ".mp2", ". “.mp3”、“.ogg”、“.aac”、“.mpg”、“.mpeg”、“.mid”、“.midi”、“.smf”、“.jet”、“.rtttl”、“. imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3 gp", ".3 gpp", ".3 g2", ".3 gpp2", ".amr “、“.awb”、“.wma”、“.wmv”)。哪个选项更好(更容易 - 更改扩展名)。

  2. 可能会失败“No such table android_metadata”但我手动添加到数据库 en_US,但如果应用程序多语言怎么办?

  3. 在读数据库的时候,我用的是方法mDb = getReadableDatabase();,但是我在密读的最后-mDb.close();正如他们在 Internet 上所说的那样,可能不关心任何无法打开数据库文件的错误。这尤其适用于 HTC 设备。

下面引用代码

public class QuestionsDbAdapter extends SQLiteOpenHelper {

private String DATABASE_PATH = "/data/data/YOUR_PACKAGE/";
public static final String DATABASE_NAME = "mantestQuestions";

public static final String TABLE_QUESTIONS = "Questions";
public static final String QUESTIONS_COLUMN_ID = "_id";
public static final String QUESTIONS_COLUMN_QUESTION ="Question";

public static final String TABLE_ANSWERS = "Answers";
public static final String ANSWERS_COLUMN_ID = "_id";
public static final String ANSWERS_COLUMN_QUESTION_ID = "QuestionId";
public static final String ANSWERS_COLUMN_ANSWER = "Answer";
public static final String ANSWERS_COLUMN_POINT = "Point";

private SQLiteDatabase mDb;

private final Context mContext;

private boolean mCreateDatabase = false;
private boolean mUpgradeDatabase = false;

/**
* Constructor
* Takes and keeps a reference of the passed context in order to access
* the application's assets and resources
* @param context
*/
public QuestionsDbAdapter(Context context) {
super(context, DATABASE_NAME, null, context.getResources().getInteger(R.integer.questionDbVersion));

mContext = context;
}

public void initializeDatabase(String path) {
DATABASE_PATH = path;
getWritableDatabase();

if(mUpgradeDatabase) {
mContext.deleteDatabase(DATABASE_NAME);
}

if(mCreateDatabase || mUpgradeDatabase) {
try {
copyDatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}

private void copyDatabase() throws IOException {
close();

InputStream input = mContext.getAssets().open(DATABASE_NAME);

String outFileName = DATABASE_PATH + DATABASE_NAME;

OutputStream output = new FileOutputStream(outFileName);

// Transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}

output.flush();
output.close();
input.close();

getWritableDatabase().close();
}

public QuestionsDbAdapter open() throws SQLException {
mDb = getReadableDatabase();
return this;
}

public void CleanUp() {
mDb.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
mCreateDatabase = true;
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
mUpgradeDatabase = true;
}

/**
* Public helper methods
*/

public Cursor getQuestionById(long rowId) throws SQLException {
Cursor cursor = mDb.query(true, TABLE_QUESTIONS,
new String[] { QUESTIONS_COLUMN_ID, QUESTIONS_COLUMN_QUESTION }, QUESTIONS_COLUMN_ID + "=" + rowId,
null, null, null, null, null);

return cursor;
}

public Cursor getAnswerById(long rowId) throws SQLException {
Cursor cursor = mDb.query(true, TABLE_ANSWERS,
new String[] { ANSWERS_COLUMN_ID, ANSWERS_COLUMN_QUESTION_ID, ANSWERS_COLUMN_ANSWER, ANSWERS_COLUMN_POINT },
ANSWERS_COLUMN_ID + "=" + rowId,
null, null, null, null, null);

return cursor;
}

public Cursor getAnswersByQuestionId(long questionId) throws SQLException {
Cursor cursor = mDb.query(true, TABLE_ANSWERS, new String[] {ANSWERS_COLUMN_ANSWER, ANSWERS_COLUMN_POINT},
ANSWERS_COLUMN_QUESTION_ID + "=" + questionId, null, null, null, null, null);

return cursor;
}

public long getCount() {
String sql = "SELECT COUNT(*) FROM " + TABLE_QUESTIONS;
SQLiteStatement statement = mDb.compileStatement(sql);
long count = statement.simpleQueryForLong();
return count;
}
}

最佳答案

这里不需要这些乱七八糟的代码,这对您来说是个不错的解决方案Android SQLiteAssetHelper

关于android - Android中如何正确使用预加载数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com