如果不存在,我在运行时为我的App创建SQLite数据库,如果存在则插入行。因为它应该在运行时创建,我已经通过创建SQLiteOpenHelper的子类并覆盖onCreate()方法来实现它 -
“我是否需要在项目的/ assets文件夹中放置任何内容?”
我没有使用任何内容提供商“我是否需要在AndroidManifest.xml中添加任何标签?”
这就是我所做的。字符串已正确定义,我没有得到任何运行时异常。
实现SQLiteOpenHelper子类。
public class MyDB extends SQLiteOpenHelper {
public MyDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION );
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(USERAUTH_TABLE_CREATE);
db.execSQL(USERPREF_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
Log.w("Example", "Upgrading database, this will drop tables and
recreate.");
db.execSQL("DROP TABLE IF EXISTS " + USERAUTH_TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + USERPREF_TABLE_NAME);
onCreate(db);
}
}
这是我创建SQLiteOpenHelper的MyDB子类的实例的地方。
MyDB tdb = new MyDB(Activity.this);
SQLiteDatabase db = tdb.getReadableDatabase();
一切都在运行,当我转到sqlite shell并编写以下查询
时从table_name中选择* - 它只是告诉我没有这样的记录存在。我设置了断点,似乎在调用getReadableDatabase()之后,永远不会执行@Override OnCreate()方法,这是我执行Create table SQLs的地方。我试过getWritableDatabase() 同样。
我不明白为什么没有创建表。如果有人能提供帮助那就太棒了。
感谢。
查询文本字符串#1
private static final String USERAUTH_TABLE_CREATE = “CREATE TABLE”+ USERAUTH_TABLE_NAME +“(”+ “数字INTEGER NOT NULL,”+ “dip TEXT NOT NULL,”+ “发送电子邮件TEXT NOT NULL,”+ “密码TEXT NOT NULL,”+ “flag INTEGER”+“);” ;
查询文本字符串#2
private static final String USERPREF_TABLE_CREATE =
"CREATE TABLE " + USERPREF_TABLE_NAME + " (" +
"tpd TEXT NOT NULL ," +
"cat TEXT NOT NULL" + ");";
答案 0 :(得分:3)
如果未调用onCreate()
,则表示已为您的应用创建了数据库。解决问题的最快方法是在模拟器上删除项目(设置 - >应用程序 - >您的应用程序),然后重新启动应用程序。或者,您可以使用ADB删除数据库 - 这取决于您。删除数据库后重新启动应用程序将调用onCreate()
因为数据库不存在,然后将运行表创建sql。只有当您的数据库不存在时才会调用onCreate()
(所以第一次在代码中调用数据库时就是这样。
答案 1 :(得分:1)
“我是否需要在项目的/ assets文件夹中放置任何内容?”
没有
“我是否需要在AndroidManifest.xml中添加任何标签?”
没有
您的语法没问题...您可以粘贴正在创建表格的查询吗?
答案 2 :(得分:0)
这可能是一个愚蠢的问题,但您是否定义了DATABASE_NAME和DATABASE_VERSION变量?
答案 3 :(得分:0)
问题已解决。代码一直在努力。 sqlite shell没有向我显示表和数据库。当我让我的应用程序在模拟器上运行并导航到数据>数据>你的包名>数据库>使用DDMS的your-database-file系统向我显示SQLite DB创建得很好。我也检查了表格。
谢谢大家!!
答案 4 :(得分:0)
这个简单的应用程序将创建一个数据库和1个表w,最后它将
检索你已经进入的值,并在文本框中显示vl。
SQLiteDatabase myDB= null;
String TableName="Profile";
String ShowData="";
/* This function create new database if not exists. */
try {
myDB = openOrCreateDatabase("DataBase.db",SQLiteDatabase.CREATE_IF_NECESSARY, null);
/* Create a Table in the Database. */
myDB.execSQL("CREATE TABLE IF NOT EXISTS "+ TableName + " (id INT(4),firstname VARCHAR,lastname VARCHAR);");
/* Insert data to a Table*/
//myDB.execSQL("INSERT INTO "+ TableName +"(id, firstname, lastname) "+ " VALUES (1, 'Pir', 'Fahim');");
Toast.makeText(this," DATA BASE HAVE BEEN CREATED ", Toast.LENGTH_SHORT).show();
/*Fetch data from database table */
Cursor c = myDB.rawQuery("SELECT* FROM " + TableName , null);
int id = c.getColumnIndex("id");
int fristName = c.getColumnIndex("firstname");
int lastName = c.getColumnIndex("lastname");
// Check result.
c.moveToFirst();
if (c != null) {
// Loop through all Results
do {
int personId = c.getInt(id);
String FirstName = c.getString(fristName);
String LastName = c.getString(lastName);
ShowData =ShowData +personId+" .) " +FirstName+" "+LastName+"\n";
txt.append("********************"+"\n"+personId+"\n"+FirstName+"\n"+LastName+"\n");
// Toast.makeText(this," RESULT 2 IS = "+ ShowData, Toast.LENGTH_LONG).show();
}
while(c.moveToNext());
}
// Toast.makeText(this," RESULT 2 IS = "+ ShowData, Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(this, "Error = "+e.getMessage(), Toast.LENGTH_LONG).show();
}
finally
{
if (myDB != null)
myDB.close();
}