更改MySQL数据库版本兼容获取微信nickName有特殊符号和Date字段报Unsupported conversion from LONG to java.sql.Timestamp

本文记录了解决微信小程序中nickName包含特殊字符导致的数据库插入错误的过程。通过更换MySQL版本至8.0.13,成功解决了mybatis循环foreach错误及nickName特殊字符的兼容性问题。

在这里插入图片描述




问题:Unsupported conversion from LONG to java.sql.Timestamp






问题

小程序获取微信nickName有特殊符号会报错





一开始使用mysql6.0.6版本可以获取微信的的nickNam

踩坑方案

因为用了循环修改数据,项目上线后mybatis就会报循环foreach错误,为解决这个问题在数据库的连接字符串加 &allowMultiQueries=true ,然后mybatis好了而获取微信nickName就开始报错从此一发不可收拾。这个问题连续好几天没解决,当时我都能预感到头条新闻会有某某科技公司拿程序员祭BUG~

在这里插入图片描述



最终解决方案

百度各种方法试过了没用,然后我就跟mysql版本杠上了。从6.0.6开始一个一个版本尝试,终于在8.0.13可以解决这个问题了。8.0.21(目前最新版本)最新版本是兼容特殊字符的,但是我现在加的 &allowMultiQueries=true 反而没效果了。所以8.0.13能解决我的这个问题。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>
### Java 中使用 JDBC 进行数据库连接与查询的指南 Java 数据库连接(JDBC)是一种用于执行 SQL 语句的 Java API,它允许 Java 应用程序与各种关系型数据库进行交互。以下是关于如何使用 JDBC 进行数据库连接查询的详细指南。 #### 1. 配置 JDBC 驱动 在开始之前,确保已将相应的 JDBC 驱动添加到项目的类路径中。例如,在连接 Microsoft SQL Server 数据库时,需要下载并导入 `com.microsoft.sqlserver.jdbc.SQLServerDriver`。如果缺少此驱动,可能会遇到 `java.lang.ClassNotFoundException` 异常[^2]。 #### 2. 建立数据库连接 建立数据库连接通常涉及以下几个关键步骤: - **加载驱动程序**:通过 `Class.forName()` 方法加载数据库驱动。 - **获取连接对象**:使用 `DriverManager.getConnection()` 方法来建立连接。 以下是一个示例代码片段,展示如何连接到 MySQL 数据库: ```java import java.sql.Connection; import java.sql.DriverManager; public class DatabaseConnection { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/atguigu"; String username = "root"; String password = "lsl12345"; try { // 加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接 Connection connection = DriverManager.getConnection(url, username, password); System.out.println("数据库连接成功!"); // 关闭连接 connection.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` #### 3. 执行 SQL 查询 一旦建立了数据库连接,就可以创建一个 `Statement` 对象,并使用它来执行 SQL 查询。以下是一个完整的示例,演示如何从数据库中检索数据: ```java import java.sql.*; public class DatabaseQuery { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/atguigu"; String username = "root"; String password = "lsl12345"; try { // 加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接 Connection connection = DriverManager.getConnection(url, username, password); // 创建 Statement 对象 Statement statement = connection.createStatement(); // 执行 SQL 查询 String sql = "SELECT * FROM t_user"; ResultSet resultSet = statement.executeQuery(sql); // 处理结果集 while (resultSet.next()) { int id = resultSet.getInt("id"); String account = resultSet.getString("account"); String pwd = resultSet.getString("password"); String nickname = resultSet.getString("nickname"); System.out.println(id + "--" + account + "--" + pwd + "--" + nickname); } // 关闭资源 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` #### 4. 使用连接池优化性能 为了提高应用程序的性能,可以使用数据库连接池技术。常见的连接池实现包括 Apache DBCP、C3P0 Druid 等。下面是一个使用 Druid 连接池的配置示例: ```properties driverClassName=com.mysql.cj.jdbc.Driver username=root password=123456 url=jdbc:mysql:///java2207?serverTimezone=Asia/Shanghai maxWait=60000 initialSize=100 maxActive=200 minIdle=10 ``` #### 5. 常见问题及注意事项 - **ClassNotFoundException**:确保 JDBC 驱动已正确添加到项目依赖或类路径中[^2]。 - **SQL 注入攻击**:避免直接拼接 SQL 语句,建议使用 `PreparedStatement` 来防止 SQL 注入。 - **资源泄漏**:务必关闭所有打开的数据库资源(如 `ResultSet`, `Statement`, `Connection`),以避免内存泄漏。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值