Почему он не создает таблицу и не добавляет данные? - PullRequest
0 голосов
/ 30 октября 2018

DatabaseHelper.java:

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

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG = "DatabaseHelper";
    public static final String DATABASE_NAME = "daysDATABASE.db";
    public static final String TABLE_NAME = "daysDATABASE";
    private static final String COL1 = "datez";
    private static final String COL2 = "json";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY, datez TEXT, json TEXT)");
    }

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

    public boolean addData(String date, String json) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("datez", date);
        contentValues.put("json", json);
        db.insert(TABLE_NAME, null, contentValues);
        return true;
    }

MainActivity.java:

public class MainActivity extends AppCompatActivity {
DatabaseHelper mydb;

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

        mydb = new DatabaseHelper(this);
        mydb.addData("02164987", "adsdsadsadsadsadsadsa");
    }

Если я открою базу данных, то в ней не будет ни таблицы, ни данных ofc .., поскольку таблица не создана.

............................................... .................................................. .................................................. .......

Я бы сказал больше информации, но я не думаю, что вам нужно больше, чем этот класс 2 Java. Я скопировал, вставил и изменил некоторые вещи из учебника, но кажется, что по какой-то причине это не работает.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Добавление ответа forpas, который решает основную причину проблемы, я предлагаю вам использовать

db.insertOrThrow(TABLE_NAME, null, contentValues);

вместо db.insert(TABLE_NAME, null, contentValues);, чтобы вы могли понять, в чем может быть проблема.

0 голосов
/ 30 октября 2018

Даже если ваша таблица была создана, вы не можете добавить в нее данные с помощью метода addData(), поскольку вы не указали значение для столбца id.
Оператор CREATE создает столбец id как PRIMARY KEY, но не AUTOINCREMENT, поэтому вы должны указать его значение. Но я не думаю, что это то, что вы хотите.
Поэтому измените выражение CREATE на следующее:

db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, datez TEXT, json TEXT)");

затем удалите приложение из эмулятора / устройства, чтобы удалить БД и запустить снова.
Таким образом, метод onCreate() будет выполнен и таблица будет создана.
Edit1 : не забудьте закрыть объект базы данных после того, как вы закончите с ним:

mydb.close()

Edit2 : метод insert(), в случае успеха, возвращает идентификатор новой добавленной строки или -1, если возникла проблема, поэтому я предлагаю вам внести это изменение в метод addData():

int id = db.insert(TABLE_NAME, null, contentValues); 
return (id >= 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...