Добавить данные в базу данных android SQL - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь добавить указанный столбец c в мою базу данных каждый раз, когда нажимается кнопка, для которой я сделал другую функцию "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)

1 Ответ

0 голосов
/ 17 апреля 2020

android .database.sqlite.SQLiteException: около "CLASS_MISSED": синтаксическая ошибка (код 1 SQLITE_ERROR): при компиляции: CLASS_MISSED

A 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 });
    }

К вашему сведению - У вас есть строка String. Если вы хотите добавить +1, тогда str должен быть int .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...