2011-03-13 2 views
1

J'ai créé une base de données SQLite dans SQLiteBrowser. Je veux le référencer dans l'application Android, donc j'ai mis le fichier DB dans le dossier des actifs n utilisé le code suivant pour copier la base de données dans la mémoire App. M en utilisant éclipse pour le développement d'applications Android.Problème de constructeur SQLiteOpenHelper

Mais le constructeur SQLiteOpenHelper génère une erreur. Le constructeur DB_Import (DB_test1) est indéfini

package com.example.DB_test1; 

public class DB_test1 extends Activity{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     DB_Import my_Import; 
     //SQLiteDatabase myDb = null; 
     my_Import=new DB_Import(this); 
     try {     
      my_Import.createDatabase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Voici un autre fichier de classe.

package com.example.DB_test1; 

public class DB_Import extends SQLiteOpenHelper{ 

    private final Context myContext; 
    String DB_PATH = "data/data/com.example.DB_test/databases/"; 
    String DB_NAME = "Dict_temp"; 
    private SQLiteDatabase myDatabase; 

    public DB_Import(Context context) { 
      super(context, "data/data/com.example.DB_test/databases/", null, 1); 
      this.myContext = context; 
     } 
    public void createDatabase()throws IOException{ 
      // TODO Auto-generated method stub 
      boolean dbExist = checkDatabase(); ////////////////Check if database Exist 
      if (dbExist) { 
       //openDatabase(); 
      }else { 
      this.getReadableDatabase(); 

      try { 
      copyDatabase(); ///////////////Copies the database from assets to android 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      throw new Error("Error copying database"); 
      } 
      } 
     } 

Répondre

0

Essayez ce code:

public class DataBaseHelper extends SQLiteOpenHelper{ 
private Context mycontext; 

private String DB_PATH = "/data/data/gr.peos/databases/"; 
//private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/"; 
private static String DB_NAME = "BLib.sqlite";//the extension may be .sqlite or .db 
public SQLiteDatabase myDataBase; 
/*private String DB_PATH = "/data/data/" 
         + mycontext.getApplicationContext().getPackageName() 
         + "/databases/";*/ 

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

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/gr.peos/databases/BLib.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(); 
} 
Questions connexes