第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 使用PreparedStatement操作mysql数据库出现中文乱码问题

使用PreparedStatement操作mysql数据库出现中文乱码问题

时间:2023-02-19 20:51:34

相关推荐

使用PreparedStatement操作mysql数据库出现中文乱码问题

背景:

在使用PreparedStatement执行setString(4, "我是中文");后,通过debug发现中文变成了???;这个肯定是编码问题,然后通过字符串和字节码进行编码转换也没能够解决这个问题;最后在网上搜到一篇文章提到,在连接mysql数据的时候需要制定编码:?characterEncoding=utf8

解决:

代码中连接数据库的时候需要制定编码:

public String getMysqlUrl() {return "jdbc:mysql://" + ip + ":" + port + "/" + sid+"?characterEncoding=utf8";}

下面是整个测试代码:

package com.scu.tgm.test;import java.io.UnsupportedEncodingException;import java.sql.*;import java.util.*;public class TestMysql {private static final String ORACLE = "oracle";private static final String SQL_SERVER = "mssql";private static final String SYBASE = "sybase";private static final String MYSQL = "mysql";private static final String MYSQL_DRIVER_CLASS = "com.mysql.jdbc.Driver";private static final String ORACLE_DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";private static final String SQLSERVER_DRIVER_CLASS = "net.sourceforge.jtds.jdbc.Driver";private static final String SYBASE_DRIVER_CLASS = "com.sybase.jdbc3.jdbc.SybDriver";private String type="mysql"; private String ip ="localhost";private String port="3306";private String user="root";private String sid="tgmtest"; private String password ="root";private Connection connection;public static void main(String[] str) throws UnsupportedEncodingException{TestMysql testMysql=new TestMysql();String sql="Insert into sms_outbox (sismsid, extcode, destaddr, messagecontent,reqdeliveryreport,msgfmt,sendmethod,requesttime,applicationid) VALUES(?,?,?,?,?,?,?,?,?)";testMysql.createConnect();try {testMysql.executeInsert(sql,"123;44","八嘎雅路");} catch (SQLException e) {e.printStackTrace();}System.out.println();}/*** Insert into t_user* (sismsid, extcode, destaddr, messagecontent,reqdeliveryreport,msgfmt,sendmethod,requesttime,applicationid)* VALUES(?,?,?,?,?,?,?,?,?)* @param sql* @return* @throws SQLException* @throws UnsupportedEncodingException */public void executeInsert(String sql,String phNumbers,String messagecontent) throws SQLException, UnsupportedEncodingException {PreparedStatement ps = connection.prepareStatement(sql);ps.setString(1, UUID.randomUUID().toString());ps.setString(2, "");ps.setString(3, phNumbers);ps.setString(4, messagecontent);ps.setByte(5, (byte) 1);ps.setByte(6, (byte) 15);ps.setByte(7,(byte) 0);ps.setTimestamp(8, new Timestamp((new java.util.Date()).getTime()));ps.setString(9, "dxcs");ps.executeUpdate();}public void createConnect() {if (ORACLE.equalsIgnoreCase(type)) {String fornameCalss = ORACLE_DRIVER_CLASS;String url = getOracleUrl();connection= createConnection(fornameCalss, url,user,password);} else if (SQL_SERVER.equalsIgnoreCase(type)) {String fornameCalss = SQLSERVER_DRIVER_CLASS;String url = getSqlserverUrl();connection= createConnection(fornameCalss, url,user,password);} else if (SYBASE.equalsIgnoreCase(type)) {String fornameCalss = SYBASE_DRIVER_CLASS;String url = getSybaseUrl();connection= createConnection(fornameCalss, url,user,password);} else if (MYSQL.equalsIgnoreCase(type)) {String fornameCalss = MYSQL_DRIVER_CLASS;String url = getMysqlUrl();connection= createConnection(fornameCalss, url,user,password);}else {}}private Connection createConnection(String fornameCalss, String url,String user, String password) {Connection connection = null;try {Class.forName(fornameCalss);connection = DriverManager.getConnection(url, user,password);} catch (Exception e) {System.out.println(e.getMessage());}return connection;}public String getSybaseUrl() {return "jdbc:sybase:Tds:" + ip + ":" + port + "/" + sid;}public String getSqlserverUrl() {return "jdbc:jtds:sqlserver://" + ip + ":" + port + "/" + sid;}public String getOracleUrl() {return "jdbc:oracle:thin:@" + ip + ":" + port + ":" + sid;}public String getMysqlUrl() {return "jdbc:mysql://" + ip + ":" + port + "/" + sid+"?characterEncoding=utf8";}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。