Android / SQLite / 多表

2024-06-20

我正在创建我的第一个 Android 应用程序,并且在我的数据库中创建第二个表时遇到问题。

这是我的代码:

(数据库助手.java)

public class DataBaseHelper extends SQLiteOpenHelper {
    public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    {
               super(context, name, factory, version);
    }
    // Called when no database exists in disk and the helper class needs
    // to create a new one.
    @Override
    public void onCreate(SQLiteDatabase _db) 
    {
            _db.execSQL(DatabaseFunc.DATABASE_CREATE);
            _db.execSQL(DatabaseFunc.DATABASE_CREATE2);

    }
    // Called when there is a database version mismatch meaning that the version
    // of the database on disk needs to be upgraded to the current version.
    @Override
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
    {
            // Log the version upgrade.
            Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");

            // Upgrade the existing database to conform to the new version. Multiple
            // previous versions can be handled by comparing _oldVersion and _newVersion
            // values.
            // The simplest case is to drop the old table and create a new one.
            _db.execSQL("DROP TABLE IF EXISTS " + "LOGIN");
            _db.execSQL("DROP TABLE IF EXISTS " + "SMSREG");
            // Create a new one.
            onCreate(_db);
    }

}

(数据库函数.java)

public class DatabaseFunc 
{
        static final String DATABASE_NAME = "login.db";
        static final int DATABASE_VERSION = 1;
        public static final int NAME_COLUMN = 1;
        // TODO: Create public field for each column in your table.
        // SQL Statement to create a new database.
        static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                     "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD text, TEAMID text) ";
        static final String DATABASE_CREATE2 = "create table "+"SMSREG"+"" +
                "( " +"ID"+" integer primary key autoincrement,"+ "TONUM  text, MESSAGE text, SUCCESS text) ";
        // Variable to hold the database instance
        public  SQLiteDatabase db;
        // Context of the application using the database.
        private final Context context;
        // Database open/upgrade helper
        private DataBaseHelper dbHelper;
        public  DatabaseFunc(Context _context) 
        {
            context = _context;
            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public  DatabaseFunc open() throws SQLException 
        {
            db = dbHelper.getWritableDatabase();
            return this;
        }
        public void close() 
        {
            db.close();
        }

        public  SQLiteDatabase getDatabaseInstance()
        {
            return db;
        }

        public void insertEntry(String userName,String password)
        {
           ContentValues newValues = new ContentValues();
            // Assign values for each row.
            newValues.put("USERNAME", userName);
            newValues.put("PASSWORD",password);
            newValues.put("TEAMID", "0");

            // Insert the row into your table
            db.insert("LOGIN", null, newValues);
            ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }

        public void insertNewSMS(String SMSNumber, String Message, String Success) {
            ContentValues SMSPut = new ContentValues();
            SMSPut.put("TONUM", SMSNumber);
            SMSPut.put("MESSAGE", Message);
            SMSPut.put("SUCCESS", Success);
            db.insert("SMSREG", null, SMSPut);
        }

        public String DisplaySMS() {

            String tempholder = "";
            Cursor cursor1=db.query(false, "SMSREG", null, null, null, null, null, null, null);
            cursor1.moveToFirst();
            while (cursor1.isAfterLast() == false) 
            {
                tempholder += ""+ cursor1.getString(cursor1.getColumnIndex("TONUM")) + ":@FIELDSEP@:" + cursor1.getString(cursor1.getColumnIndex("MESSAGE")) + ":@FIELDSEP@:" + cursor1.getString(cursor1.getColumnIndex("SUCCESS")) + ":@ROWSEP@:";
                cursor1.moveToNext();
            }

            cursor1.close();
            return tempholder;
        }
        public int deleteEntry(String UserName)
        {
            //String id=String.valueOf(ID);
            String where="USERNAME=?";
            int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ;
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
            return numberOFEntriesDeleted;
        }   
        public String getSinlgeEntry()
        {
            Cursor cursor=db.query(false, "LOGIN", null, null, null, null, null, null, null);
            if(cursor.getCount()<1) // UserName Not Exist
            {
                cursor.close();
                return "NOT EXIST";
            }
            cursor.moveToFirst();
            String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
            String username= cursor.getString(cursor.getColumnIndex("USERNAME"));
            String teamids = cursor.getString(cursor.getColumnIndex("TEAMID"));
            cursor.close();
            return username + ":@SEP@:" + password + ":@SEP@:" + teamids;               
        }
        public void  updateEntry(String userName,String password)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.
            updatedValues.put("USERNAME", userName);
            updatedValues.put("PASSWORD",password);
            updatedValues.put("TEAMID", "0");

            String where="USERNAME = ?";
            db.update("LOGIN",updatedValues, null, null);              
        }   

        public void  updateTeamID(String TeamID)
        {
            // Define the updated row content.
            ContentValues updatedValuesa = new ContentValues();
            // Assign values for each row.
            updatedValuesa.put("TEAMID", TeamID);
            db.update("LOGIN",updatedValuesa, null, null);             
        }   
}

登录表工作正常,它创建,数据放入其中,并且提取正常,但根据模拟器可用的 SQLite 编辑器,SMSREG 表永远不会被创建...希望有人可以提供建议,因为我已经已经拔掉头发好几个小时了!! :)

我尝试过在 SQL 语句末尾添加和删除分号,但这似乎没有什么区别。

非常感谢您的提前帮助。


尝试改变

static final int DATABASE_VERSION = 1;

to

static final int DATABASE_VERSION = 2;

我怀疑您在创建第一个表后运行了代码,然后添加了代码来创建第二个表。因为版本号没有改变,所以它认为已经创建了版本1,所以不会重新运行创建。或者,您可以从设备中删除数据库,然后将其保留为版本 1 即可。

通过增加 DATABASE_VERSION,您将强制onUpgrade方法运行,依次调用onCreate.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android / SQLite / 多表 的相关文章

随机推荐