无法将数据写入 SQLite 数据库 Android Studio (Java)

Can't write data into SQLite database Android Studio (Java)

我正在尝试将数据保存到 sqlite 数据库中,我环顾四周,但助手的结构总是这样,我无法找出问题所在。我没有得到任何异常,只是不可能将数据写入 db

public class DBhelper extends SQLiteOpenHelper {
    private static final String QR_TABLE = "QR_TABLE";
    private static final String ID = "COLUMN_ID";
    private static final String C_TEXT = "COLUMN_TEXT";
    private static final String C_DATE = "COLUMN_DATE";
    private static final String DB_NAME = "qreader.db";

    public DBhelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTableStatement = "CREATE TABLE " + QR_TABLE + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + C_TEXT + " TEXT, "+ C_DATE + "TEXT)";
        db.execSQL(createTableStatement);
    }

 
    public boolean addRow(String text, String date){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        cv.put(C_TEXT, text);
        cv.put(C_DATE, date);

        long result = db.insert(QR_TABLE, null, cv);
        db.close();
        if(result == -1){
            return false;
        }
        return true;

    }

这是 MainActivity 文件

public class MainActivity extends AppCompatActivity {

    protected static TextView tvresult;
    private DBhelper db;
...

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this, "NOT DELETED", Toast.LENGTH_SHORT).show();
        db = new DBhelper(this);
        Boolean res;
        for(int i=0; i<30; i++){
            res = db.addRow("Prova", "10");
            if(res)
                Log.w("myapp", "Added");
        }
        Log.w("App", db.getValues().toString());
...

在我的日志中,我看到 getValues() 的结果为空,因此数据库未填充,并且“已添加”消息永远不会发送到 logcat。

尝试以下查询并重新安装您的应用程序

String createTableStatement = "CREATE TABLE " + QR_TABLE + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + C_TEXT + " TEXT, " + C_DATE + " TEXT" +")";
    

使用 insertOrThrow() 而不是 insert() 以获得有用的异常消息。

可能说 COLUMN_DATE 不存在,原因是 onCreate() 中缺少 space:C_DATE + "TEXT)" 应该是 C_DATE + " TEXT)" .添加 space 后,您可以卸载您的应用程序以使用更新后的架构重新创建数据库文件。