3つの列(id、name、info_link)を持つデータベースがあります。
IDと名前をデータベースに保存しています。
すべての情報リンクをスクレイプしたテキストファイルがあります。
情報リンクは次の形式です。http://someURL/**Name**.htm
データベースから名前を取得し、リンクのテキストファイルから行を読み取り、link(line)にその薬の名前が含まれているかどうかを確認し、そのリンクをレコードの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 SomethingFieldOnlyのすべての値を更新するためです。