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 SQLiteException:near";空";:在数据库中插入时出现语法错误_Android_Sqlite - Fatal编程技术网

Android SQLiteException:near";空";:在数据库中插入时出现语法错误

Android SQLiteException:near";空";:在数据库中插入时出现语法错误,android,sqlite,Android,Sqlite,你好,我只是想用相关代码简短地说一下 如果我在活动中这样做: Intent i = getIntent(); Bundle extras = i.getExtras(); BitmapFactory.Options bf = new BitmapFactory.Options(); bf.inSampleSize = 2; filename = extras.getString("pic_name")

你好,我只是想用相关代码简短地说一下

如果我在活动中这样做:

     Intent i = getIntent();
          Bundle extras = i.getExtras();

          BitmapFactory.Options bf = new BitmapFactory.Options();
          bf.inSampleSize = 2;


          filename = extras.getString("pic_name");
          ImageView  iv = new ImageView(getApplicationContext());
          Bitmap bm = BitmapFactory.decodeFile(filename, bf);
          iv.setImageBitmap(bm);
          setContentView(iv);

  registerForContextMenu(iv);



public boolean onContextItemSelected(MenuItem item){
       // weatherimagedb = new WeatherImageDB(this);
        //weatherimagedb.open();

        ContentValues vals = new ContentValues();
        int selection = item.getItemId();
        switch(selection){
        case Holidays:

             vals.put(ImageDB.HOLIDAYS, filename);

        break;
        case Weather:
            vals.put(ImageDB.WEATHER, filename);

        break;
        }
             imagedb.tagImage(filename, vals); //logcat error is here

  return true;
}
在imageDB数据库类中,我有这样一个方法:

public long tagImage(String pathname, ContentValues val){  
    return db.insert(DATABASE_TABLE, null, val);    //logcat error is here

}
我在数据库中遇到此错误,但不会使我的应用程序崩溃:

05-19 02:44:55.580: E/Database(3088): Error inserting 
05-19 02:44:55.580: E/Database(3088): android.database.sqlite.SQLiteException: near "null": syntax error: , while compiling: INSERT INTO imagetags(null)  VALUES(NULL);
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1231)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1658)
05-19 02:44:55.580: E/Database(3088):   at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1515)
05-19 02:44:55.580: E/Database(3088):   at com.MyApps.ImageUpdate.ImageDB.tagImage(ImageDB.java:82)
05-19 02:44:55.580: E/Database(3088):   at com.MyApps.ImageUpdate.ViewImage.onContextItemSelected(ViewImage.java:134)
05-19 02:44:55.580: E/Database(3088):   at android.app.Activity.onMenuItemSelected(Activity.java:2254)
05-19 02:44:55.580:E/数据库(3088):插入错误
05-19 02:44:55.580:E/Database(3088):android.Database.sqlite.SQLiteException:接近“null”:语法错误:,编译时:插入imagetags(null)值(null);
05-19 02:44:55.580:E/Database(3088):在android.Database.sqlite.SQLiteCompiledSql.native_compiled(native方法)
05-19 02:44:55.580:E/Database(3088):在android.Database.sqlite.SQLiteCompiledSql.compiled(SQLiteCompiledSql.java:92)
05-19 02:44:55.580:E/Database(3088):在android.Database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:65)
05-19 02:44:55.580:E/Database(3088):位于android.Database.sqlite.SQLiteProgram.(SQLiteProgram.java:83)
05-19 02:44:55.580:E/Database(3088):位于android.Database.sqlite.SQLiteStatement.(SQLiteStatement.java:41)
05-19 02:44:55.580:E/Database(3088):位于android.Database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1231)
05-19 02:44:55.580:E/Database(3088):在android.Database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1658)
05-19 02:44:55.580:E/Database(3088):位于android.Database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1515)
05-19 02:44:55.580:E/Database(3088):位于com.MyApps.ImageUpdate.ImageDB.tagImage(ImageDB.java:82)
05-19 02:44:55.580:E/数据库(3088):在com.MyApps.ImageUpdate.ViewImage.onContextItemSelected(ViewImage.java:134)
05-19 02:44:55.580:E/数据库(3088):在android.app.Activity.onMenuItemSelected(Activity.java:2254)
请问我做错了什么?。。我是否没有正确地使用ContentValues


谢谢。

可能是因为您的
选择既不是
假日
也不是
天气

在某些情况下,可能没有一个case开关是正确的,因此在“val”中不会添加任何内容。

毫无疑问。上下文菜单上有更多选项,我得到的所有选项都是相同的错误。我开始思考内容值是如何丢失的。但是我不知道:(@Sparrow:我很确定你的
ContentValues
是空的……为什么你要用整型常量而不是
R.id.x
值?正如你所看到的,它在一个上下文菜单中,还有那些值(ImageDB.HOLIDAYS和ImageDB.WEATHER)参考数据库中我试图放入图像的列。我不知道是否应该将tagImage方法更改为获取2个字符串参数,然后初始化/使用该方法中的内容值?@sparrow:我在谈论
开关的
大小写
。您是否手动创建菜单和设置将每个菜单项设置为固定的
假日
天气
,等等?似乎是一个非常糟糕的选择。嗯……现在我记得我以前是手动创建它的,然后我切换到从xml菜单资源中膨胀它,但这些情况仍然是指菜单。首先,菜单。第一+1,菜单。第一+2,因为我仍然以相同的顺序编写它们r当我手动执行这些操作时,等等。嗯,这可能是原因吗?因为在xml菜单资源中,我给了它一个正确的“id”。@Hamsi,但我没有在它返回之前调用该方法。