java连接sqlite数据库 相对路径怎么写_配置sqlite的相对路径
一般在使用sqlite的时候都是配置url为绝对路径,但是今天在测试代码的时候想到如果将
项目不到tomcat上之后,db文件总不能一直配置成绝对路径,肯定是项目中的某个位置,
因此对jdbc配置文件进行了修改:
jdbc.url=jdbc:sqlite:blog.db
db文件放在WEB-INF/classes下,运行后发现貌似没有问题,然而事实并不是这样QAQ
因为测试中初始化代码会自动根据bean创建表格,我想是不是生成了一个新的db文件呢,
然后我把初始化关掉之后,果然报错了。。。。。。ORZ,然后我在tomcat的bin目录中
找到了崭新的db文件。
百般尝试之后依旧如此,于是去看源码,然后在org.sqlite.core.CoreConnection中发现了这么一段:
private static final String RESOURCE_NAME_PREFIX = ":resource:";
private void open(int openModeFlags, int busyTimeout) throws SQLException {
// check the path to the file exists
if (!":memory:".equals(fileName) && !fileName.startsWith("file:") && !fileName.contains("mode=memory")) {
if (fileName.startsWith(RESOURCE_NAME_PREFIX)) {
String resourceName = fileName.substring(RESOURCE_NAME_PREFIX.length());
// search the class path
ClassLoader contextCL = Thread.currentThread().getContextClassLoader();
URL resourceAddr = contextCL.getResource(resourceName);
if (resourceAddr == null) {
try {
resourceAddr = new URL(resourceName);
}
catch (MalformedURLException e) {
throw new SQLException(String.format("resource %s not found: %s", resourceName, e));
}
}
try {
fileName = extractResource(resourceAddr).getAbsolutePath();
}
catch (IOException e) {
throw new SQLException(String.format("failed to load %s: %s", resourceName, e));
}
}
else {
File file = new File(fileName).getAbsoluteFile();
File parent = file.getParentFile();
if (parent != null && !parent.exists()) {
for (File up = parent; up != null && !up.exists();) {
parent = up;
up = up.getParentFile();
}
throw new SQLException("path to '" + fileName + "': '" + parent + "' does not exist");
}
// check write access if file does not exist
try {
if (!file.exists() && file.createNewFile())
file.delete();
}
catch (Exception e) {
throw new SQLException("opening db: '" + fileName + "': " + e.getMessage());
}
fileName = file.getAbsolutePath();
}
}
// load the native DB
try {
NativeDB.load();
db = new NativeDB();
}
catch (Exception e) {
SQLException err = new SQLException("Error opening connection");
err.initCause(e);
throw err;
}
db.open((SQLiteConnection)this, fileName, openModeFlags);
setBusyTimeout(busyTimeout);
}
这段代码的大概意思就是在非内存模式且url中开头不是以file:开头的情况下,先判断了url是否是以
:resource:开头,如果是,就以类加载路径进行寻找(获取类加载路径的绝对路径后加载数据库文件),
否则就直接以url路径为绝对路径加载数据库文件
于是对jdbc配置文件进行修改:
jdbc.url=jdbc:sqlite::resource:blog.db
搞定!!!
java连接sqlite数据库 相对路径怎么写_配置sqlite的相对路径相关推荐
- java连接access数据库的三种方式以及远程连接
连接access数据库,网上的内容很多,尝试的过程中也会遇到各种问题,没有特别好的介绍,所以自己想总结一下,日后备用. 这里需要提前说明下,win7系统32bit和64bit默认安装的access都是 ...
- 【Java】Java连接Mysql数据库的demo示例
[Java]Java连接Mysql数据库的demo示例 1.安装mysql数据库 2.下载java-mysql-connector.jar包 3.完成java配置 4.写java代码运行测试 1.安装 ...
- java连接Excel数据库读取,写入,操纵Excel表格
java连接Excel数据库读取,写入,操纵Excel表格 (2009-11-15 14:21:03) 转载 标签: java excel 连接 杂谈 分类:技术文档 java连接MicroSoft ...
- Java连接mysql数据库的方式,java连接mysql数据库的方式(4句语句)
1 加载mysql驱动: class.forName("con.mysql.jdbc.Driver").newInstance(); 2 根据数据库路径url,账号,密码进行数据库 ...
- 从零开始的java连接sqlserver数据库教程
通过java连接sqlserver数据库教程 使用的数据库是SQL Server 2008,实现利用java对数据库进行操作. 需要做的准备: SQL Server 2008.JDBC驱动包(sqlj ...
- Java连接Oracle数据库(详细!快速上手)
Java连接Oracle数据库及封装JDBC 如果你点开看到了这篇文章,说明你已经或多或少地通过学校学习亦或是自学了解了 oracle 数据库的基本用法.但是实际在开发程序的时候,我们是不可能手动地去 ...
- Java连接MySQL数据库的超级详细步骤(Windows)
1. 数据准备 1. 下载JDK 下载Java开发工具包JDK,下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads ...
- Java 连接Access数据库
Java 连接Access数据库 maven中央仓库下载UCanAccess驱动包 <!-- https://mvnrepository.com/artifact/net.sf.ucanacce ...
- 简单的Java连接MySQL数据库
简单的Java连接MySQL数据库 最近需要用到Java连接MySQL数据库 Connection conn = null; Statement stmt = null; try {// 连接数据库C ...
最新文章
- win7加入域的脚本
- centos输入正确的账号和密码登陆不进去
- 从ReLU到Sinc,26种神经网络激活函数可视化
- 【数理知识】《矩阵论》方保镕老师-第4章-赋范线性空间与矩阵范数
- python kafka offset自动提交_Spring-Kafka —— 实现批量消费和手动提交offset
- Python自动化运维之常用模块—OS
- 谈MicroMessageTest的开始创建
- elementui el-upload 删除指定文件
- C语言输出规定长度的整数,不够位数前面补零
- (美)梅耶(Myers, G. J.) 等《软件测试的艺术(原书第3版)》书籍(第3版)
- TS流基本知识【HI3798 AVPLAY播放TS流】
- 聚类分析在SPSS上的实现与结果分析——基于SPSS实验报告
- Rufus v3.6 最好用的创建USB启动盘,速度嗖嗖的
- python全栈工程师视频_python全栈工程师视频教程
- keil4找不到c语言头文件路径,keil4中头文件路径设置的方法汇总
- 中南大学计算机软件专业曾进,中南大学_2012年校级优秀毕业生名单
- 解决vscode的报错:Java 11 or more recent is required to run the Java extension
- 【Pigeon源码阅读】服务注册发布流程(四)
- python turtle画有趣的图形_Python turtle库绘制简单图形
- China Mobile announces acquisition of China Railway Communication, unveiling industry reshuffle