在android SQL数据库中附加数据



每次按下按钮时,我都试图在数据库中添加一个特定的列。我在数据库助手类中创建了另一个函数"append_data",但由于某种原因,它不起作用。有人能帮我找出我做错了什么吗。

card_click。:java:


public class card_click extends AppCompatActivity {
TextView subject_name;
TextView attendace_info;
ProgressBar progressBar;
TextView credits;
Button add;
String name;
int bad ; int good;
Button minus;
DatabaseHelper databaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_card_click);
databaseHelper = new DatabaseHelper(this);
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.hide();
attendace_info = findViewById(R.id.card_click_attendance_text);
progressBar = findViewById(R.id.card_click_progress_bar);
credits = findViewById(R.id.card_click_credits_show);
add = findViewById(R.id.card_click_add_button);
minus = findViewById(R.id.card_click_minus_button);
Intent intent = getIntent();
good =intent.getIntExtra("class_good" , 1);
bad =intent.getIntExtra("class_missed" , 1);
name = intent.getStringExtra("name");

add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
good++;
databaseHelper.append_data("CLASS_ATTENDED" , name);
}
});
minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bad++;
databaseHelper.append_data("CLASS_MISSED" , name);
}
});


int per = 100;
if(good+bad != 0)
per = (int)(good*100.0)/(good+bad);
String str = "You have atttended "+ String.valueOf(good) +
" out of " +String.valueOf(good+bad)+
" classes";
credits.setText(String.valueOf(intent.getIntExtra("credits" ,0)));
attendace_info.setText(str);
progressBar.setProgress(per);


}
}

数据库助手类:


public class DatabaseHelper extends SQLiteOpenHelper {

private static final String table_name = "SUBJECT_LIST";
private static final String COL0 = "ID";
private static final String COL1 = "NAME";
private static final String COL2 = "CREDITS";
private static final String COL3 = "CLASS_ATTENDED";
private static final String COL4 = "CLASSS_MISSED";

public DatabaseHelper(@Nullable Context context) {
super(context, table_name, null, 4);
}

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + table_name + "("+
COL0+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL1 + " TEXT, " +
COL2 + " INTEGER, "+
COL3 + " INTEGER, "+
COL4 + " INTEGER);";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + table_name);
onCreate(db);
}
boolean addData(String name, int credit){
SQLiteDatabase db =  this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL1 , name);
contentValues.put(COL2 , credit);
contentValues.put(COL3 , 0);
contentValues.put(COL4 , 0);
long result = db.insert(table_name , null , contentValues);
return result != -1;
}
public Cursor getdata(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM SUBJECT_LIST;";
return db.rawQuery(query , null);
}

void append_data(String str, String name){
SQLiteDatabase db =  this.getWritableDatabase();
String query = "UPDATE SUBJECT_LIST " +
"SET "+str+" = "+str +" 1 " +
"where NAME = "+name;
db.execSQL(str);
}

}

我得到的错误:

Process: com.example.app100, PID: 11801
android.database.sqlite.SQLiteException: near "CLASS_MISSED": syntax error (code 1 SQLITE_ERROR): , while compiling: CLASS_MISSED
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1850)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1773)
at com.example.app100.DatabaseHelper.append_data(DatabaseHelper.java:74)
at com.example.app100.card_click$2.onClick(card_click.java:60)
at android.view.View.performClick(View.java:7201)
at android.view.View.performClickInternal(View.java:7170)
at android.view.View.access$3500(View.java:806)
at android.view.View$PerformClick.run(View.java:27562)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

android.database.sqlite.SQLiteException:靠近"class_MISSED":语法编译时出错(代码1 SQLITE_error(:,CLASS_MISSED

SQLite exception,表示SQL解析或执行出错。我认为问题来自您的更新声明。

void append_data(String str, String name){
ContentValues contentValues = new ContentValues();
contentValues.put("str",str+"1"));
db.update("SUBJECT_LIST", contentValues, "NAME = ?",new String[] { name });
}

仅供参考-您的str是String。如果您想要add+1,那么str必须是int

最新更新