正在尝试在android NoSuchTable中的sqlite数据库中插入行
我是数据库方面的新手。目前,我已经创建了一个应用程序,我想将它链接到一个SQLite数据库。在youtube上学习了一个教程之后,我通过添加一个简单的行来测试我的数据库。我得到一个错误正在尝试在android NoSuchTable中的sqlite数据库中插入行,android,android-sqlite,sqliteopenhelper,Android,Android Sqlite,Sqliteopenhelper,我是数据库方面的新手。目前,我已经创建了一个应用程序,我想将它链接到一个SQLite数据库。在youtube上学习了一个教程之后,我通过添加一个简单的行来测试我的数据库。我得到一个错误E/SQLiteLog:(1)没有这样的表:分数E/SQLiteDatabase:error插入DScore=0 LScore=0 Name=Aris 这是我目前的代码: public class DB_Controller { private DB_Scores helper; pu
E/SQLiteLog:(1)没有这样的表:分数E/SQLiteDatabase:error插入DScore=0 LScore=0 Name=Aris
这是我目前的代码:
public class DB_Controller {
private DB_Scores helper;
public DB_Controller(Context context) {
helper = new DB_Scores(context);
}
public long insertRow(String name){
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_Scores.NAME, name);
values.put(DB_Scores.DSCORE, 0);
values.put(DB_Scores.LSCORE, 0);
long id = db.insert(DB_Scores.TABLE_NAME,null, values);
return id;
}
static class DB_Scores extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "scores.db";
private static final String TABLE_NAME = "SCORES";
private static final int DATABASE_VERSION = 1;
private static final String UID = "_id";
private static final String NAME = "Name";
private static final String LSCORE = "LScore";
private static final String DSCORE = "DScore";
private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY " +
"AUTOINCREMENT, "+NAME+" TEXT UNIQUE, "
+LSCORE+" INTEGER, "+DSCORE+" INTEGER);";
private Context context;//?
public DB_Scores(Context context ) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Toast.makeText(context, "Constructor was called", Toast.LENGTH_LONG).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Toast.makeText(context, "onCreate was called", Toast.LENGTH_LONG).show();
} catch (SQLException e) {
Toast.makeText(context, ""+e, Toast.LENGTH_LONG).show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try{
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
Toast.makeText(context, "onUpgrade called", Toast.LENGTH_LONG).show();
onCreate(db);
}catch(SQLException e){
Toast.makeText(context, ""+e, Toast.LENGTH_LONG).show();
}
}
}
}
以及我创建DB_Controller对象的活动
public class Scores\u活动{
private DB_Controller dbController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.scores_activity);
dbController = new DB_Controller(this);
addRow();
}
public void addRow() {
long id=dbController.insertRow("Aris");
if (id < 0) {
Toast.makeText(this, "Unsuccessful", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
}
}
专用数据库控制器dbController;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.scores\u活动);
dbController=新的DB_控制器(此);
addRow();
}
public void addRow(){
long id=dbController.insertRow(“Aris”);
if(id<0){
Toast.makeText(此为“未成功”,Toast.LENGTH_SHORT).show();
}否则{
Toast.makeText(这是“成功”,Toast.LENGTH_SHORT).show();
}
}
它标记为错误源的行是long id=dbController.insertRow(“Aris”);
,
long id=db.insert(db_Scores.TABLE_NAME,null,value);
和addRow();
我的猜测是,我在创建数据库时出现了一个逻辑错误。感谢您花时间更改create table命令,如下所示(查询末尾不需要分号)
查询末尾的分号不是必需的
,但如果有分号,则不会产生任何危害。我从未见过的数据库名称如何。db any我认为您应该尝试将datassename更改为私有静态最终字符串database\u name=“scores”;以及从查询中删除分号我一直在看的教程声称两者是同一件事。@adeelturk在私有静态最终字符串数据库\u NAME=“scores.db”中的db
后面有分号吗
?还有…很抱歉告诉你,几乎每个数据库都按惯例使用.db
扩展。不管怎样,这并不重要。如果你愿意的话,你可以不给它任何扩展,也可以给它一个像.godzilla
这样的幻想扩展。Android不在乎这一点。你可能在第一次应用程序发布后更改了表名execution.use ormlite而不是sqlite当我在测试时,我使用了数据库名,但我想我从未更改过表名。你的意思是,我第一次创建这个数据库时,我有一个不同的表,现在我尝试从头开始做,onCreate方法没有执行?有没有办法检查是这样吗?@rotwang只需卸载并重新安装你的应用程序。享受吧。这真是奇迹。谢谢
private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY " +
"AUTOINCREMENT, "+NAME+" TEXT UNIQUE, "
+LSCORE+" INTEGER, "+DSCORE+" INTEGER )";