在 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中重用已经在IOS中创建的Sqlite文件[重复]
无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)