Android 输入数据时发生SQLite数据库错误
我几乎完成了第一个数据库的创建,但是我认为我的Android 输入数据时发生SQLite数据库错误,android,sqlite,Android,Sqlite,我几乎完成了第一个数据库的创建,但是我认为我的oncreate中的一些语法是错误的。但是我不知道在哪里?我试着看教程,试着根据他们的教程修改代码,但似乎没有任何效果 package com.example.bash1.sqlitediss; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import andro
oncreate
中的一些语法是错误的。但是我不知道在哪里?我试着看教程,试着根据他们的教程修改代码,但似乎没有任何效果
package com.example.bash1.sqlitediss;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
// Database name
public static final String DATABASE_STOCKDB = "Stock.db";
// Column names
public static final String TABLE_NAME = "stock_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "Name";
public static final String COL_3 = "Datereceived";
public static final String COL_4 = "Expirydate";
public DatabaseHelper(Context context) {
super(context, DATABASE_STOCKDB, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String Name, String Datereceived, String Expirydate){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, Name);
contentValues.put(COL_3, Datereceived);
contentValues.put(COL_4, Expirydate);
long result = db.insert(TABLE_NAME,null,contentValues);
if (result == -1 )
return false;
else
return true;
}
}
错误如下:
插入Name=sss Datereceived=s Expirydate=s时出错`
android.database.sqlite.SQLiteException:table stock_table没有名为Name(代码1)的列,编译时:INSERT INTO stock_table(Name,Datereceived,Expirydate)值(?,?)
您有“创建表库存\u表”+表名称
——您正在复制表名称。此外,列名与其类型之间没有空格。请为每个列尝试COL_1+“INTEGER…”
另外,请检查是否将值传递到insertData
。您正在传入字符串,但将列定义为整数。您确定不需要列的文本吗
请查看以获得进一步的指导
此代码对我来说工作正常:
public class DatabaseHelper extends SQLiteOpenHelper {
// Database name
public static final String DATABASE_STOCKDB = "Stock.db";
// Column names
public static final String TABLE_NAME = "stock_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "Name";
public static final String COL_3 = "Datereceived";
public static final String COL_4 = "Expirydate";
public DatabaseHelper(Context context) {
super(context, DATABASE_STOCKDB, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY,"+ COL_2 + " TEXT,"+ COL_3 + " TEXT," + COL_4 +" TEXT" + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String Name, String Datereceived, String Expirydate){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, Name);
contentValues.put(COL_3, Datereceived);
contentValues.put(COL_4, Expirydate);
long result = db.insert(TABLE_NAME,null,contentValues);
if (result == -1 )
return false;
else
return true;
}
}
此外,如果您运行应用程序,然后更改了数据库设计/架构,并且没有正确增加版本号,则数据库可能处于不一致状态。请尝试完全卸载应用程序并重新安装。问题在于,您的“创建表”命令在列名和类型之间没有空格-
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")");
}
这就是为什么没有“Name”列,而是“NameINTEGER”列。其他专栏也存在类似的问题。此外,您正在插入文本值,但有整数类型的列,因此将主键以外的列更改为文本类型列。换成-
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY,"+ COL_2 + " TEXT, "+ COL_3 + " TEXT, " + COL_4 +" TEXT" + ")");
}
我应该从该行中删除表名吗?删除“库存表”。您现在拥有的基本上是,
“创建表库存”\u表库存”…
刚刚删除了它,将其保留为“db.execSQL(“创建表”+table\u NAME+”(“+COL\u 1+”整数主键,“+COL\u 2+”整数,“+COL\u 3+”整数,“+COL\u 4+”整数“+”)代码>`出现了相同的错误android.database.sqlite.SQLiteException:table stock_table没有名为Name(代码1)的列,编译时:INSERT INTO stock_table(Name,Datereceived,Expirydate)值(?,?)
再次感谢您尝试帮助您将哪些值传递到insertData()
?您正在将所有字段定义为整数,但您正在传递字符串值。我刚刚将随机字母添加到testHi Shadab,并将其更改为db.execSQL(“创建表”+表名+”(“+COL_1+”整数主键,“+COL_2+”文本,“+COL_3+”文本,“+COL_4+”文本“+”))
现在应该是正确的,它显示的错误消息是没有名为NameCopy的collum,与我编写的代码完全相同,然后让我知道。是的,我忘了提到,只有在卸载应用程序或更改db版本号后才能尝试这些更改,否则不会有任何效果。很明显,您的表stock_表没有名为Name的列,只有阅读异常提示您很好。