Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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,我正在研究android SQLite从数据库中插入和删除。最初,我尝试在一个单独的项目中工作,效果很好,但当我在项目中实现相同的功能时,我正在进行的工作却不起作用。我需要你的帮助。非常感谢。 下面是数据库的代码 public class DBStaffList { private static final String KEY_STAFFID = "StaffId"; private static final String KEY_STAFFNAME = "StaffN

我正在研究android SQLite从数据库中插入和删除。最初,我尝试在一个单独的项目中工作,效果很好,但当我在项目中实现相同的功能时,我正在进行的工作却不起作用。我需要你的帮助。非常感谢。 下面是数据库的代码

   public class DBStaffList {

    private static final String KEY_STAFFID = "StaffId";
    private static final String KEY_STAFFNAME = "StaffName";

    private static final String DATABASE_NAME = "DB";
    private static final String DATABASE_TABLE = "StaffList";
    private static final int DATABASE_VERSION = 1;

    private DBStaffListHelper staffListHelper;
    private final Context staffListContext;
    private SQLiteDatabase staffListDatabase;

    private static class DBStaffListHelper extends SQLiteOpenHelper {

        public DBStaffListHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_STAFFID
                    + " TEXT NOT NULL, " + KEY_STAFFNAME + " TEXT NOT NULL);"
                    );

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(db);

        }

    }

    public DBStaffList (Context c){
        staffListContext = c;
    }

    public DBStaffList open() throws SQLException{
        staffListHelper = new DBStaffListHelper(staffListContext);
        staffListDatabase = staffListHelper.getWritableDatabase();
        return this;        
    }

    public void close(){
        staffListHelper.close();
    }

    public long createStaffEntry(String staffIdd, String name) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_STAFFID, staffIdd);
        cv.put(KEY_STAFFNAME, name);        
        return staffListDatabase.insert(DATABASE_TABLE, null, cv);      
    }

    public String getStaffData() {
        String[] columns = new String[]{KEY_STAFFID, KEY_STAFFNAME};
        Cursor c = staffListDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);

        String result = "";

        int iStaffId = c.getColumnIndex(KEY_STAFFID);
        int iStaffName = c.getColumnIndex(KEY_STAFFNAME);


        for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){
            result = result + c.getString(iStaffId) + " " + c.getString(iStaffName) + "\n";
        }


        return result;
    }

    public void deleteTable() throws SQLException{
        staffListDatabase.execSQL("DELETE FROM " + DATABASE_TABLE);
    }
从其他类访问代码:

DBStaffList saveStaffList = new DBStaffList(IncidentsActivity.this);
                saveStaffList.open();
                saveStaffList.createStaffEntry("101", "Rao");
                saveStaffList.close();
日志类别:

  02-08 09:26:46.361: E/SpannableStringBuilder(8010): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
02-08 09:26:46.361: E/SpannableStringBuilder(8010): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
02-08 09:26:46.991: E/SQLiteLog(8010): (1) table StaffList has no column named StaffId
02-08 09:26:47.031: E/SQLiteDatabase(8010): Error inserting StaffId=101 StaffName=Rao
02-08 09:26:47.031: E/SQLiteDatabase(8010): android.database.sqlite.SQLiteException: table StaffList has no column named StaffId (code 1): , while compiling: INSERT INTO StaffList(StaffId,StaffName) VALUES (?,?)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1108)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:681)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:589)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1573)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1445)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at com.dimensions.dimensionsapp.DBStaffList.createStaffEntry(DBStaffList.java:68)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at com.dimensions.dimensionsapp.IncidentsActivity.onClick(IncidentsActivity.java:282)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.view.View.performClick(View.java:4262)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.view.View$PerformClick.run(View.java:17421)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.os.Handler.handleCallback(Handler.java:615)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.os.Looper.loop(Looper.java:137)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at android.app.ActivityThread.main(ActivityThread.java:4944)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at java.lang.reflect.Method.invokeNative(Native Method)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at java.lang.reflect.Method.invoke(Method.java:511)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-08 09:26:47.031: E/SQLiteDatabase(8010):     at dalvik.system.NativeStart.main(Native Method)
02-08 09:26:46.361:E/SpannableStringBuilder(8010):SPAN_EXCLUSIVE_EXCLUSIVE SPAN不能为零长度
02-08 09:26:46.361:E/SpannableStringBuilder(8010):SPAN_EXCLUSIVE_EXCLUSIVE SPAN的长度不能为零
02-08 09:26:46.991:E/SQLiteLog(8010):(1)表StaffList没有名为StaffId的列
02-08 09:26:47.031:E/SQLiteDatabase(8010):插入StaffId=101 StaffName=Rao时出错
02-08 09:26:47.031:E/SQLiteDatabase(8010):android.database.sqlite.SQLiteException:表StaffList没有名为StaffId(代码1)的列,编译时:插入StaffList(StaffId,StaffName)值(?,)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteConnection.nativepreparest陈述(本机方法)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteConnection.acquiredpreparedstatement(SQLiteConnection.java:1108)
02-08 09:26:47.031:E/SQLiteDatabase(8010):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:681)
02-08 09:26:47.031:E/SQLiteDatabase(8010):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:589)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1573)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1445)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于com.dimensions.dimensionsapp.DBStaffList.createStaffEntry(DBStaffList.java:68)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于com.dimensions.dimensionsapp.IncidentsActivity.onClick(IncidentsActivity.java:282)
02-08 09:26:47.031:E/SQLiteDatabase(8010):在android.view.view.performClick(view.java:4262)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.view.view$PerformClick.run(view.java:17421)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.os.Handler.handleCallback(Handler.java:615)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.os.Handler.dispatchMessage(Handler.java:92)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.os.Looper.loop(Looper.java:137)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于android.app.ActivityThread.main(ActivityThread.java:4944)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于java.lang.reflect.Method.invokenactive(本机方法)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于java.lang.reflect.Method.invoke(Method.java:511)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-08 09:26:47.031:E/SQLiteDatabase(8010):位于dalvik.system.NativeStart.main(本机方法)

当我在一个单独的项目中做同样的事情时,它工作得非常好。请建议。

没有此类表格例外,因为

"CREATE TABLE "+ DATABASE_TABLE + " (" +
                KEY_COSTCODE + "TEXT NOT NULL, " + 
                KEY_COSTCODENAME + "TEXT NOT NULL);"  
应该是

 "CREATE TABLE "+ DATABASE_TABLE + " (" +
                KEY_COSTCODE + " TEXT NOT NULL, " + 
                KEY_COSTCODENAME + " TEXT NOT NULL);"  

key\u costcode
key\u codename

您的
onCreate
后的空格有错误(请参阅@user2450263的答案),因此数据库没有表。修复错误,然后确保再次调用onCreate es(如果数据库退出,则不会调用onCreate)。要实现这一点,请将
数据库\u版本
更改为
2

这解决了我的问题,谢谢你。但我有另一个名为DBStaffList的表创建,有相同的错误。@Rao您是否卸载了应用程序,删除了数据库并再次运行了应用程序?没有,我没有这样做。这样做,看看是否仍然发生这种情况。顺便说一句,这次的问题是StaffId列,而不是表creationI卸载并重新安装了应用程序。在logcat中它仍然会给我同样的错误。更改版本对我来说很有效。谢谢你的帮助