2016-07-28 11 views
0

yoh ... Ich habe versucht, Daten aus meiner externen Datenbank abzurufen in assetsAndroid: Abrufen von Daten aus externen SQLite-Datenbank

aber wenn ich die app laufen, scheint, wie es eine andere Datenbank in /data/data/packagename/databases/ :-(erstellt nicht die externe Datenbank von assets I eingefügt und einen Fehler verursacht (leider App aufgehört hat) Hier ist mein Code:.

ingameinterface .java *

public class ingameinterface extends Activity { 
    DBHelper dbhelper; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ingameinterface); 

     String[] from = new String[] { "CtrlNo", "Prima", "Key_Word", "Val" }; 
     int[] to = new int[] { R.id.itmCc1, R.id.itmCc2, R.id.itemCc3, R.id.itemCc4}; 

     dbhelper = new DBHelper(this); 
     try { 
      dbhelper.createDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Cursor c = dbhelper.getData(); 

     if (c.getCount() == 0) { 
      showmessage("Error!", "Nothing found."); 
      return; 
     } 
     StringBuffer buff = new StringBuffer(); 
     while (c.moveToNext()) { 
      buff.append("Controlnum: " + c.getString(0) + "\n"); 
      buff.append("Prima: " + c.getString(1) + "\n"); 
      buff.append("Word: " + c.getString(2) + "\n"); 
      buff.append("Value: " + c.getString(3) + "\n\n"); 
     } 
     showmessage("Data", buff.toString()); 
    } 
    public void showmessage(String title, String Message){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(Message); 
    } 
} 

und DBHelper.Java *

public class DBHelper extends SQLiteOpenHelper { 

    private static String DB_NAME = "db_vocabulary"; 
    private SQLiteDatabase db; 
    private final Context context; 
    private String DB_PATH; 

    public DBHelper(Context context) { 
     super(context, DB_NAME, null, 1); 
     this.context = context; 
     DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; 
    } 

    public void createDataBase() throws IOException { 

     boolean dbExist = checkDataBase(); 
     if (dbExist) { 

     } else { 
      this.getReadableDatabase(); 
      try { 
       copyDataBase(); 
      } catch (IOException e) { 
//    throw new Error("Error copying database"); 
      } 
     } 
    } 

    private boolean checkDataBase() { 
     File dbFile = new File(DB_PATH + DB_NAME); 
     return dbFile.exists(); 
    } 

    private void copyDataBase() throws IOException { 

     InputStream myInput = context.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream myOutput = new FileOutputStream(outFileName); 
     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 Cursor getData() { 
     String myPath = DB_PATH + DB_NAME; 
     db = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READONLY); 
     Cursor c = db.rawQuery("SELECT * FROM TblWords WHERE Prima = 1", null); 

     return c; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
    } 
} 

Antwort

0

Verwendung dieses in Ihrer DBHelper.java Datei:

public void onCreate(SQLiteDatabase db) { 
db.execSQL("create table if not exists "+TABLE_NAME+"(PHONENUMBER VARCHAR,NAME VARCHAR)"); 
} 

, so dass es eine andere Tabelle wird nicht erstellen, wenn bereits, dass Tabellen Ausfahrten in der Datenbank.

+0

aber meine externe Datenbank hatte bereits Daten innerhalb .. X- ( – user5425674

+0

INSERT INTO X.TABLE (Feldname1, Feldname2) SELECT Feldname1, Feldname2 FROM Y.TABLE; –