使用java从数据库和文本文件匹配内容

时间:2012-12-08 08:34:20

标签: java sql jdbc text-files

我有一个数据库,其中我有3列(id,name,info_link)。

我在数据库中存储了 id 名称

我有一个文本文件,其中我已经删除了所有信息链接。

信息链接采用以下形式:http://someURL/**Name**.htm

现在我要做的是从数据库中取一个名字,从链接的文本文件中读取一行,查找链接(行)是否包含该药物名称,将该链接放在记录的info_link列中。

这就是我的代码

BufferedReader reader = new BufferedReader(new FileReader("./Links.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("./AddedLinks.txt"));
int id = 1;
//Creates a connection to the Database
connection = DriverManager.getConnection(DB_URL,DB_USER,DB_PASS);

statement = connection.createStatement();
for(id=1;id<=1153;)
{   
   query = statement.executeQuery("SELECT name FROM drug_list WHERE id = '"+id+"';");
   query.next();
   String name = query.getString(1);
   String words[] = name.split(" ");
   String Myvalue = reader.readLine();
   boolean Found = false;
   while(!Found)
      if(Myvalue.toLowerCase().contains(words[0].toLowerCase()))
      {
         Boolean f = false;
         System.out.println("Found"+name);
         update = connection.prepareStatement("UPDATE drug_list SET info_link = ? WHERE id = ?;");
         update.setString(1, Myvalue);
         update.setInt(2, id);
         f = update.execute();
         if(!f)
         {
            System.out.println("QSE");
            id++;
            writer.write(Myvalue);
            Found = true;
         }

      }
      else
      {
         System.out.println("Could Not Find"+name+"\n");
         id++;
         Found = false;
      }
}

我能够匹配单字上必须处理的容器链接。但问题是

我有一个像

这样的药物名称
  • 沙丁胺醇(沙丁胺醇)
  • 多佐胺/噻吗洛尔

等。

和他们的对应链接如:

 - http://Somelink/**albuterol_salbutamol**.htm
 - http://Somelink/**dorzolamide_timolol**.htm

此外,数据库中有一些名称在文本文件中没有相应的链接,我也想跳过这些。我的数据库总共有1153个值。

我也有一些药物名称,如

  • 钙的东西
  • 钙的东西
  • 钙不是什么

所以这会产生一个问题,如果我只匹配我分手的单词[0]。因为它将更新Calcium Something Field Only的所有值。

2 个答案:

答案 0 :(得分:1)

您使用正则表达式来分割单词。像

这样的东西
String words[] = a.split("[/()]");

并迭代并检查所有单词而不是一个单词。

答案 1 :(得分:0)

好的,这就是我要做的事情:迭代你的名字并使用split()和空格作为分隔符来获取数组中的每个单词。然后,对于每个链接,从最后一个破折号获取子字符串,直到“.htm”(当然,这取决于您的链接的设置方式。您也可以跳过此步骤)。然后,在该字符串上,检查名称数组中的每个项目是否包含在链接中。为每个匹配计算一个整数值,并将其与链接一起保存,例如在一个数组,HashMap等中(或者只保留一个变量中匹配最多的链接,如果找到一个匹配较高的链接,你可以更新)。最后,获取最匹配的链接。

目前,如果我看到了这一点,你已经分裂,但你只使用该数组的第一个值。

当然,这不是故障安全的,但它是我能想到的最好的。如果你想排除任何错误,你必须手动检查结果。