Вставить в базу данных SQLite - Android - PullRequest
0 голосов
/ 27 марта 2020

Я сейчас работаю над проектом Android класса. У меня есть некоторые проблемы с оператором вставки в базе данных; Я использую SQLite. Когда я запускаю приложение, моя база данных создается правильно, но значения не вставляются. Я пытался отослать себя к онлайн-предложениям и решениям и попытался реализовать их, но безрезультатно.

Пожалуйста, мне нужна помощь. Спасибо.

DBHandler. java

package ck.edu.com.birch;

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

import java.text.SimpleDateFormat;
import java.util.Date;

public class DBHandler {

    String TAG = "Tennis Tracker";

    String DB_NAME = "TennisEFREI.db";
    String DB_TABLE = "statistics";
    int DB_VERSION = 1;

    String SQL_CREATE = "CREATE TABLE " + DB_TABLE +
            " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "playerOnename TEXT NOT NULL, " +
            "playerTwoname TEXT NOT NULL, " +
            "winner TEXT NOT NULL, " +
            "wonPointsPlayer1 INTEGER NOT NULL, " +
            "wonPointsPlayer2 INTEGER NOT NULL, " +
            "wonSetsPlayer1 INTEGER NOT NULL, " +
            "wonSetsPlayer2 INTEGER NOT NULL, " +
            "acePlayer1 INTEGER, " +
            "acePlayer2 INTEGER, " +
            "winPlayer1 INTEGER, " +
            "winPlayer2 INTEGER, " +
            "errorPlayer1 INTEGER, " +
            "errorPlayer2 INTEGER, " +
            "date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";
    String SQL_DROP = "DROP TABLE IF EXISTS " + DB_TABLE;

    DatabaseHelper databaseHelper;

    private SQLiteDatabase db;

    public DBHandler(Context context) {
        databaseHelper = new DatabaseHelper(context);
    }

    class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(SQL_CREATE);

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(SQL_DROP);
            onCreate(db);
        }
    }

    public void open() throws SQLException {
        db = databaseHelper.getWritableDatabase();
    }

    public void close() {
        databaseHelper.close();
    }

    public long insertStatistics(String playerOnename, String playerTwoname, String winner, int wonPointsPlayer1, int wonPointsPlayer2, int wonSetsPlayer1, int wonSetsPlayer2, int acePlayer1, int acePlayer2, int winPlayer1, int winPlayer2, int errorPlayer1, int errorPlayer2) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
        String date = simpleDateFormat.format(new Date());
        ContentValues contentValues = new ContentValues();
        contentValues.put("playerOnename", playerOnename);
        contentValues.put("playerTwoname", playerTwoname);
        contentValues.put("winner", winner);
        contentValues.put("wonPointsPlayer1", wonPointsPlayer1);
        contentValues.put("wonPointsPlayer2", wonPointsPlayer2);
        contentValues.put("wonSetsPlayer1", wonSetsPlayer1);
        contentValues.put("wonSetsPlayer2", wonPointsPlayer2);
        contentValues.put("acePlayer1", acePlayer1);
        contentValues.put("acePlayer2", acePlayer2);
        contentValues.put("winPlayer1", winPlayer1);
        contentValues.put("winPlayer2", winPlayer2);
        contentValues.put("errorPlayer1", errorPlayer1);
        contentValues.put("errorPlayer2", errorPlayer2);
        contentValues.put("date", date);
        Log.d(TAG, "VALUES : " + contentValues);
        return db.insert(DB_TABLE, null, contentValues);
    }
}


1 Ответ

0 голосов
/ 27 марта 2020

Документация гласит:

В SQLite отсутствует класс хранения, предназначенный для хранения дат и / или времени. Вместо этого встроенные функции даты и времени SQLite способны хранить даты и время в виде значений TEXT, REAL или INTEGER:

  • TEXT в виде строк ISO8601 («ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС»).
  • REAL как числа в юлианских днях, количество дней с полудня в Гринвиче 24 ноября, 4714 Б. C. в соответствии с prolepti c григорианский календарь.
  • INTEGER как Unix Время, количество секунд с 1970-01-01 00:00:00 UT C.

Так что либо преобразуйте свою дату в этот формат и попробуйте вставить или установить тип данных столбца даты вашей таблицы в текст (что я не рекомендую).

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