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

Posted

技术标签:

【中文标题】在 Android 的 SQLite 中创建数据库的问题【英文标题】:Problem in creating a database in SQLite in Android 【发布时间】:2010-10-28 09:56:39 【问题描述】:

您好,我是 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)
    

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

【问题讨论】:

您的第一步应该是打印异常的堆栈跟踪,而不是完全忽略它。并且请修正您的帖子的格式。 【参考方案1】:

    如果要调用像 openOrCreateDatabase 这样的静态方法,请在类 (SQLiteDatabase.openOrCreateDatabase(...)) 上执行,而不是在实例上执行。更清楚了——你所做的方式看起来像是在调用实例方法,所以看起来肯定是 NullPointerException,这当然是误导。

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

    (几乎)永远不会在不记录异常的情况下捕获异常。不要只是什么都不做。当然,每条规则都有例外,但我们暂时不要去那里。无论如何,如果您至少不记录它,那么您只是在丢弃信息,这些信息会在以后一切都变得废话时告诉您出了什么问题。

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

【讨论】:

android 开发者数据存储页面:developer.android.com/guide/topics/data/data-storage.html#db【参考方案2】:

要使用 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();

【讨论】:

【参考方案3】:

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

目录“数据库”不存在 “.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 更适合良好的架构。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于在 Android 的 SQLite 中创建数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中创建SQLite数据库

在 Android 上的 SQLite 中创建多个表

我们如何在Android中重用已经在IOS中创建的Sqlite文件[重复]

无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)

如何在android自带的sqlite3中创建一个数据库文件,请大虾门详细指导

如何在 Android 应用程序的 SQLite 中创建排序规则?