插入时数据类型不匹配(代码 20)

2024-03-08

在我的项目中,我使用 sqlite 数据库来保存图片及其位置。我在尝试将数据插入数据库时​​收到此错误:

E/SQLiteLog: (20) statement aborts at 5: [INSERT INTO PHOTO VALUES(NULL,?,?,?,?)] datatype mismatch
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.tomer.finalproject, PID: 18550
                  android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 20)
                      at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                      at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:786)
                      at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:926)

这是我的代码:

名为 SQLiteOpenHelper 的类内部的插入方法:

public void insertData(String name, String lat, String lon, byte[] image) {

        SQLiteDatabase database = getWritableDatabase();
        String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)";
        SQLiteStatement statement = database.compileStatement(sql);
        statement.clearBindings();
        statement.bindString(1, name);
        statement.bindString(2, lat);
        statement.bindString(3, lon);
        statement.bindBlob(4, image);

        statement.executeInsert();

}

我在另一个活动的按钮“添加”中将此称为:

这两行位于 onCreate 下

sqLiteHelper=new SQLiteHelper(this,"GalleryDB.sqlite",null,1);
        sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS PHOTO (name VARCHAR,lat VARCHAR,lon VARCHAR,image BLOG,Id INTEGER PRIMARY KEY  AUTOINCREMENT)");

这是我的添加按钮:

        btnadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               GPStracker g = new GPStracker(getApplicationContext());
               Location l = g.getLocation();
                if (l != null) {
                    double lat = l.getLatitude();
                    double lon = l.getLongitude();
                     String stLat= String.valueOf(lat);
                     String stLon= String.valueOf(lon);
                    try{
                Toast.makeText(getApplicationContext(), "Saved To Gallery!", Toast.LENGTH_SHORT).show();
                 sqLiteHelper.insertData(etname.getText().toString().trim(),stLat.trim(),stLon.trim(),imageViewToByte(imageView));

                   }
                    catch (Exception e){
                       e.printStackTrace();
                    }


                }


                }
        });

只是想指出,一切正常,直到我的笔记本电脑崩溃,我不得不更换为另一台。

感谢您的帮助。


我认为你的问题在于列顺序,最重要的是 rowid 列的别名的限制,在你的情况下Id柱子 (Id INTEGER PRIMARY KEY AUTOINCREMENT定义Id作为 rowid 列的别名).

  • Note other columns can store any value as per :-
    • Any column in an SQLite version 3 database, except an INTEGER PRIMARY KEY column, may be used to store a value of any storage class.

    • SQLite 版本 3 中的数据类型 https://sqlite.org/datatype3.html

这样的列只能存储整数值。String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)";相当于按照以下方式插入值:-

  • NULL 进入name column
  • 名称,如通过,进入lat column
  • 经纬度,进入lon column
  • lon,正如过去的那样,进入image column
  • 传递的图像进入 Id 列(bye[]无法存储在 Id 列中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插入时数据类型不匹配(代码 20) 的相关文章

随机推荐

  • “zipAlignExe”不存在。在 Android Studio 上运行我的项目时出错

    我在下面遇到错误 Error A problem was found with the configuration of task project1 zipalignDebug gt File D Program Files Android
  • Eclipse 的最佳 JVM 设置是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 隐藏纵向中的 UISplitViewController 覆盖

    在采用新的UISplitViewController我正在尝试更改使用时发生的默认行为UISplitViewControllerDisplayModeAutomatic mode 在纵向工作时 我希望当用户触发推送到细节侧时隐藏主覆盖层 默
  • 通过 http 请求下载文件时的进度条

    我需要下载一个相当大的 200MB 文件 我想出了如何下载并保存文件here https stackoverflow com questions 16694907 how to download large file in python w
  • numpy.sin 函数以度为单位?

    我正在研究一个与计算折射角有关的问题 但是 我似乎无法以度为单位使用 numpy sin 函数 我尝试使用 numpy Degrees 和 numpy rad2deg numpy sin 90 numpy degrees numpy sin
  • 如何使用 JavaFX 侦听在 TextField 中完成的鼠标粘贴?

    将文本复制到剪贴板 右键单击文本字段并按 粘贴 有没有办法在单击粘贴时监听 或者更确切地说 以这种方式粘贴某些内容后 字段中的输入文本发生了变化 因为这些在这种特殊情况下不起作用 setOnKeyReleased setOnInputMet
  • C 预处理器:在 #warning 中展开宏

    我想在 warning 指令中打印宏值 展开宏 例如 对于代码 define AAA 17 warning AAA 所需的编译时输出是 warning AAA 17 我该用什么 或者 如何增强代码 您可以使用预处理器指令 pragma me
  • ValueError:给定的 numpy 数组中至少有一个步幅为负,并且当前不支持具有负步幅的张量

    我正在使用 RL 编写自动驾驶代码 我正在使用稳定的基线3和开放的人工智能健身房环境 我在 jupyter 笔记本中运行以下代码 但出现以下错误 Testing our model episodes 5 test the environme
  • 使用经典 ASP 将 Base64 保存到图像

    我一直在尝试使用经典 ASP 从服务器端将 base64 文件保存为图像 我想要的是将文件自动保存到特定位置并给它一个文件名 现在我可以很好地编码它的这方面 但是 如果不先在浏览器上渲染 我就无法获取保存图像的代码 这对我来说不起作用 因为
  • 使用 Mercurial SCM 进行分支

    现在我正在学习 Ruby on Rails 并且正在阅读 Agile Web Development with Rails 一书 我还决定尝试一下 Mercurial 因为我已经阅读了分布式 SCM 的相关内容 而且这似乎是一个理想的情况
  • 从经典 asmx 切换到 wcf 的好处

    最近 我从使用 asmx Web 服务切换到使用 wcf 服务 转换即将完成 但我知道我需要进行大量错误检查和测试 以确保所有内容都按预期移植 我的问题是 到目前为止 我只能想到使用 wcf 的一个好处 那就是您可以获得一种简单的方法来实现
  • 使用 gae 远程时发生错误:com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException:302

    当我使用 gae 远程 api 连接到远程服务器时 发生错误 如下所示 com google appengine repackaged com google api client http HttpResponseException 302
  • 按值对字典排序

    我有一本字典 格式如下 honda 4 toyota 7 ford 3 chevy 10 我想按第二列 即值 降序对其进行排序 期望的输出 雪佛兰 10 丰田 7 本田 4 福特 3 感谢来自以下机构的卡里登 如何按值对字典进行排序 htt
  • 将 pandas 数据框中的行和上一行与数百万行进行比较的最快方法

    我正在寻找解决方案来加速我编写的函数 以循环遍历 pandas 数据帧并比较当前行和前一行之间的列值 例如 这是我的问题的简化版本 User Time Col1 newcol1 newcol2 newcol3 newcol4 0 1 6 c
  • Java图形布局算法

    在我的 Java 应用程序中 我需要某种布局算法 第一种方法如下 需要安装Graphviz包 创建点文件 从java应用程序调用graphviz并解析输出 布局 使用 graphviz 的布局显示图形 属性点 但这个解决方案需要在运行的机器
  • C#编译器验证对象时的空状态静态分析

    我在我的项目中启用了 Nullable 检查 并且在代码中的很多地方我检查输入对象及其属性 如果出现问题则抛出异常 但如果一切正常 那么我确信输入对象不为空 有没有办法告诉编译器 以某种方式使用 NotNullWhen 属性或类似的东西 我
  • 从共享组件库导出“react-router”重定向

    我正在构建一个共享 React 组件库 有一个PrivateRoute我想要包含的组件 但是 当我将组件从模块库导入另一个应用程序时 出现错误 错误 不变失败 您不应在 之外使用 The PrivateRoute组件包裹着react rou
  • Git 将“未更改”的文件添加到舞台

    对于我正在从事的项目 我想使用 git add A 将一些文件添加到舞台上 问题是 Git 认为这些文件自上次提交以来没有变化 因此它们被忽略 然而 我亲自更改了该文件 但 Git 仍然认为该文件未更改 如何 强制 将该单个文件添加到我的存
  • 使用另一个表的总和更新表中的列

    我对 SQL 比较陌生 无法解决以下问题 简而言之 我有两张桌子 我们可以调用第一个表people name Margaret Jim Lola 第二个是一个列表expenses与不同实体相关的不同类型 name type amount M
  • 插入时数据类型不匹配(代码 20)

    在我的项目中 我使用 sqlite 数据库来保存图片及其位置 我在尝试将数据插入数据库时 收到此错误 E SQLiteLog 20 statement aborts at 5 INSERT INTO PHOTO VALUES NULL da