当我使用命令在 Android Studio 中的另一个 class 中更新数据库时,为什么我的数据库没有在 class 中更新?

Why isn't my database updating in a class when I use the command to update it in a another class in Android Studio?

我认为我的 SQL 查询有效,但我的 table 的数据没有更新。这是为什么?

我的数据库中有一个名为 MasterStudents 的 table,列名称为 StudentID INTEGER NOT NULL UNIQUE,FirstName VARCHAR,LastName VARCHAR,ContactNumber VARCHAR , 电子邮件地址 VARCHAR

我有两个 classes,StudentsMasterList.java - 制作一个 Table 布局,使用 [=48] 在数据库中显示数据=] Row & StudentsFormUpdate.java 检索所选Table行的数据并显示在EditText/s.

我在 StudentsFormUpdate 中有一个按钮调用函数 UpdateButton() onClick。

这是 StudentsFormUpdate.java class(更新):

public class StudentsFormUpdate extends Activity
{
    String FirstName, LastName, EmailAddress, ContactNumber, StudentID;
    SQLiteDatabase db;
    TextView StudentIDViewUpdate2;
    EditText FirstNameUpdate2, LastNameUpdate2, ContactNumberUpdate2, EmailUpdate2;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.students_updateform);
        db = openOrCreateDatabase("ClassManager", MODE_WORLD_READABLE, null);

        String reciever = getIntent().getStringExtra("sender");

        Cursor c = db.rawQuery("SELECT * FROM MasterStudents WHERE StudentID = '" + reciever + "'", null);

        TextView StudentIDViewUpdate2  = (TextView)findViewById(R.id.StudentIDViewPermanentUpdate);
        EditText FirstNameUpdate2      = (EditText)findViewById(R.id.FirstNameTextUpdate);
        EditText LastNameUpdate2       = (EditText)findViewById(R.id.LastNameTextUpdate);
        EditText ContactNumberUpdate2  = (EditText)findViewById(R.id.ContactNumberTextUpdate);
        EditText EmailUpdate2          = (EditText)findViewById(R.id.EmailAddressTextUpdate);


        c.moveToFirst();
        StudentIDViewUpdate2.setText(c.getString(c.getColumnIndex("StudentID")));
        FirstNameUpdate2.setText(c.getString(c.getColumnIndex("FirstName")));
        LastNameUpdate2.setText(c.getString(c.getColumnIndex("LastName")));
        ContactNumberUpdate2.setText(c.getString(c.getColumnIndex("ContactNumber")));
        EmailUpdate2.setText(c.getString(c.getColumnIndex("EmailAddress")));


    }

    public void UpdateButton(View view)
    {

        StudentID = StudentIDViewUpdate2.getText().toString();
        FirstName = FirstNameUpdate2.getText().toString();
        LastName = LastNameUpdate2.getText().toString();
        ContactNumber = ContactNumberUpdate2.getText().toString();
        EmailAddress = EmailUpdate2.getText().toString();

        db.execSQL("UPDATE MasterStudents SET FirstName = '" + FirstName + "', LastName = '" + LastName + "', ContactNumber = '" + ContactNumber + "', " +
                   "EmailAddress = '" + EmailAddress + "' WHERE StudentID = " + StudentID + ";");

        Toast toast = Toast.makeText(getApplicationContext(), "Student Updated", Toast.LENGTH_SHORT);
        toast.show();
        finish();
    }

}

为什么我的代码不起作用?非常感谢任何帮助!

StudentID 是一个整数,因此更新查询中不需要封装 ""

更改您的更新查询

db.execSQL("UPDATE MasterStudents SET FirstName = '" + FirstName + "', LastName = '" + LastName + "', ContactNumber = '" + ContactNumber + "', " +
                   "EmailAddress = '" + EmailAddress + "' WHERE StudentID = '" + StudentID + "'");

db.execSQL("UPDATE MasterStudents SET FirstName = '" + FirstName + "', LastName = '" + LastName + "', ContactNumber = '" + ContactNumber + "', " +
                   "EmailAddress = '" + EmailAddress + "' WHERE StudentID = " + StudentID +";");

注意:您应该在数据库中将 StudentID 设置为 primary key。不要只设置 unique.

此外,在创建 EditText 全局变量后,将此代码从 onCreate 添加到 UpdateButton

private TextView StudentIDViewUpdate2;
private EditText FirstNameUpdate2;
private EditText LastNameUpdate2;
private EditText ContactNumberUpdate2;
private EditText EmailUpdate2;

在你的onCreate

StudentIDViewUpdate2  = (TextView)findViewById(R.id.StudentIDViewPermanentUpdate);
FirstNameUpdate2 = (EditText)findViewById(R.id.FirstNameTextUpdate);
LastNameUpdate2       = (EditText)findViewById(R.id.LastNameTextUpdate);
ContactNumberUpdate2  = (EditText)findViewById(R.id.ContactNumberTextUpdate);
EmailUpdate2          = (EditText)findViewById(R.id.EmailAddressTextUpdate);

onCreateUpdateButton

StudentID = StudentIDViewUpdate2.getText().toString(); 
FirstName = FirstNameUpdate2.getText().toString(); 
LastName = LastNameUpdate2.getText().toString(); 
ContactNumber = ContactNumberUpdate2.getText().toString(); 
EmailAddress = EmailUpdate2.getText().toString();

将您的 StudentsFormUpdate class 替换为以下代码:

public class StudentsFormUpdate extends Activity
{
String FirstName, LastName, EmailAddress, ContactNumber, StudentID;
SQLiteDatabase db;
TextView StudentIDViewUpdate2;
EditText FirstNameUpdate2, LastNameUpdate2, ContactNumberUpdate2, EmailUpdate2;

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.students_updateform);
    db = openOrCreateDatabase("ClassManager", MODE_WORLD_READABLE, null);

    String reciever = getIntent().getStringExtra("sender");

    Cursor c = db.rawQuery("SELECT * FROM MasterStudents WHERE StudentID = '" + reciever + "'", null);

    StudentIDViewUpdate2 = (TextView)findViewById(R.id.StudentIDViewPermanentUpdate);
    FirstNameUpdate2 = (EditText)findViewById(R.id.FirstNameTextUpdate);
    LastNameUpdate2 = (EditText)findViewById(R.id.LastNameTextUpdate);
    ContactNumberUpdate2 = (EditText)findViewById(R.id.ContactNumberTextUpdate);
    EmailUpdate2 = (EditText)findViewById(R.id.EmailAddressTextUpdate);


    c.moveToFirst();
    StudentIDViewUpdate2.setText(c.getString(c.getColumnIndex("StudentID")));
    FirstNameUpdate2.setText(c.getString(c.getColumnIndex("FirstName")));
    LastNameUpdate2.setText(c.getString(c.getColumnIndex("LastName")));
    ContactNumberUpdate2.setText(c.getString(c.getColumnIndex("ContactNumber")));
    EmailUpdate2.setText(c.getString(c.getColumnIndex("EmailAddress")));


}

public void UpdateButton(View view)
{

    StudentID = StudentIDViewUpdate2.getText().toString();
    FirstName = FirstNameUpdate2.getText().toString();
    LastName = LastNameUpdate2.getText().toString();
    ContactNumber = ContactNumberUpdate2.getText().toString();
    EmailAddress = EmailUpdate2.getText().toString();

    db.execSQL("UPDATE MasterStudents SET FirstName = '" + FirstName + "', LastName = '" + LastName + "', ContactNumber = '" + ContactNumber + "', " +
               "EmailAddress = '" + EmailAddress + "' WHERE StudentID = " + StudentID + ";");

    Toast toast = Toast.makeText(getApplicationContext(), "Student Updated", Toast.LENGTH_SHORT);
    toast.show();
    finish();
}

}