繁体   English   中英

为什么它不创建表并添加数据?

[英]Why it does not create the table and add data?

数据库助手.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;
    }

主活动.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 类更多的信息。 我从tutorialspoint教程中复制粘贴并更改了一些内容,但似乎由于某种原因不起作用。

即使您的表已创建,您也无法使用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()

Edit2insert()方法,如果成功,返回新添加行的 id 或 -1 如果有问题,所以我建议你在addData()方法中进行此更改:

int id = db.insert(TABLE_NAME, null, contentValues); 
return (id >= 0);

添加到解决问题根本原因的 forpas 答案中,我建议您使用

db.insertOrThrow(TABLE_NAME, null, contentValues);

而不是db.insert(TABLE_NAME, null, contentValues); 所以你可以得到问题可能是什么的线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM