通过android创建sqlite数据库

时间:2015-04-25 17:35:34

标签: java android database sqlite android-cursor

我相信使用以下代码,我可以创建数据库,创建表,并在其中插入传感器值。

这一行创建一个db - > super(context," sensor.sqlite",null,1); 在data / data / example.com.sensor / databases / sensor.sqlite

在oncreate方法中,创建一个表。 在insert方法中,将插入一条记录。

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

知道为什么会这样吗?

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

1 个答案:

答案 0 :(得分:1)

您获得的异常是因为您直接在构造函数中调用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();
}