idea中连接mysql插入成功数据,在navicat中刷新表格没有数据? 您所在的位置:网站首页 druiddatasourcefactory报错 idea中连接mysql插入成功数据,在navicat中刷新表格没有数据?

idea中连接mysql插入成功数据,在navicat中刷新表格没有数据?

2023-06-11 15:51| 来源: 网络整理| 查看: 265

目录

一、出现问题:

二、尝试解决:

三、发现问题:

四、解决方法:

一、出现问题:

        在写一个数据库的大作业时,在idea中连接mysql后,测试insert的dao方法,在控制台没有报错,显示题添加数据成功.但是在navicat中刷新表格却没有数据. (本程序为普通的三层架构,手搓JDBC)

 

二、尝试解决:

        1.修改jdbc.properties配置文件.

        2.修改数据库配置.

        3.检查各处代码.

        于是在掰头了一整晚后,第二天用同学的代码却发现可以正常连接,于是在进行一个一个类代码替换后,相同的jdbc.properties,相同的数据库表……终于发现是util包下的代码问题。

三、发现问题:

        1.由于是直接搬运在学习尚硅谷JavaWeb时写的代码,所以在JdbcUtils类中,采用了Filter处理事务的数据库连接方式,原因是原本用在过滤器上的事务的提交和回滚,在没有使用过滤器时就出现了问题。

        2.

connection.close();//关闭事务的自动提交.

         事务管理中提交事务的"关闭事务的自动提交"这行代码会使得获取的数据库连接不再自动提交事务.

/** * 提交事务,并关闭释放连接. */ public static void commitAndClose() { Connection connection = conns.get(); if (connection != null) { try { connection.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { connection.close();//关闭事务的自动提交. } catch (SQLException e) { throw new RuntimeException(e); } } } conns.remove(); }

        JdbcUtils源代码:

package com.my.util; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; /** * @author sihua * @create 2022-10-30-20:51 */ public class JdbcUtilsFilter { private static DruidDataSource dataSource; private static ThreadLocal conns = new ThreadLocal(); static { try { Properties properties = new Properties(); //读取jdbc.properties属性配置文件. InputStream inputStream = JdbcUtilsFilter.class.getClassLoader(). getResourceAsStream("jdbc.properties"); //从流中加载数据 properties.load(inputStream); //创建数据库连接池. dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); // System.out.println(dataSource.getConnection()); } catch (Exception e) { e.printStackTrace(); } } /** * 获取数据库连接池中的连接. * 如果返回null,说明获取连接失败. */ public static Connection getConnection() { Connection conn = conns.get(); if (conn == null) { try { conn = dataSource.getConnection(); conns.set(conn); conn.setAutoCommit(false); } catch (Exception e) { e.printStackTrace(); } } return conn; } /** * 提交事务,并关闭释放连接. */ public static void commitAndClose() { Connection connection = conns.get(); if (connection != null) { try { connection.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } conns.remove(); } /** * 关闭连接,放回数据库连接池 */ // public static void close(Connection conn) { // if (conn != null) { // try { // conn.close(); // } catch (SQLException e) { // e.printStackTrace(); // } // } // } /** * 回滚事务,并关闭释放连接. */ public static void rollBackAndClose() { Connection connection = conns.get(); if (connection != null) { try { connection.rollback(); } catch (Exception e) { e.printStackTrace(); } finally { try { connection.close(); } catch (SQLException e) { throw new RuntimeException(e); } } } conns.remove(); } } 四、解决方法:

        将过滤器获取连接方法去掉.

package com.my.util; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; public class JdbcUtils { private static DruidDataSource dataSource; static { try { Properties properties = new Properties(); // 读取 jdbc.properties属性配置文件 InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); // 从流中加载数据 properties.load(inputStream); // 创建 数据库连接 池 dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } /** * 获取数据库连接池中的连接 * @return 如果返回null,说明获取连接失败有值就是获取连接成功 */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭连接,放回数据库连接池 * @param conn */ public static void close(Connection conn){ if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } (谨以此篇博客给我长长记性。)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有