Я работаю с базой данных, в которой есть одна таблица с полем, которое написано с помощью символов IPA, например, одно поле: / iː / - / ɪ /
Я делаю подготовленный оператор, и набор результатов пуст и не должен (я проверил запрос), и когда я печатаю подготовленный оператор, возникает проблема с кодировкой символов:
com.mysql.cj.jdbc.ClientPreparedStatement: SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = '/i?/ - /?/'
Значение pair_name должно быть: / iː / - / ɪ /
Код метода для запроса базы данных:
public static ArrayList<Word> returnRandomWordsFromPair(String pair_name) {
ArrayList<Word> pairNameList = new ArrayList<Word>();
// Connection variables
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// Calling the connection
conn = Dataconn.conn();
String sql = "SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = ?";
System.out.println(sql);
try {
pstmt = conn.prepareStatement(sql);
// The next line are the parameters
pstmt.setString(1, pair_name);
System.out.println(pstmt);
rs = pstmt.executeQuery();
while (rs.next()) {
Word word = new Word();
word.setId(rs.getInt("Id"));
word.setSound(rs.getString("sound"));
word.setPair(rs.getString("pair"));
word.setIpa(rs.getString("IPA"));
word.setWrited_word(rs.getString("writed_word"));
word.setPair_name(rs.getString("pair_name"));
pairNameList.add(word);
System.out.println(word);
}
if (rs != null)
System.out.println("result set is null");
try {
rs.close();
} catch (SQLException logIgnore) {
}
if (pstmt != null)
System.out.println("prepared statement is null");
try {
rs.close();
} catch (SQLException logIgnore) {
}
if (conn != null)
System.out.println("connection is null");
try {
rs.close();
} catch (SQLException logIgnore) {
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException logIgnore) {
}
if (pstmt != null)
try {
rs.close();
} catch (SQLException logIgnore) {
}
if (conn != null)
try {
rs.close();
} catch (SQLException logIgnore) {
}
}
Dataconn.closeConn(conn);
return pairNameList;
}
И я вызываю это из этого кода:
public static void main(String[] args) {
ArrayList<Word> wordList = new ArrayList<Word>();
wordList = DatabaseMethods.returnRandomWordsFromPair("/iː/ - /ɪ/");
String name = wordList.getClass().getSimpleName();
System.out.println(name);
System.out.println(wordList);
for (Word smallWord : wordList)
{
System.out.println(smallWord.toString());
}
}
Стандартный выходной результат:
SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = ?
com.mysql.cj.jdbc.ClientPreparedStatement: SELECT Id, sound, pair, IPA, writed_word, pair_name FROM minimal_pair WHERE dismised <> 1 AND pair_name = '/i?/ - /?/'
result set is null
prepared statement is null
connection is null
Connection closed
ArrayList
[]
Я проверил, что в функции строка / iː / - / ɪ / правильно напечатана, но при выполнении подготовленного оператора отображается '/ i? / - /? /'
Кто-нибудь знает, почему это происходит и как я могу это решить?
Заранее большое спасибо!