我有一個數據庫,其中我有3列(ID,名稱,信息鏈接)。從數據庫和文本文件使用java內容匹配
我有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值。
現在你正在遍歷整數,但如果有人會改變你的代碼,並得到一個請求參數id,你將有SQL-Injcetion vuln,使用準備好的statemets。請。 – fatfredyy
那麼這段代碼是建立我自己的數據庫,我沒有在任何必須在整個世界中可見的應用程序中使用這段代碼。所以我現在不認爲SQL注入是我需要考慮的。 –
@fatfredyy另外我不認爲更新查詢可以使用PreparedStatement可以嗎? –