我正在开发一个多语言的字典Java Web应用程序。我使用的数据库是SQL Server 2019。这次的操作是当用户通过日语字符搜索日语单词时,从数据库返回该单词(平假名、片假名、日本汉字,如果你熟悉的话)或罗马字母(字母像a,B,c,我们习惯于在英语中)。当我在SQL Server中执行此查询时,它工作得很好:Select j.Word, j.Romaaji, p.PoS, d.[Definition], d.Example from Japanese j join (DefinitionsJP d join PartOfSpeech p on d.PoSID = p.PoSID ) on j.WordID = d.WordID where j.Word = N'ano' or j.Romaaji = 'ano'
结果是:
然而,当我将这个查询应用于Java时,它似乎不起作用(即不向list返回任何内容)
public ArrayList<Word> getWordJP(String searchStr) {
ArrayList<Word> list = new ArrayList<Word>();
try {
String strSelect = "Select j.Word, j.Romaaji, p.PoS, d.[Definition], d.Example from Japanese j \n"
+ "join (DefinitionsJP d join PartOfSpeech p on d.PoSID = p.PoSID ) \n"
+ "on j.WordID = d.WordID where j.Word = N? or j.Romaaji = ?";
stm = cnn.prepareStatement(strSelect);
stm.setString(1, searchStr);
stm.setString(2, searchStr);
rs = stm.executeQuery();
while (rs.next()) {
Word w = new Word();
w.word = rs.getString("Word");
w.romaaji = rs.getString("Romaaji");
w.PartOfSpeech = rs.getString("PoS");
w.Definition = rs.getString("Definition");
w.Example = rs.getString("Example");
list.add(w);
}
} catch (Exception e) {
System.out.println("getWordJP fail:" + e.getMessage());
}
return list;
}
我相信j.Word = N?
是导致我出现问题的部分,因为当我尝试删除它时,查询又正常工作了。至于为什么会有'N',那么,在SQL Server中,当您尝试选择一个Unicode记录时,如日语或汉语字符,您需要在选择字符串前添加一个N,如N'',以便它工作。
1条答案
按热度按时间50few1ms1#
嗯,我终于想明白了。我想删除这篇文章,但其他人可能会陷入同样的问题,所以我决定不这样做。所以这里是你如何做到这一点。
只需从查询中删除“N”,如下所示:
另外,对setString语句进行以下调整:
瞧,应该就是这样了。谢谢你阅读我的问题。