【问题标题】:Can't write data into SQLite database Android Studio (Java) [closed]无法将数据写入 SQLite 数据库 Android Studio (Java) [关闭]
【发布时间】:2021-06-11 18:28:56
【问题描述】:

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

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。

【问题讨论】:

  • 贴出getValues()的代码

标签: java android sqlite sqliteopenhelper


【解决方案1】:

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

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

【讨论】:

  • 就是这样!真的很感谢,我修改了onUpgrade并创建了一个新版本来修改架构。
【解决方案2】:

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

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

【讨论】:

  • 卸载应用后是什么意思?数据库由应用程序中的类创建,必须安装并启动才能工作
  • 只需重新安装您的应用程序
  • 已经尝试过,即使在另一台新设备上也是如此
猜你喜欢
  • 1970-01-01
  • 2019-02-10
  • 2021-10-06
  • 2020-08-03
  • 2016-03-26
  • 1970-01-01
  • 2015-05-22
  • 2016-10-03
  • 2018-05-08
相关资源
最近更新 更多