【发布时间】:2015-06-10 14:26:32
【问题描述】:
美好的一天, 我一直在进行一个 android 项目的更新,并遇到了一个问题。我必须从 SQLite 数据库中读取问题,我已通过将其加载到多维数组中成功完成,如下所示在我的数据库助手类中:
public String getSome(int s,int t, String Table_Name){
String selectQuery = "SELECT * FROM " + Table_Name;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
int rows = cursor.getCount();
int num=0;
int col = 0;
String[][] base = new String[rows][13];
if (cursor.moveToFirst()) {
do {
for (col=0;col<13;++col ){
base[num][col] = (cursor.getString(col));}
++num;
} while (cursor.moveToNext());
return base[s][t];
}
return null;
}
完成后,我在我的问题课上阅读了这样的问题:
public void database_calls(){
setCourseTag(courseTag);
myDbHelper = new DataBaseHelper(getActivity());
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
String no= myDbHelper.getSome(ques,0, getCourseTag());
String qu = myDbHelper.getSome(ques,1, getCourseTag());
String a = myDbHelper.getSome(ques,2, getCourseTag());
String b = myDbHelper.getSome(ques,3, getCourseTag());
String c = myDbHelper.getSome(ques,4, getCourseTag());
String d = myDbHelper.getSome(ques,5, getCourseTag());
ans = myDbHelper.getSome(ques,6, getCourseTag());
img = Integer.parseInt(myDbHelper.getSome(ques,8, getCourseTag()));
exp = myDbHelper.getSome(ques,9, getCourseTag());
year = myDbHelper.getSome(ques,10, getCourseTag());
questionImage = myDbHelper.getSome(ques,11, getCourseTag());
length = myDbHelper.getMax(getCourseTag());
}
所以最近,我尝试使用year 列(即第 10 列)来限定为每个测验会话选择的问题,以便用户可以选择任何一年的问题,他/她想尝试。为了做到这一点,我在活动开始时使用了一个循环来仅过滤掉所需的过去一年的问题。然后我将每个问题的索引转移到一个集合 bal ,从那里迭代等等..
public void countYearQuestions(){
for(int y = 0; y < length; ++y){
//year = myDbHelper.getSome(y,10, getCourseTag());
if (selectedYear.equals(myDbHelper.getSome(y,10, getCourseTag())))
bal.add(y);
}
}
这里,长度是整个问题数据库的大小,对于课程,(由 getCourseTag() 表示)。代码工作得很好。但这需要整整8-9秒!!活动加载。任何有关如何减少此加载时间的帮助将不胜感激。
【问题讨论】:
-
为什么是数组?为什么不让数据库为你做过滤呢?
-
@CL。天哪,我没想到。所以本质上,我可以简单地在 DB 助手类中从 sqlite db 进行过滤。我相信这应该加快进程,对吧?
标签: java android arrays performance sqlite