首页 文章

为Android App创建SQLite数据库

提问于
浏览
2

我在运行时为我的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并编写以下查询

select * from 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”,“email TEXT NOT NULL”,“password 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" + ");";

5 回答

  • 0

    “我需要在项目的/ assets文件夹中放置任何内容吗?”

    没有

    “我需要在AndroidManifest.xml中添加任何标签吗?”

    没有

    你的语法还可以......你可以粘贴你正在创建表的查询吗?

  • 1

    问题解决了 . 代码一直在工作 . sqlite shell没有向我显示表和数据库 . 当我让我的应用程序在模拟器上运行并使用DDMS导航到data> data> your-package-name> databases> your-database-file时,系统显示我已经创建了SQLite DB . 我已经检查过表格了 .

    谢谢大家!

  • 0

    这个简单的应用程序将创建一个数据库和一个表w,最后它将

    检索你已经进入的值,并在textBox中显示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();
            }
    
  • 0

    如果未调用 onCreate() ,则表示已为您的应用程序创建了数据库 . 解决问题的最快方法是在模拟器上删除项目(设置 - >应用程序 - >您的应用程序),然后重新启动应用程序 . 或者,您可以使用ADB删除数据库 - 这取决于您 . 删除数据库后重新启动应用程序将调用 onCreate() ,因为数据库不存在,然后将运行表创建sql . 只有当您的数据库不存在时才会调用 onCreate() (这在您第一次在代码中调用数据库时就是如此) .

  • 3

    这可能是一个愚蠢的问题,但您是否定义了DATABASE_NAME和DATABASE_VERSION变量?

相关问题