通过android创建sqlite数据库

Create sqlite database through android

我相信使用以下代码,我能够创建一个数据库,创建一个 table,并在其中插入传感器值。

这一行创建一个数据库 -> 超级(上下文,"sensor.sqlite",空,1); 在 data/data/example.com.sensor/databases/sensor.sqlite

在oncreate方法中,创建了一个table。 在insert方法中,会插入一条记录。

然而,当我签入 ddms 时,甚至没有创建数据库。我找到了一个数据文件夹,但没有 data/data 文件夹。

知道为什么会这样吗?

package example.com.sensor;

import java.io.File;
import java.util.HashMap;
import java.util.Date;
import android.util.Log;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class SqlController extends SQLiteOpenHelper {
    private static final String LOGCAT = null;

    public SqlController(Context context) {
        super(context, "sensor.sqlite", null, 1);

        Log.d(LOGCAT, "Created");
        this.onCreate(super.getReadableDatabase());
    }

    @Override
    public void onCreate(SQLiteDatabase database) {


        String x = "CREATE TABLE [sport] ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,";
        x+=" [accx] REAL,";
        x+=" [accy] REAL,";
        x+=" [accz] REAL,";
        x+=" [geox] REAL,";
        x+=" [geoy] REAL,";
        x+=" [geoz] REAL,";
        x+=" [activity] TEXT,";
        x+=" [datetime] TIMESTAMP)";

        database.execSQL(x);
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
        onCreate(database);
    }

    public void insert(HashMap<String, String> queryValues) {
        SQLiteDatabase database = this.getWritableDatabase();
        System.out.println(database.getPath());

        ContentValues values = new ContentValues();
        values.put("accx", queryValues.get("accx"));
        values.put("accy", queryValues.get("accy"));
        values.put("accz", queryValues.get("accz"));
        values.put("geox", queryValues.get("geox"));
        values.put("geoy", queryValues.get("geoy"));
        values.put("geoz", queryValues.get("geoz"));
        values.put("activity", queryValues.get("activity"));
        values.put("datetime", new Date().toString());
        database.insert("sport", null, values);
        database.close();
    }
}

您得到的异常是因为您直接在构造函数中调用 this.onCreate(super.getReadableDatabase());。不用直接调用onCreate(),是will be called when the database file did not exist previously.

的回调

无需更改写入数据库文件的路径,保持不变即可。正如@pathfinderelite 所提到的,它被写入您应用程序的内部存储,除非您有根设备,否则无法访问它。

你声明你不知道它的存储位置,但你知道它的存储位置,你只是无法访问它,这是预期的。

为了验证您数据库的内容,只需进行一个简单的select查询,并记录结果。

public void printAllActivities() {
    SQLiteDatabase database = this.getWritableDatabase();
    System.out.println(database.getPath());

    Cursor c = database.rawQuery("select * from sport", null);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        int index = c.getColumnIndex("activity");
        String activity = c.getString(index);
        System.out.println("activity from database: " + activity);            

    }
    c.close();
    database.close();
}