在Android中的SQLite中创建数据库时出现问题

时间:2009-05-23 07:12:15

标签: android

您好我是Android的新手,我在创建数据库方面遇到了问题。

public class database extends ListActivity {
    /** Called when the activity is first created. */
    private final String MY_DATABASE_NAME = "myCoolUserDB.db";
    private final String MY_DATABASE_TABLE = "t_Users"; 
    Context c;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ArrayList<String> results = new ArrayList<String>();
        setContentView(R.layout.main);
        SQLiteDatabase mydb=null;
        try
        {
            mydb.openOrCreateDatabase(MY_DATABASE_NAME,  null);

        } catch(Exception e){}
    }
}

当我运行此代码时,它会抛出运行时异常。请帮帮我。

4 个答案:

答案 0 :(得分:3)

  1. 如果要调用openOrCreateDatabase之类的静态方法,请在类(SQLiteDatabase.openOrCreateDatabase(...))上执行,而不是实例。它更加清晰 - 你完成它的方式看起来就像是在调用一个实例方法,所以看起来肯定是一个NullPointerException,这当然会产生误导。

  2. 正如其他人所说,在寻求异常帮助时,堆栈跟踪将是最有用的。

  3. (差不多)从来没有捕获异常,至少没有记录它。不要随便做任何事情。每个规则当然都有例外,但我们暂时不要去那里。无论如何,如果你至少没有记录它,那么你只是丢弃了一些信息,这些信息会告诉你什么时候出现问题。

  4. 您不应该直接使用该方法,而应该扩展SQLiteOpenHelper。请参阅关于数据存储的Android开发者页面开始(我发布了一个链接,但显然我的帖子中只允许一个链接?!),因为你可能不得不下载SDK才能开始使用,看看在随记事本示例应用程序附带的示例中。它包含一个NotePadProvider类,它是内容提供者和数据库访问的一个很好的例子,它通常与android相辅相成。我建议您在开始制作自己的应用程序之前编译该应用程序并对其进行一些简单的更改。

答案 1 :(得分:1)

要使用sqlite数据库,您需要创建从SQLiteOpenHelper扩展的类:

private class DBHelper extends SQLiteOpenHelper {   

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLES);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(UPGRADE_TABLES);
    }

}   

然后您可以使用DbHelper对象访问db:

DBHelper dbHelper = new DBHelper(Activity.this);
SQLiteDatabase db = dbHelper.getReadableDatabase();

答案 2 :(得分:1)

我遇到了同样的问题。它发现在开发期间发生了两个错误

  • dir“数据库”不存在
  • 非常“.db”创建为目录。

他们的代码涵盖了

File dbFile = getDatabasePath ("abc.db");

if (dbFile.isDirectory ()) {
    dbFile.delete();
}
if (! dbFile.exists()) {
    String path = dbFile.getParent ();
    new File (path).mkdirs ();
}
database  = SQLiteDatabase.openDatabase (dbFile.getAbsolutePath (), this, SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.CREATE_IF_NECESSARY);

希望这有帮助

我认为SQLiteOpenHelper仅对“单表”数据库有用。对于多个表应用程序,我认为直接使用SQLiteDatabase更适合于良好的体系结构。

答案 3 :(得分:0)

这是一条简单的帖子,告诉您how to insert data in to a SQLite database in Android,此更多链接会向您显示how to retrieve data from a SQLite database in Android