Почему я не могу добавить данные во все столбцы? - PullRequest
0 голосов
/ 09 мая 2020

Я пытался добавить данные в 5 столбцов, но по какой-то причине могу добавить их только в 1-й столбец. Я что-то упускаю? Насколько я понимаю, я сообщаю команде имя моей таблицы, и она вводит данные во все столбцы последовательно, или мне что-то не хватает?

Извините, если это немного запутано, потому что объединение 2 видео Youtube в одном код не так прост, как я: (

Форма базы данных:

package com.example.laivumusis;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;
import com.example.laivumusis.KlausimuContracts.*;

import java.util.ArrayList;
import java.util.List;

public class KlausimynoDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "Klausimynas.db";
    private static final int DATABASE_VERSION = 6;

    private SQLiteDatabase db;

    public KlausimynoDatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        this.db = db;

        final String SQL_CREATE_QUESTIONS_TABLE = "CREATE TABLE " +
                KlausimuLentele.TABLE_NAME + " ( " +
                KlausimuLentele._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KlausimuLentele.COLUMN_QUESTION + " TEXT, " +
                KlausimuLentele.COLUMN_OPTION1 + " TEXT, " +
                KlausimuLentele.COLUMN_OPTION2 + " TEXT, " +
                KlausimuLentele.COLUMN_OPTION3 + " TEXT, " +
                KlausimuLentele.COLUMN_ANSWER_NR + " INTEGER" +
                ")";


        db.execSQL(SQL_CREATE_QUESTIONS_TABLE);
        fillKlausimuLentele();

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + KlausimuLentele.TABLE_NAME);
        onCreate(db);
    }

    public void addData(ContentValues contentValues){
        getWritableDatabase().insert(KlausimuContracts.KlausimuLentele.TABLE_NAME, null, contentValues);
    }

    public Cursor getListContents() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM " + KlausimuLentele.TABLE_NAME,null );
        return data;
    }


    private void fillKlausimuLentele() {
        Klausimai q1 = new Klausimai("Kelintais metais buvo išleista java proogramavimo kalba?", "1991", "1995", "1989", 1);
        addQuestion(q1);
        Klausimai q2 = new Klausimai("Ar destytojas pasigailės mūsų?", "Priklauso nuo darbo", "Priklauso nuo pingų", "Prklauso nuo nuotaikos", 1);
        addQuestion(q2);
        Klausimai q3 = new Klausimai("Kai sunervina žaidimas koks geriausias būdas iš jo išeiti?", "Alt+F4", "Quit To desktop", "Ištraukti maitinimo laida",1);
        addQuestion(q3);
        Klausimai q4 = new Klausimai("A is correct again", "A", "B", "C", 1);
        addQuestion(q4);
        Klausimai q5 = new Klausimai("B is correct agian", "A", "B", "C", 2);
        addQuestion(q5);
    }

    private void addQuestion(Klausimai klausimai) {
        ContentValues cv = new ContentValues();
        cv.put(KlausimuLentele.COLUMN_QUESTION, klausimai.getKlausimas());
        cv.put(KlausimuLentele.COLUMN_OPTION1, klausimai.getPasirinkimas1());
        cv.put(KlausimuLentele.COLUMN_OPTION2, klausimai.getPasirinkimas2());
        cv.put(KlausimuLentele.COLUMN_OPTION3, klausimai.getPasirinkimas3());
        cv.put(KlausimuLentele.COLUMN_ANSWER_NR, klausimai.getAtsakymoNr());
        db.insert(KlausimuLentele.TABLE_NAME, null, cv);

    }

    public List<Klausimai> getAllQuestions() {
        List<Klausimai> klausimuSarasas = new ArrayList<>();
        db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM " + KlausimuLentele.TABLE_NAME, null);

        if (c.moveToFirst()) {
            do {
                Klausimai klausimai = new Klausimai();
                klausimai.setKlausimas(c.getString(c.getColumnIndex(KlausimuLentele.COLUMN_QUESTION)));
                klausimai.setPasirinkimas1(c.getString(c.getColumnIndex(KlausimuLentele.COLUMN_OPTION1)));
                klausimai.setPasirinkimas2(c.getString(c.getColumnIndex(KlausimuLentele.COLUMN_OPTION2)));
                klausimai.setPasirinkimas3(c.getString(c.getColumnIndex(KlausimuLentele.COLUMN_OPTION3)));
                klausimai.setAtsakymoNr(c.getInt(c.getColumnIndex(KlausimuLentele.COLUMN_ANSWER_NR)));
                klausimuSarasas.add(klausimai);
            } while (c.moveToNext());
        }

        c.close();
        return klausimuSarasas;

    }
}

Добавление данных java класс:

    package com.example.laivumusis;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class HomeActivity extends AppCompatActivity {

    KlausimynoDatabaseHelper myDB;
    Button btnprideti, btneditdata;
    EditText editText, editText2, editText3, editText4, editText5;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        editText = (EditText) findViewById(R.id.editText);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText3 = (EditText) findViewById(R.id.editText3);
        editText4 = (EditText) findViewById(R.id.editText4);
        editText5 = (EditText) findViewById(R.id.editText5);
        btnprideti = (Button) findViewById(R.id.btnprideti);
        btneditdata = (Button) findViewById(R.id.btneditdata) ;
        myDB = new KlausimynoDatabaseHelper(this);


        btneditdata.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(HomeActivity.this, ViewListData.class);
                startActivity(intent);
            }
        });

        btnprideti.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String editTextValue = editText.getText().toString();
                String editText2Value = editText2.getText().toString();
                String editText3Value = editText3.getText().toString();
                String editText4Value = editText4.getText().toString();
                String editText5Value = editText5.getText().toString();

                if (editTextValue.length()>1) {
                    ContentValues contentValues = new ContentValues();
                    contentValues.put(KlausimuContracts.KlausimuLentele.COLUMN_QUESTION, editTextValue);
                    contentValues.put(KlausimuContracts.KlausimuLentele.COLUMN_OPTION1, editText2Value);
                    contentValues.put(KlausimuContracts.KlausimuLentele.COLUMN_OPTION2, editText3Value);
                    contentValues.put(KlausimuContracts.KlausimuLentele.COLUMN_OPTION3, editText4Value);
                    contentValues.put(KlausimuContracts.KlausimuLentele.COLUMN_ANSWER_NR, editText5Value);
                    PridetiData(contentValues);
                    editText.setText("");
                }else{
                    Toast.makeText(HomeActivity.this,"Jūs nieko neirašete!",Toast.LENGTH_LONG).show();
                }
            }
        });
    }
    public void PridetiData (ContentValues contentValues) {
        myDB.addData(contentValues);

       // if(myDB==true) {
           // Toast.makeText(HomeActivity.this,"Data irašyta! ",Toast.LENGTH_LONG).show();
       // }else {
          //  Toast.makeText(HomeActivity.this,"Klaida! ",Toast.LENGTH_LONG).show();
        //}
    }
}

1 Ответ

1 голос
/ 09 мая 2020

Когда вы устанавливаете значения столбцов в объекте ContentValues, вы должны использовать в качестве ключей имена столбцов, например:

contentValues.put(KlausimuLentele.COLUMN_QUESTION, editTextValue);

Также измените метод addData() на этот:

public void addData(ContentValues contentValues){
    getWritableDatabase().insert(KlausimuLentele.TABLE_NAME, null, contentValues);
}
...