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

在Android中用SQLite创建数据库时出现问题,android,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";

嗨,我是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){}
    }
}
公共类数据库扩展了ListActivity{
/**在首次创建活动时调用*/
私有最终字符串MY\u DATABASE\u NAME=“mycoluserdb.db”;
私有最终字符串MY\u DATABASE\u TABLE=“t\u Users”;
上下文c;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ArrayList结果=新建ArrayList();
setContentView(R.layout.main);
SQLiteDatabase mydb=null;
尝试
{
mydb.openOrCreateDatabase(我的数据库名称,null);
}捕获(例外e){}
}
}

当我运行这段代码时,它会抛出一个运行时异常。请帮助我。

要使用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对象访问数据库:

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

要使用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对象访问数据库:

DBHelper dbHelper = new DBHelper(Activity.this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
  • 如果要调用openOrCreateDatabase之类的静态方法,请在类(SQLiteDatabase.openOrCreateDatabase(…)上执行,而不是在实例上执行。更清楚的是,您这样做的方式看起来像是在调用一个实例方法,因此看起来像是一个确定的NullPointerException,这当然是误导

  • 正如其他人所说,在请求异常帮助时,堆栈跟踪是最有用的

  • (几乎)在不记录异常的情况下,永远不会捕获异常。不要什么都不做。当然,每一条规则都有例外,但我们暂时不要去那里。不管怎么说,如果你至少不把它记录下来,你就是在扔掉一些信息,这些信息会告诉你,当一切都变得一团糟时,哪里出了问题


  • 您不应该直接使用该方法,而应该进行扩展。要开始使用,请查看android开发者页面上的数据存储(我会发布一个链接,但显然我的帖子中只允许有一个链接?!),由于您可能必须下载SDK才能开始使用,请查看随附的示例,以获得记事本示例应用程序。它包含一个NotePadProvider类,这是内容提供者和数据库访问的一个很好的例子,在android上通常是同时进行的。我建议您先编译该应用程序并对其进行一些简单的更改,然后再开始创建自己的应用程序

  • 如果要调用openOrCreateDatabase之类的静态方法,请在类(SQLiteDatabase.openOrCreateDatabase(…)上执行,而不是在实例上执行。更清楚的是,您这样做的方式看起来像是在调用一个实例方法,因此看起来像是一个确定的NullPointerException,这当然是误导

  • 正如其他人所说,在请求异常帮助时,堆栈跟踪是最有用的

  • (几乎)在不记录异常的情况下,永远不会捕获异常。不要什么都不做。当然,每一条规则都有例外,但我们暂时不要去那里。不管怎么说,如果你至少不把它记录下来,你就是在扔掉一些信息,这些信息会告诉你,当一切都变得一团糟时,哪里出了问题


  • 您不应该直接使用该方法,而应该进行扩展。要开始使用,请查看android开发者页面上的数据存储(我会发布一个链接,但显然我的帖子中只允许有一个链接?!),由于您可能必须下载SDK才能开始使用,请查看随附的示例,以获得记事本示例应用程序。它包含一个NotePadProvider类,这是内容提供者和数据库访问的一个很好的例子,在android上通常是同时进行的。我建议您先编译该应用程序并对其进行一些简单的更改,然后再开始创建自己的应用程序


  • 这是一篇简单的文章,告诉你这些链接向你展示的更多信息。

    这是一篇简单的文章,告诉你这些链接向你展示的更多信息。

    我遇到了同样的问题。它发现在开发过程中发生了两个bug

    • 目录“数据库”不存在
    • 意外地将“.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只对“单表”数据库有用。对于多表应用程序,我认为直接使用SQLeDATABASE更适合于一个好的架构。

    我遇到了同样的问题。它发现在开发过程中发生了两个bug

    • 目录“数据库”不存在
    • 意外地将“.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只对“单表”数据库有用。对于多个表应用程序,我认为直接使用SQLeDATabaseFIT更好地构建一个好的架构。

    您的第一步应该是打印异常的堆栈跟踪,而不是完全忽略它。另外,请修改你文章的格式。你的第一步应该是打印异常的堆栈跟踪,而不是完全忽略它。另外,请修复数据存储上post.android开发者页面的格式:数据存储上的android开发者页面: