【问题标题】:Using java for searching for data by using part of the row in microsoft access database使用java通过使用microsoft access数据库中的部分行来搜索数据
【发布时间】:2016-01-23 05:05:18
【问题描述】:

我有这张桌子

我正在使用以下代码从我的表中检索数据 返回其库尔德语单词包含的所有英语单词 بةرز

targetText="بةرز";
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English,Kurdish FROM Info " +
"WHERE Kurdish = ? " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) ")) {
   ps.setString(1, targetText);
   ps.setString(2, "^[. ]*" + targetText+ "[ ]*[:،,]+[ .]*$");
   ps.setString(3, "^[. ]*[:،,]+[ ]*" + targetText+ "[. ]*$");
   ps.setString(4, "^[. ]*[:،,]+[ ]*" + targetText+ "[ ]*[:،,]+[  .]*$");
   try (ResultSet rSet = ps.executeQuery()) {
      while (rSet.next()) {
         System.out.println(rSet.getString("English"));
         System.out.println(rSet.getString("Kurdish"));
      }
   }
}

所以它工作正常,它打印出我想要的所有英文单词。
我的问题是,当我得到相应的库尔德语单词时,它不会打印完整的单元格。它只打印 بةرز,

例如前面代码的输出应该是:

aesthete
بةرز ، جوانىثةرست
aether
زوَر ناسك ، بةرز ، ثيروَز ، ئاسمانى
affair
بةرز 

但它会打印出来

aesthete
بةرز 
aether
بةرز 
affair
بةرز 

我该怎么做才能得到我想要的输出?

请注意,我使用UCanAccess 进行数据库连接,

【问题讨论】:

  • 我无法使用 UCanAccess 3.0.2 重新创建您的问题。我将您的示例数据复制并粘贴到 Access 表中,并将您的代码复制并粘贴到 Eclipse 项目中。当我运行它时,唯一匹配的行是“事务”。
  • 你的正则表达式应该做什么? [. ]*[:،,]+[ ]* 对您意味着什么?对我来说,这意味着:،, 字符的序列,可选地前面有空格或句点和/或后面有空格。加上锚^,表示不允许有其他文字,所以肯定不会匹配前2个红圈之前的内容。 --- 另外,由于显示的数据 Affair 以大写字母开头,而您的输出以小写字母开头,因此您 not 正在读取 that 数据。
  • 由于这与正则表达式无关(当然可以改进),我建议您完全删除 where 子句并在没有它的情况下测试查询。然后看看你得到了什么输出。
  • 我还怀疑库尔德语从右到左 (RTL) 的阅读顺序可能与匹配问题有关。 ps.setString(2, "^ز.*"); 匹配“aether”,所以 ^ 锚实际上尊重 RTL 排序,至少对我而言。
  • 您的其他问题与PreparedStatementStatement 无关,您只是使用了UCanAccess 无法理解的SQL 语法。

标签: java regex prepared-statement ucanaccess


【解决方案1】:

所有的坦克,我已经解决了它只是在 regx 中进行了一些更改

targetText="بةرز";
try (PreparedStatement ps = conn.prepareStatement(
   "SELECT English,Kurdish FROM Info " +
   "WHERE Kurdish = ? " +
   "OR REGEXP_MATCHES(Kurdish, ?) " +
   "OR REGEXP_MATCHES(Kurdish, ?) " +
   "OR REGEXP_MATCHES(Kurdish, ?) ")) {
   ps.setString(1, targetText);
   ps.setString(2, "^" + targetText+ "[ ]*(،)[.]*");
   ps.setString(3, "[.]*(،)[ ]*" + targetText+ "$");
   ps.setString(4, "[.]*(،)[ ]*" + targetText+ "[ ]*(،)[.]*");
   try (ResultSet rSet = ps.executeQuery()) {
      while (rSet.next()) {
         System.out.println(rSet.getString("English"));
         System.out.println(rSet.getString("Kurdish"));
      }
   }
}

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2021-01-03
    • 2012-07-15
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2022-11-24
    相关资源
    最近更新 更多