【问题标题】:problem with sql query, variable value not inserting itselfsql查询问题,变量值不插入自身
【发布时间】:2010-03-27 10:03:37
【问题描述】:

旧查询有效,新查询无效。 android logcat给我的错误是: 失败1:没有abcname这个列。 abcname 是我试图从 android 的弹出窗口中获取的编辑视图的值。

我知道第一个查询将在字段中插入这些值,因为它们以单引号给出。我在 adb shell 中输入的相同查询有效。所以我复制了查询,只是删除了与字段名称对应的数据,并插入了变量名称。在尝试运行时,我得到了上述错误。

旧查询:

MapsActivity.myDB.execSQL("INSERT INTO "
    +MapsActivity.TableName
    + " (name, user_comment, latitude, longitude) "
    + " VALUES ('tagName','tagComment','tagLatitude','tagLongitude');");

新查询:

MapsActivity.myDB.execSQL("INSERT INTO "
    +MapsActivity.TableName
    + " (name, user_comment, latitude, longitude) "
    + " VALUES ("+tagName +",'tagComment','tagLatitude','tagLongitude');");

有什么问题?

【问题讨论】:

    标签: sql android sqlite


    【解决方案1】:

    如果tagName 具有值"abc",您的查询将扩展为... VALUE (abc,'tagComment',...。它缺少单引号。

    像这样构建 SQL 会带来不好的业力。请改用 SQLite 的参数绑定机制。

    【讨论】:

    • @1 旧查询工作正常。它的第二个查询不起作用。我必须从变量中获取值,因此我不能使用单引号。我需要替换tagName 的值。 @2 正在研究参数绑定 thnx!
    • 更好:在SQLiteDatabase 上使用insert() 方法,这样您就不会生成任何自己的SQL。
    【解决方案2】:

    我建议创建一个简单的活动记录数据库实现。这是simple sqlite active record for android 的精彩教程。这会增加一些额外的前期时间,但可以在您开发时节省您的时间。

    【讨论】:

      【解决方案3】:

      用单引号包裹你的双引号?

      ...('"+tagName +"',....

      【讨论】:

      • 不,很混乱。我试图用值替换将查询、字段和值声明为字符串。让我们看看带我去哪里。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多