我正在尝试使用jsp程序在数据库中插入一些希腊名称。但是,数据库中的结果只是“????”而不是希腊字符。如果我尝试使用phpmyadmin或命令行插入希腊名称,那么没有问题。所以我猜我的jsp代码有些麻烦。这是我的代码的一个简单部分:
试
{
Statement stmt;
ResultSet rs;
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/test?useEncoding=true&characterEncoding=UTF-8&autoReconnect=true";
Connection con =(Connection) DriverManager.getConnection(url,"root", "");
con.setCharacterEncoding("utf-8");
stmt = (Statement) con.createStatement();
stmt.executeQuery("SET NAMES 'UTF8'");
stmt.executeQuery("SET CHARACTER SET 'UTF8'");
String greekname = "κωνσταντίνα";
stmt.executeUpdate("INSERT INTO users(name,age) VALUES ('" + greekname + "','" + "44" +"')");
con.close();
}catch( Exception e ) {System.out.println("Problem during the connection with the database!");}
我希望有人对此有一个好主意!
答案 0 :(得分:0)
但是,数据库中的结果只是“????”而不是希腊字符
当数据库表检索到数据库表已被指示存储字符的字符编码所覆盖的字符时,它将执行该操作。您需要确保按如下方式创建数据库和表:
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE users (...) CHARACTER SET utf8;
与具体问题无关,在每个查询上加载驱动程序是不必要的。在应用程序启动期间只需要一次即可。此外,资源的关闭应该在finally
块中进行,否则在发生异常时可能会导致资源泄漏。最后,在JSP文件中编写原始Java代码也不是最好的做法;)
答案 1 :(得分:0)
第一个答案中的链接为我解决了问题。这是连接字符串 数据库。我只是用
jdbc:mysql://localhost:3306/db_name
但添加其余部分解决了问题。
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
感谢。
专利