2

我正在使用 sqlite 开发一个聊天机器人应用程序,聊天机器人是一个模拟人类与人类聊天的程序!在我的应用程序中,用户输入一些内容作为输入,我将其用作我的 JAVA 和 SQLite 查询中的变量,例如考虑这个表:

id - 用户 - 聊天机器人

1 - 怎么样 - 知道怎么样很重要
2 - 你好吗 - 我很好

我使用此代码从 DB 获得正确答案:(来自此主题:如何使用“LIKE”和“%”检查与 android 中变量的相似性(Java 代码)

cursor = db.rawQuery("SELECT chatbot FROM sentence"+ 
                     " WHERE ? LIKE '%' || " + USER + " || '%'"
                      ,new String[] { newMessage });

此代码在大多数情况下都可以正常工作,但在这种情况下,它不起作用:当用户输入输入时,您如何选择“我很好”,这是正确的,但不幸的是选择“知道如何重要” ,

我使用此代码仅选择具有最大用户列长度的记录:

cursor = db .rawQuery( "SELECT shompet FROM sentence" +
                 "WHERE LENGTH(user) = SELECT MAX(LENGTH(user)) from sentence "
                 + " WHERE ? LIKE '%' || " + USER + " || '%'", new String[] {
                 newMessage });

但是当我在模拟器上运行它时,它关闭并显示这个“应用程序已停止”,我认为它有语法错误,

请帮助我更正此语法或给我另一种处理此问题的方法,等待您的建议!

4

2 回答 2

4

您需要使用这样的内部查询。

SELECT chatbot, user
FROM sentence
WHERE LENGTH(user) = (
  SELECT MAX(LENGTH(user))
  FROM sentence
  WHERE 'not exactly' LIKE '%' || user || '%'
) AND 'not exactly' LIKE '%' || user || '%'

SQL小提琴输出:

+------------+-------------+
|  CHATBOT   |    USER     |
+------------+-------------+
| why not    | not exactly |
+------------+-------------+

所以,你需要创建你的cursoras

cursor = db.rawQuery("SELECT chatbot FROM sentence " + 
                     "WHERE LENGTH(user) = ( " +
                     " SELECT MAX(LENGTH(user)) FROM sentence " +
                     "  WHERE ? LIKE '%' || " + USER + " || '%' " +
                     ") AND ? LIKE '%' || " + USER + " || '%' ",
                     new String[] { newMessage, newMessage });
于 2013-08-24T15:20:52.527 回答
1

如果您的应用程序变得更大,那么简单的 SQL 可能会因为以下原因而感到困惑

  • 缺少用户输入
  • 多场比赛

所以我建议这个

表:索引(id,values-unique)

表:任务(qid,索引)

表:ans(qid,aid,text)

  indices
-------------
id     values
1      how
2      are
3      you



 quest
-------------
qid    ids
1      1,2,3
2      1



ans
-------------
aid qid text
1   1   it is...
2   2   i am...

  1. 输入:用户文本
  2. 分成几部分
  3. 获取索引(索引表中的 id)
  4. 查找任务表
  5. 查找ans表
于 2013-08-24T17:32:48.743 回答