Java 怎么关闭 mybatis的数据库连接?

用JDBC连接SQLite:
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager
.getConnection("jdbc:sqlite:/d:/sqlite.db");
Statement stat = conn.createStatement();
ResultSet r =stat.executeQuery("select * from student");
while(r.next())
{
System.out.println(r.getString("name"));
}
conn.close(); // 结束数据库的连接
FileUtils.forceDelete(new File("D:/sqlite.db"));
连接关闭,文件成功删除掉

用mybatis连接SQlite:
public static void main(String[] args) throws SQLException
{
try
{
SqlSessionFactory factory = connectSQLite();
SqlSession session = factory.openSession();
List<Student> list = session.selectList("SQLiteTest.queryAllStudent");
for (Student student : list)
{
System.out.println(student.getName());
}
session.getConnection().close();
FileUtils.forceDelete(new File("D:/sqlite.db"));
}
catch (IOException e)
{
e.printStackTrace();
}
}

private static SqlSessionFactory connectSQLite() throws IOException
{
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
Properties proper = createSQLiteProperties();
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,proper);
reader.close();
return factory;
}

private static Properties createSQLiteProperties()
{
Properties proper = new Properties();
proper.put("driver", "org.sqlite.JDBC");
proper.put("username", "");
proper.put("password", "");
proper.put("url", "jdbc:sqlite:/D:/sqlite.db");
return proper;
}

java.io.IOException: Unable to delete file: D:\sqlite.db
为什么删不掉?mybatis关数据库连接的时候都需要关什么?

似乎mybatis不用去操心关闭连接,它会自己关闭的,你可以控制连接的最大时间,
/**
* 获取试图连接的最大时间
*
* @see javax.sql.DataSource#getLoginTimeout()
*/
public int getLoginTimeout() throws SQLException {
return getDataSource().getLoginTimeout();
}追问

但是我要删除这个文件,不可能等他失效啊,得手动先给他关了

追答

数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。

追问

意思是我的数据库连接池没关吗?

追答

我们可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化,我项目里的dataSource是这么实现的,参考下好了
/**
* 根据数据源名称获取数据源
*
* @param dataSourceName
* 数据源名称
* @return DataSource 数据源
*/
public DataSource getDataSource(String dataSourceName) {
try {
if (dataSourceName == null || dataSourceName.equals("")) {
return this.dataSource;
}
if (!this.containsBean(dataSourceName)) {
System.out.println("加载数据源:" + dataSourceName);
DynamicLoadBean dynamicLoadBean = (DynamicLoadBean) this.applicationContext
.getBean("DynamicLoadBean");
dynamicLoadBean.loadBean("classpath:"
+ SystemConstants.DATABASE_DIR + dataSourceName
+ ".xml");
}
return (DataSource) this.applicationContext.getBean(dataSourceName);
} catch (NoSuchBeanDefinitionException ex) {
// 抛出数据源没有找到异常
return null;
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-14
mybatis的数据库连接是自动关闭的,不需要手动关闭。追问

那如果有这种删除文件的操作,但是有数据库连接没关掉,我又想删除这个文件,有什么办法?

追答

直接删就是了,没问题的

追问

删不掉java.io.IOException: Unable to delete file: D:\sqlite.db,虚拟机停止就可以,肯定啥东西还在持有这个文件,不知道还需要关啥

追答

这个我也不知道了。

第2个回答  2017-10-11
你是来搞笑的吧=-= 好好学习一下mybatis吧= =
第3个回答  2012-05-14
还真不清楚。。。

Java 怎么关闭 mybatis的数据库连接?
似乎mybatis不用去操心关闭连接,它会自己关闭的,你可以控制连接的最大时间,\/ 获取试图连接的最大时间 see javax.sql.DataSource#getLoginTimeout()\/ public int getLoginTimeout() throws SQLException { return getDataSource().getLoginTimeout();} ...

Java框架Mybatis的功能架构分为哪三层?
1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。3、基础支撑层:负责最基础的...

Mybatis逆向工程利用数据库直接生成java代码
--数据库连接的信息:驱动类、连接地址、用户名、密码--><jdbcConnectiondriverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql:\/\/localhost:3306\/mybatis"userId="root"password="linmeng"><\/jdbcConnection><!--默认false,把JDBCDECIMAL和NUMERIC类型解析为Integer,为true时把JDBCDECIMAL和NUM...

如何理解 MyBatis 中的 mapper.java 和 mapper.xml 关系?
首先,mapper.java 是一个Java接口,内部包含与数据库交互的方法,如findUserById或deleteUser,这些方法与业务逻辑紧密相连。而mapper.xml则是XML文件,负责详细描述如何执行这些接口中的SQL操作,提供了具体的SQL语句。在实际应用中,以用户管理系统为例,当需要根据用户ID查询用户信息时,你会在UserMapper....

MyBatis事务管理机制
MyBatis事务管理分为两大类别:一是基于JDBC的手动事务管理,通过java.sql.Connection进行提交(commit)、回滚(rollback)和关闭(close)操作;二是利用程序容器(如JBOSS或Weblogic)的MANAGED事务管理,MyBatis自身并不直接管理事务,而是由容器负责。在配置阶段,MyBatis XML文件中会定义数据库连接信息,...

使用mybatis与直接用jdbc相比,有哪些优势
代码中最重要的一点,可扩展性,mybatis连接数据库的用户密码等都是写在配置文件中,即使数据库有更改,java代码也不需要重新编译。mybatis的连接池管理,缓存管理等对于数据库的访问优化更好

mybatis与jdbc的关系
举一个简单的例子,假设我们要使用 JDBC 查询一个用户的信息。我们需要编写代码来建立数据库连接、创建 Statement 对象、执行查询并处理结果集。而使用 MyBatis,我们只需要编写一个对应的 SQL 语句,并在映射文件中指定如何将查询结果映射到 Java 对象。MyBatis 会负责执行 SQL 语句并处理结果集,大大...

MyBatis与Hibernate有哪些不同?
MyBatis和Hibernate都是Java持久层框架,但是它们有一些不同之处。以下是一些主要的区别:-MyBatis需要维护SQL和结果映射,而Hibernate的DAO层开发比MyBatis简单。-Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。-Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的...

配置mybatis 的 xml 文件时出现的错误有哪些比较常见?
在MyBatis的XML配置文件中,需要定义数据源和数据库连接信息,以便MyBatis能够连接到数据库。通常情况下,我们会配置连接池来优化数据库连接的性能。 另外,在XML配置文件中,还需要注意以下几点:1. SQL语句中的关键字不要使用大写字母,否则会被认为是Java中的标识符,从而导致解析错误。2. SQL语句中的...

为什么我劝你放弃mybatis
1. **mybatis的本质与需求不符**:作为一个SQL模板引擎,mybatis并没有解决DAO层的核心需求,即高效、灵活地操作数据库。如果实现同样的功能,使用JDBC API或更轻量的框架如nutz更为合适。mybatis生成的代码往往需要额外维护,包括数据库DDL、文档、SQL XML文件、Entity代码、dao(或mapper)接口等,这...

相似回答