手动向mysql数据库插入数据,hibernate查询出来没有新插入数据,如何解决?(原创)...

通过在action方法中加入事务提交,解决在不重启服务器情况下,使用MySQL界面管理工具插入数据后,页面刷新不显示的问题。实现方法包括配置hibernate关闭二级缓存、在add和findAll方法中调用session的flush、evit和clear方法,以及通过dos界面手动commit插入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库:mysql

取数据:hibernate :

   public List  findAll() {
        Query query = session.createQuery("from user");
        return query.list();
    }

我使用mysql的界面管理工具,向其中插入一条数据,在不重新启动服务器的时候,刷新页面,新插入的数据不显示。

使用hibernate的add方法添加进去的,刷新页面可以显示。

 

 

尝试:

1.将hibernate的配置文件中加入二级缓存关闭的配置

2.在hibernate里的add、findAll的方法里加入session.flush();session.evit(obj);session.clear();(清除一级缓存)

3.使用dos界面,进入mysql,insert 数据,然后commit

 

 

都不管用,必须重新启动tomcat,新数据才出来。

 

 

最后,偶然在iteye上看到个帖子:

解决了我好几天纠结的问题:

在调用findAll方法的action里加入事务提交:
public String init() {

  List users= service.listAllUser(session);
  session.getTransaction().commit();

}

这样,使用mysql管理界面手动插入的数据,刷新页面的时候,就可以显示出来了。

### 如何用编程语言实现向数据库插入数据 以下是使用 Java 编程语言连接 MySQL 数据库并执行插入操作的一个典型代码示例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class DatabaseInsertExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; // 替换为您的数据库URL String user = "root"; // 替换为您自己的用户名 String password = "password"; // 替换为您自己的密码 try (Connection conn = DriverManager.getConnection(url, user, password)) { String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); int rowsAffected = pstmt.executeUpdate(); System.out.println(rowsAffected + " row(s) inserted successfully."); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何通过 JDBC 驱动程序将一条记录插入到名为 `users` 的表中。此过程涉及以下几个关键步骤[^3]: - 建立与目标数据库的连接。 - 准备 SQL 插入语句,通常会使用占位符 (`?`) 来防止 SQL 注入攻击。 - 使用 `PreparedStatement` 设置参数值。 - 执行更操作。 此外,在实际应用开发过程中,可以考虑引入更高级别的框架(如 Hibernate 或 JPA),它们能够简化 ORM 映射以及减少手动编写 SQL 语句的工作量。 对于其他编程语言而言,其基本逻辑也大致相同,只是 API 和具体实现细节有所差异。例如 Python 可以借助 PyMySQL 库完成相似功能[^4]: ```python import pymysql connection = pymysql.connect( host='localhost', user='root', password='password', database='mydatabase' ) try: with connection.cursor() as cursor: sql = "INSERT INTO users (name, email) VALUES (%s, %s)" cursor.execute(sql, ('Jane Smith', 'jane.smith@example.com')) connection.commit() finally: connection.close() print("Data inserted successfully.") ``` 这里需要注意的是不同 RDBMS 对应驱动器名称、加载方式可能不一样;同时为了保障事务一致性建议显式调用 commit 方法提交更改[^5]。 #### 关于异常处理的重要性 无论采用何种技术栈都应该重视错误捕获机制的设计。如果忽略潜在运行期问题,则可能导致资源泄露或者未预期行为发生。因此在上面两个例子当中都包含了基础版的异常捕捉部分以便及时发现并解决问题所在之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值