MS SQL Server + JDBC + Русский язый
При выполнении запроса вместо русских символов появляются знаки вопроса.
Был написан тестовый код, для проверки методов работы с БД, но при попытке прочитать или записать в БД русские символы, появляются вопросительные знаки.
Пробовал добавлять в url useUnicode=true&characterEncoding=Cp1251 эффекта никакого.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String login = request.getParameter("login");
String password = request.getParameter("password");
OpTradingAgents opTradingAgents = new OpTradingAgents();
ArrayList<TradingAgents> tradingAgent = opTradingAgents.getByLogin(login);
PrintWriter pw = response.getWriter();
response.setContentType("text/html");
try {
if (tradingAgent.size() > 0) {
if (tradingAgent.get(0).getPassword().equals(password)) {
System.out.println(tradingAgent.get(0).getPassword());
pw.write("<h2>Login successful</h2>");
System.out.println(tradingAgent.get(0).getName());
} else {
System.out.println("wrong pass");
pw.write("<h2>Wrong login or password</h2>");
}
} else {
System.out.println("no user found");
pw.write("<h2>Wrong login or password</h2>");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pw.close();
}
}
public class OpTradingAgents {
FileInputStream fis;
Properties properties = new Properties();
private String dbLogin;
private String dbPassword;
private String url;
public OpTradingAgents() throws IOException {
try {
fis = new FileInputStream("G:\\Универ\\Диплом\\Program\\diplom\\src\\main\\resources\\config.properties");
properties.load(fis);
String dbType = properties.getProperty("dbType");
String dbIp = properties.getProperty("dbIp");
String dbPort = properties.getProperty("dbPort");
String dbName = properties.getProperty("dbName");
dbLogin = properties.getProperty("dbLogin");
dbPassword = properties.getProperty("dbPassword");
url = "jdbc:" + dbType + "://" + dbIp + ":" + dbPort + ";database=" + dbName +";useUnicode=true&characterEncoding=Cp1251";
} catch (Exception e) {
e.printStackTrace();
} finally {
fis.close();
}
}
public ArrayList<TradingAgents> getByLogin(String impLogin) {
ArrayList<TradingAgents> tradingAgents = new ArrayList<>();
String query = "SELECT * FROM TradingAgents WHERE login=?";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
try (Connection con = DriverManager.getConnection(url, dbLogin, dbPassword)) {
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, impLogin);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
int workerCode = rs.getInt(1);
String pasportId = rs.getString(2);
String name = rs.getString(3);
String surname = rs.getString(4);
String patronymic = rs.getString(5);
String login = rs.getString(6);
String password = rs.getString(7);
String phoneNumber = rs.getString(8);
String eMail = rs.getString(9);
TradingAgents tradingAgent = new TradingAgents(workerCode, pasportId, name, surname, patronymic, login, password, phoneNumber, eMail);
tradingAgents.add(tradingAgent);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
return tradingAgents;
}
}