Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 输入数据时发生SQLite数据库错误_Android_Sqlite - Fatal编程技术网

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的列,只有阅读异常提示您很好。