2011-02-23 41 views
11

我们如何将我们自己的SQLite数据库添加到android项目?将您自己的SQLite数据库添加到android应用程序

+3

我一般不说RTFM,但RTFM:http://developer.android.com/reference/android/database/sqlite/package-summary.html – 2011-02-23 04:25:46

+0

我认为他正在编写一份“如何......”问题清单。它本来会更糟;很多人来这里要求你为他们编写代码,就像这个网站是一种免费的基于社区的应用程序创建工具。 – 2011-05-26 12:20:03

+0

这比赛了tutroial最好的一个http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android – 2012-11-15 09:56:26

回答

10

试试这个代码:

public class DataBaseHelper extends SQLiteOpenHelper { 
    private Context mycontext; 

    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/"; 
    private static String DB_NAME = "(datbasename).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/(packagename)/databases/(datbasename).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(); 
    } 
+0

这将工作在一个无根设备? – gisek 2012-02-15 12:32:23

+0

yes很明显,代码在所有设备上都能正常工作。 此外,我也用在我的应用程序,它只是正常工作:) – 2012-03-01 04:33:00

+0

@JaydeepKhamar:什么是DB_PATH? – Deepzz 2012-12-26 04:40:52

相关问题