gpt4 book ai didi

java - Android/SQLite/多表

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:59 24 4
gpt4 key购买 nike

我正在创建我的第一个 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);
}
}

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

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

非常感谢您在高级方面的帮助。

最佳答案

尝试改变

static final int DATABASE_VERSION = 1;

static final int DATABASE_VERSION = 2;

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

通过递增 DATABASE_VERSION,您将强制运行 onUpgrade 方法,该方法又调用 onCreate

关于java - Android/SQLite/多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16823350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com