Android:从外部sqlite数据库中检索数据

时间:2016-07-28 02:10:25

标签: java android sqlite

... YOH 我试图在assets

中从我的外部数据库中检索数据

但是当我运行应用程序时,好像它在/data/data/packagename/databases/中创建了另一个数据库:(而不是来自assets的外部数据库我插入并导致错误(不幸的是, App 已经停止了。这是我的代码:

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

和 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
    }
}

1 个答案:

答案 0 :(得分:0)

在您的DBHelper.java文件中使用它:

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

如果该表已经退出数据库,它将不会创建另一个表。