【问题标题】:Android fails to create a SQL database on my deviceAndroid 无法在我的设备上创建 SQL 数据库
【发布时间】:2011-10-11 11:34:35
【问题描述】:

我有一些简单的代码应该创建一个数据库。

package com.webfoo.android.databaseExample;

import android.app.Activity;
import android.os.Bundle;

public class DatabaseExampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        jokesHelper db = new jokesHelper(getBaseContext());
    }
}

package com.webfoo.android.databaseExample;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class jokesHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "test.db";
    private static final int DB_VERSION = 1;

    public jokesHelper(Context context) {
        super(context, DATABASE_NAME, null, DB_VERSION);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("create table todo (_id integer primary key autoincrement, "
                 + "joke text not null, punch text not null);");
    }

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

    }

}

有人知道为什么无法创建数据库吗?我的手机已连接到我的机器并且 SD 未安装,但它处于调试模式(我可以看到我的添加正在我的手机上运行)。

我也没有修改清单,所以这会导致任何问题吗?

谢谢

【问题讨论】:

  • 你怎么知道没有创建数据库?你能发布logcat的输出吗?您的助手的onCreate() 中有任何日志语句吗?
  • 数据库应该保存在DATA/data/APP_NAME/databases/DATABASENAME吧?好吧,它不存在。
  • @dotty 你有空的 onCreate 函数......创建了没有表的数据库......在你增加 DB_VERSION 之前它不会再次调用(onCreate)
  • 对不起,onCreate 不为空。
  • 他想说的是onCreate() 通常每次应用程序安装只被调用一次(升级不计算在内)。因此,如果它在开发的早期可能为空时被调用,那么除非您擦除应用程序的数据,否则它不会再次被调用。但是,如果碰到 DB_VERSION,onUpgrade() 会被调用。

标签: java android sqlite


【解决方案1】:

你还没有打电话给getWritableDatabase()getReadableDatabase()

例如

jokesHelper dbHelper = new jokesHelper(getBaseContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();

数据库不存储在 SD 卡或其他 USB 可安装存储上(至少默认情况下不存储)。它们在“内部”存储中。您上面评论中的路径几乎是正确的,但我不确定“DATA”是什么意思。路径是:/data/data/<package name>/databases。您可以使用adb shell ls /data/data/<package name>/databases 进行检查。

【讨论】:

  • 不,那还没有创建它。
  • 实际上,logcat 告诉我它已连接到数据库。如果我挂载我的卡,数据库不显示吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 2017-06-05
  • 2012-03-08
相关资源
最近更新 更多