大家好。如何將外部數據庫連接到應用程序
我正在嘗試製作字典應用程序。 我試圖複製我的數據庫"dic"
在我的"Dic_Openhelper"
。 我有一個名爲"Dictionary"
的執行類。搜索結果將顯示在本課程中。
並且什麼我的問題: 當我想執行"Dictionary"
類需要花費大量的時間來加載。雖然這個錯誤列表顯示在我的月食上。但無論如何,課程將開始。 當然它不是一個大問題,因爲這些案件只是第一次執行"Dictionary"
課程,而且主要問題在這裏。我的數據庫有大約140000條記錄。所以它是一個大數據庫。當我搜索例如「發送」,它花了很多時間,大約2分鐘後,它顯示並提出了列表視圖!當我爲一個小型數據庫嘗試這些鱈魚時,它運行良好。
我該怎麼辦?
我"Dictionary"
和"Dic_openhelper"
類:
package com.example.masaf;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class Dictionary extends Activity{
public ListView list;
public ImageView search;
public EditText et;
private TextView tv;
private Dic_openhelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dic);
et=(EditText) findViewById(R.id.dic_et);
tv=(TextView) findViewById(R.id.dic_tv);
list=(ListView) findViewById(R.id.dic_list);
search=(ImageView) findViewById(R.id.dic_img_search);
db=new Dic_openhelper(this);
db.database();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
search.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
showlist(et.getText().toString());
}
});
}
public void showlist(String w){
db.open();
int count=db.Count_serach(w);
String word[]=new String[count];
for(int i=0;i<count;i++){
word[i]=db.serach(i, 1, w);
}
db.close();
list.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,word));
}
@Override
public void onBackPressed() {
finish();
startActivity(new Intent(Dictionary.this, Other.class));
}
}
和我的 「Dic_openhelper」 類:
package com.example.masaf;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class Dic_openhelper extends SQLiteOpenHelper {
public final String path="data/data/com.example.masaf/databases/";
public final String Name="dic";
public SQLiteDatabase mydb;
private final Context mycontext;
public Dic_openhelper(Context context) {
super(context, "dic", null, 1);
mycontext=context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
public void database(){
boolean checkdb=checkdb();
if(checkdb){
}else{
this.getReadableDatabase();
try{
copydatabase();
}catch(IOException e){
}
}
}
public void open(){
mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);
}
public void close(){
mydb.close();
}
public boolean checkdb(){
SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{
}
return db !=null ? true:false ;
}
public void copydatabase() throws IOException{
OutputStream myOutput = new FileOutputStream(path+Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open("dic");
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public String display(int row, int position){
Cursor d=mydb.query("words", null, null, null, null, null, null);
d.moveToPosition(position);
String name=d.getString(row);
return name;
}
public Integer Count(){
Cursor cu=mydb.query("words", null, null, null, null, null, null);
int s=cu.getCount();
return s;
}
public Integer Count_serach(String word){
Cursor cu;
cu=mydb.rawQuery("select * from words where enWord Like '%"+word+"%'", null);
int s=cu.getCount();
return s;
}
public String serach(int row,int col,String word){
Cursor cu;
cu=mydb.rawQuery("select * from words where enWord Like '%"+word+"%'", null);
cu.moveToPosition(row);
String s=cu.getString(col);
return s;
}
}
對不起,我浪費你的時間。 我是伊朗人,如果上面的文字有問題,我很抱歉! 謝謝你的耐心和耐心親愛的朋友。 Ali Bazrafshan。 Iran,Khorasan,Ferdows
你的問題不清楚...你是否正在尋找更快的查詢/搜索?也沒有尋找外部數據庫的例子?... –
我說,當我使用數據庫有很多記錄,設備將掛斷。但是當我使用這些鱈魚作爲基礎數據庫時,它會運行良好。所以,當你閱讀,我有一個搜索和使用我的數據庫,它有很多記錄(140000記錄)的問題。 – Ali
爲什麼您一次加載所有數據....在查詢中使用限制 –