繁体   English   中英

如何将 Unicode select 从 Java 传递到我的数据库

[英]How do I pass the Unicode select from Java to my database

我正在使用多种语言的字典 Java web 应用程序。 我使用的数据库是 SQL Server 2019。这次,操作是当用户通过日文字符(平假名、片假名、汉字,如果您熟悉它们)或罗马字搜索时,从数据库中返回日文单词字母(像我们在英文中习惯使用的字母a、b、c)。 当我在 SQL 服务器中执行此查询时,它工作得很好:

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 时,它似乎不起作用(即不返回任何列表)

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中,当你尝试select一条Unicode记录时,比如日文或普通话字符,你需要在select字符串前加一个N,比如N'あの'这样的顺序让它工作。 任何想法如何解决这个问题?

好吧,我终于想通了。 我想删除这篇文章,但其他人可能会遇到同样的问题,所以我决定不删除。 所以这就是你如何让它工作的。

只需删除“N?” 从这样的查询中:

where j.Word = ?

另外,对您的 setString 语句进行此调整:

stm.setString(1, "N" + searchStr);

瞧,应该就是这样。 感谢您阅读我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM