MySQL 如何在DBCP中使用(useUnicode=yes characterEncoding=UTF-8)
阅读更多:MySQL 教程
简介
在Java中,使用数据库的常见做法就是使用DBCP连接池连接数据库,而在连接MySQL时需要设置编码方式和字符集,否则会出现乱码等问题。本文将介绍如何在DBCP中正确设置MySQL编码方式和字符集。
DBCP配置
DBCP连接池是一个开源的Java数据库连接池,它可以避免频繁地开启、关闭数据库连接,提升程序性能。在使用DBCP连接MySQL数据库时,需要在配置文件中设置编码方式和字符集。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="defaultAutoCommit" value="false"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="100"/>
<property name="maxIdle" value="30"/>
<property name="minIdle" value="5"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="60"/>
<property name="logAbandoned" value="true"/>
<property name="testOnBorrow" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="validationQuery" value="select 1"/>
<property name="timeBetweenEvictionRunsMillis" value="300000"/>
<property name="minEvictableIdleTimeMillis" value="1800000"/>
<property name="numTestsPerEvictionRun" value="10"/>
<property name="validationInterval" value="5000"/>
<property name="poolPreparedStatements" value="true"/>
<property name="maxOpenPreparedStatements" value="100"/>
<property name="connectionInitSqls">
<list>
<value>SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci</value>
<value>SET CHARACTER SET utf8mb4</value>
</list>
</property>
</bean>
从上述配置文件中我们可以看到,需要设置以下两个参数:
- useUnicode=yes
- characterEncoding=UTF-8
其中useUnicode表示使用Unicode编码,characterEncoding表示选择UTF-8字符集。
Java代码中如何使用
获取连接
在Java代码中,我们可以通过获得DBCP的连接对象来进行数据库操作。
Connection conn = null;
try {
// 通过dataSource获取连接
conn = dataSource.getConnection();
// ...
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
执行SQL语句
获得连接之后,我们可以通过执行SQL语句来完成数据库操作。
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 获取PreparedStatement对象
ps = conn.prepareStatement("SELECT COUNT(*) FROM student WHERE name = ?");
// 设置参数
ps.setString(1, "Tom");
// 执行SQL语句
rs = ps.executeQuery();
// 处理结果集
while (rs.next()) {
int count = rs.getInt(1);
// ...
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
总结
通过以上介绍,我们可以看到使用DBCP连接池连接MySQL数据库时需要设置编码方式和字符集,否则将可能会出现乱码等问题。在配置文件中设置useUnicode=yes和characterEncoding=UTF-8来避免这些问题。同时,在Java代码中通过获取连接对象和执行SQL语句来完成数据库操作。
极客教程