java - 为什么它不创建表并添加数据?
问题描述
数据库助手.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;
}
MainActivity.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");
}
如果我打开数据库,里面没有表,也没有数据……因为没有创建表。
..................................................... ..................................................... ..................................................... ……
我会告诉更多信息,但我认为您需要的不仅仅是这 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()
Edit2:该insert()
方法如果成功,则返回新添加行的 id 或 -1 如果有问题,因此我建议您在addData()
方法中进行此更改:
int id = db.insert(TABLE_NAME, null, contentValues);
return (id >= 0);
推荐阅读
- javascript - defaultAppConfig 未定义
- java - 在注解中注入值
- python - 如何访问在python中编译的多个返回变量
- python - 如何知道有多少参数传递给引用的函数
- r - R 取更新最大值
- matlab - 性能测量:如何避免将 toc 分配给变量的时间
- python - Python OpenCV ORB 图像对齐的掩码问题
- swift - 符合 Equatable 协议的嵌套枚举会产生错误
- azure-devops - Azure Dev Ops 构建管道上的数据库项目失败
- javascript - Rails 与 MaterializeCSS 生成“输入”除了“选择”,使动态加载不可能