【问题标题】:Insert in SQLite Database - Android插入 SQLite 数据库 - Android
【发布时间】:2020-03-26 21:01:22
【问题描述】:

我目前正在处理我的 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);
    }
}


【问题讨论】:

  • 你怎么知道插入不起作用?如果您正在拉取数据库文件以查看其中的内容,请记住同时拉取临时文件(wal、shm),或者关闭数据库以将更改持久保存到 db 文件中。除此之外,如果插入本身失败,请使用insertOrThrow() 获取有用的异常。
  • 我进入设备文件资源管理器保存了数据库文件,并尝试使用数据库浏览器查看内容,但里面什么都没有。我也多次插入数据,但文件大小也从未改变。
  • 你检查insertStatistics()的返回值了吗?
  • 是的。当我在这里调用该方法时,只是为了确保我做对了:` long SavingStatus = dbHandler.insertStatistics(...myParams); if (savingStatus

标签: java android sqlite android-studio


【解决方案1】:

documentation 说:

SQLite 没有专门用于存储日期和/或时间的存储类。相反,SQLite 的内置 Date And Time Functions 能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  • TEXT 作为 ISO8601 字符串 ("YYYY-MM-DD HH:MM:SS.SSS")。
  • REAL 作为 Julian day numbers,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。根据预测的公历。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

因此,要么将您的日期转换为这种格式,然后尝试插入或将表格的日期列数据类型设置为文本(我不建议这样做)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多