【问题标题】:sqlite database not createdsqlite 数据库未创建
【发布时间】:2012-06-04 20:55:14
【问题描述】:

我正在使用从流行的记事本示例中学到的标准方法来构建我的第一个应用程序。
但是我遇到了一个奇怪的问题。
SQLite 数据库文件 (.db) 未在 /data/data/package/databases 中创建。我已经从 HeadFirst android dev 交叉检查了清单文件和 OpenHelper 文件。书(我用它作为参考)但我发现自己无法弄清楚为什么没有创建数据库文件..
是否有任何特殊权限或我们需要打开某些东西才能使其正常工作??
奇怪的是,它对于预加载的示例工作正常。表示为记事本示例创建了“.db”文件,但是当我尝试时,它失败了。 :(
这是我的文件。

包 - database.test

1. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk android:minSdkVersion="10" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".Database_testActivity"
        android:label="@string/app_name" >
    </activity>
</application>

2.TestOpenHelper.java

package database.test;

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

public class TestOpenHelper extends SQLiteOpenHelper {

TestOpenHelper(Context context){
    super(context,"mydb.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase database){
    database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer);");
}
public void onUpgrade (SQLiteDatabase database, int oldVersion, int newVersion){
    database.execSQL("drop table if exists test1");
    onCreate(database);
}
}

3.Database_testActivity.java

package database.test;

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

public class Database_testActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ListView listview = (ListView)findViewById(R.id.test_list);
    TestAdapter ta = new TestAdapter();
    listview.setAdapter(ta);

    TestOpenHelper openHelper = new TestOpenHelper(this);
}
}   

我知道这是一个非常基本的问题,但过去十五天我一直在尝试解决这个问题,现在我完全感到沮丧。
请帮忙..

【问题讨论】:

  • 您应该在各个地方使用Log 并监视logcat 以跟踪正在发生的事情。我也可能错了,但是您是否尝试过在TestOpenHelper 构造函数中使用“mydb”作为数据库名称?正如我所说,我可能错了,但我不禁觉得使用文件扩展名(如“mydb.db”)可能会导致问题。
  • 您能否对using Log 有所了解。我尝试了各种名称,但没有任何反应。谢谢
  • 还有每个应用程序。在 /data/data 中以 com.android.something 开头,但我的不是。这可能是我的问题的原因吗??
  • 输入类似Log.d("MyAppName", "In TestOpenHelper constructor");

标签: android database sqlite


【解决方案1】:

改变这个:

database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer)");

这个TestOpenHelper openHelper = new TestOpenHelper(this); 更改为SQLiteDatabase db = new TestOpenHelper(this).getWritableDatabase();

您确实没有创建数据库,您只创建了 SQLiteOpenHelper 的实例,但要创建或打开数据库,您必须使用 getWritableDatabase()getReadableDatabase() 方法。

完全来自文档:

创建和/或打开一个用于读取和/或打开数据库 写作。

【讨论】:

  • 您的代码不起作用,因为您从不创建数据库,您只创建 SQLiteOpenHelper 人的实例 :-) 对于创建数据库,您必须调用 getWritableDatabase()getReadableDatabase() 此方法创建/打开您的数据库。当您的数据库已经创建时,因此此方法将始终只打开您的数据库。
  • @MisterSquonk 所以它有时会发生 :-)
  • hawaii.five-0 和@MisterSquonk:我还想问一件事。每个应用程序。在 /data/data 中以 com.android.something 开头,但我的不是。如何将我的应用程序放入该标准文件夹中??
  • 你应该创建包 com.android.bond.myCustomDatabase
  • 是否有必要将每个应用程序都这样处理?感谢您帮助新手..
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多