Android: База данных

#android #database

#Android #База данных

Вопрос:

Я создаю приложение для Android, в котором мне нужно создавать разные таблицы в одной базе данных в Android, нужно ли мне создавать для этого разные вспомогательные классы базы данных? Спасибо

Ответ №1:

у вас уже есть база данных Sqlite, и вы хотите скопировать эту базу данных в assets, поэтому код здесь :

 public class DataBaseHelper extends SQLiteOpenHelper{
private Context mycontext;

private String DB_PATH = "/data/data/com.example.android.podemo/databases/";
private static String DB_NAME = "UrClassname.sqlite";
public SQLiteDatabase myDataBase;


public DataBaseHelper(Context context) throws IOException  {
    super(context,DB_NAME,null,1);
    this.mycontext=context;
    boolean dbexist = checkdatabase();
    if(dbexist)
    {
        System.out.println("Database exists");
        opendatabase(); 
    }
    else
    {
        System.out.println("Database doesn't exist");
    createdatabase();
    }

}

public void createdatabase() throws IOException{
    boolean dbexist = checkdatabase();
    if(dbexist)
    {
        System.out.println(" Database exists.");
    }
    else{
        this.getReadableDatabase();
    try{
            copydatabase();
        }
        catch(IOException e){
            throw new Error("Error copying database");
        }
    }
}
private boolean checkdatabase() {
    //SQLiteDatabase checkdb = null;
    boolean checkdb = false;
    try{
        String myPath = DB_PATH   DB_NAME;
        File dbfile = new File(myPath);
        //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
        checkdb = dbfile.exists();
    }
    catch(SQLiteException e){
        System.out.println("Database doesn't exist");
    }

    /*if(checkdb!=null){
        checkdb.close();
    }
    return checkdb!=null? true :false;*/
    return checkdb;
}
private void copydatabase() throws IOException {

    //Open your local db as the input stream
    InputStream myinput = mycontext.getAssets().open(DB_NAME);

    // Path to the just created empty db
    String outfilename = DB_PATH   DB_NAME;

    //Open the empty db as the output stream
    OutputStream myoutput = new FileOutputStream("/data/data/com.example.android.podemo/databases/PartyDetails.sqlite");

    // transfer byte to inputfile to outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myinput.read(buffer))>0)
    {
        myoutput.write(buffer,0,length);
    }

    //Close the streams
    myoutput.flush();
    myoutput.close();
    myinput.close();

}

public void opendatabase() throws SQLException
{
    //Open the database
    String mypath = DB_PATH   DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);

}



public synchronized void close(){
    if(myDataBase != null){
        myDataBase.close();
    }
    super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
 

Ответ №2:

Вам нужно создавать только разные таблицы в одной базе данных.Обратитесь к этому руководству по Sqlite для большей ясности.

Комментарии:

1. В этом руководстве дается команда create table только во вспомогательном классе

2. вы можете выполнить эту команду, где бы вы ни пожелали, с помощью экземпляра db. Вы всегда можете изменить способ выполнения действий в соответствии с вашими требованиями…