关于JDBC下使用SQLite DB问题总结
因为公司的服务器在Linux下,同时也需要在Windows下运行,所以这方面的工作必须做的仔细。以下几点收获可以给大伙分享,避免因为一些低级错误影响项目开发。
在Windows下SQLite JDBC 路径必须是小写,并且路径中需要添加/
在Linux下SQLite JBDC路径严格区分大小写,并且路径中不需要添加/
所以在使用过程一定要注意:以下几行代码就是判断这个环境的:
public synchronized List getPetternList(String pattern) throws Exception{
log.info("getPetternList DB="+pattern);
String path = MLotteryContext.getInstance().get("pettern.dir");
File pathDir = new File(path);
if(!pathDir.exists())
pathDir.mkdirs();
log.info("pathDir = "+pathDir);
String petternPath = path+"pattern.db";
File newFile = new File(petternPath);
log.info("==========start delete Old Pettern DB==========");
deleteFile(newFile);
log.info("==========End delete Old Pettern DB==========");
log.info("======Start =======Write Pettern DB===============");
//------------------------
// if (!newFile.exists()) {
// newFile.createNewFile();
// }
// log.info("=============setExecutable===============");
// newFile.setExecutable(true);
// log.info("=============setReadable=================");
// newFile.setReadable(true);
// log.info("=============setWritable=================");
// newFile.setWritable(true);
// InputStream inStream = new FileInputStream(pattern);
// FileOutputStream fs = new FileOutputStream(newFile);
// byte[] buffer = new byte[1444];
// int bytesum = 0;
// int byteread = 0;
// while ((byteread = inStream.read(buffer)) != -1) {
// bytesum += byteread;
// log.info("=============bytesum===="+bytesum);
// // System.out.println(bytesum);
// fs.write(buffer, 0, byteread);
// }
// inStream.close();
// log.info("======End =======Write Pettern DB===============");
File oldFile = new File(pattern);
boolean bool = oldFile.renameTo(newFile);
log.info("Current PetternDB:"+newFile.getPath()+" bool = " + bool);
Class.forName("org.sqlite.JDBC");
log.info("DB="+petternPath);
log.info("====Start get Server System Type ==========");
Properties props=System.getProperties(); //获得系统属性集
String osName = props.getProperty("os.name"); //操作系统名称
log.info("Current OS Type :"+osName);
log.info("====End get Server System Type ==========");
osName = osName.toLowerCase();
int index = 0;
index = osName.indexOf("windows");
String JDBC = "jdbc:sqlite:"+petternPath;
if(index > -1){
petternPath = petternPath.toLowerCase();
JDBC="jdbc:sqlite:/"+petternPath;
}
log.info("path = "+petternPath);
log.info("JDBC: "+JDBC);
Connection conn = DriverManager.getConnection(JDBC);
log.info("getPetternList conn="+conn.toString());
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select * from pattern");
List<String> list = null;
if(rs != null){
list = new ArrayList<String>();
}
while (rs.next()) {
String pid = rs.getString("pattern_id");
log.info("pattern_id = "+pid);
list.add(pid);
}
rs.close();
conn.close();
deleteFile(newFile);
return list;
}
只有这样做才能避免老是出现:
java.sql.SQLException: out of memory
at org.sqlite.DB.throwex(DB.java:252)
at org.sqlite.NestedDB.open(NestedDB.java:47)
at org.sqlite.Conn.<init>(Conn.java:36)
at org.sqlite.JDBC.connect(JDBC.java:38)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
这种无厘头的异常!!!!!
分享到:
相关推荐
`sqlite-jdbc-3.7.2.jar`是较旧的一个版本,适用于Windows和Linux操作系统。这个版本可能不包含某些新功能或性能优化,但它的优点在于兼容性广泛,适用于那些需要在旧环境中运行的应用程序。 `sqlite-jdbc-3.8.11.2...
总的来说,sqlite-jdbc-3.32.3.2.jar为信创环境下的Java应用提供了与SQLite数据库交互的能力,解决了在龙芯和MIPS64el架构上的兼容性问题。对于那些需要在这些平台上运行Java应用并利用SQLite存储数据的开发者来说,...
SQLite是一款轻量级的、自包含的、无服务器的、零配置的SQL数据库引擎,适用于多种操作系统,包括Windows、Linux、Mac OS X等。SQLite JDBC驱动使得Java应用程序能够通过标准的JDBC接口与SQLite数据库进行交互,从而...
我们的SQLiteJDBC库不需要配置,因为主要操作系统的本机库,包括Windows,Mac OS X,Linux等,被组装成一个JAR(Java Archive)文件。用法非常简单;下载我们的 sqlite-jdbc 库,然后将该库(JAR 文件)附加到您的类...
SQLite3支持标准的SQL语法,并且具有高度的可移植性,可以在各种操作系统上运行,如Windows、Linux、Mac OS等。 图形界面工具是与SQLite3交互的重要辅助,它允许用户直观地查看、创建和修改数据库内容,而无需编写...
总结来说,sqlite-jdbc-3.31.1.zip是一个适用于Java环境的SQLite JDBC驱动,支持与加密的SQLite数据库交互,兼容Windows、Linux和Mac等多个操作系统。在使用时,需要将驱动加入到项目类路径,通过JDBC API建立连接并...
本教程将详细介绍如何在Linux上连接SQLite和MySQL数据库,以及相关的使用方法。 ### SQLite的使用方法 1. **安装SQLite**:在大多数Linux发行版中,SQLite通常已经预装。如果未安装,可以通过包管理器安装,例如在...
SQLite JDBC驱动程序 SQLite JDBC是一个用于使用Java访问和创建数据库文件的库。 我们SQLiteJDBC库不需要进行配置,因为主要操作系统(包括Windows,Mac OS X,Linux等)的本机库被组装到一个JAR(Java存档)文件中...
5. **安装和配置**:在Linux系统中,为了使用SQLite JDBC驱动,需要将`sqlitejdbc.jar`添加到类路径(classpath)中,而`libsqlitejdbc.so`则需要确保被系统能够找到,可能需要将其拷贝到系统的`/usr/lib`目录下,...
在Java环境中,我们通常使用SQLite JDBC驱动来连接和操作SQLite数据库。 "sqlite-jdbc-3.8.7"是SQLite JDBC驱动的一个特定版本,这个版本已经被验证为可用。SQLite JDBC驱动允许Java应用程序通过JDBC接口与SQLite...
5. **跨平台**:SQLite 能够在多个操作系统上运行,包括 Windows、Linux 和 macOS。 #### SQLite 数据库的组件 SQLite 数据库主要由以下几个组件构成: 1. **SQL 编译器**:负责将 SQL 查询转换为虚拟机指令。 2....
3. **跨平台**:SQLite3可在多种操作系统上运行,包括Windows、Linux、macOS、Android和iOS等,它提供了广泛的API支持,可以用多种编程语言(如C、Python、Java、PHP等)进行交互。 4. **源代码开放**:SQLite3的源...
这个文件包含了操作系统所需的原生代码,确保SQLite-JDBC驱动能在Windows环境下正常工作。 `sqlitejdbc-v037-native.jar`是一个包含本地库的Java Archive (JAR) 文件,它集成了不同平台的本地库。JAR文件中的类加载...
本文将详细介绍 Java 使用 SQLite 数据库生成 DB 文件的实现步骤和相关技术要点。 为什么选择 SQLite SQLite 是一种轻量级的关系数据库管理系统,具有以下优点: * 轻量级: SQLite 库文件小于 500KB,非常适合...
同时,它还有丰富的API和绑定,如Python的sqlite3模块,Java的SQLiteJDBC,JavaScript的sqlite3库等,方便在各种编程环境中使用。 9. 安全性:SQLite3提供加密选项,可以通过第三方扩展库如SQLite Encryption ...
SQLite 支持标准的关系型数据库特性,如 SQL 语言、事务处理等,并且具有高度的可移植性,可以在多种操作系统和硬件平台上运行,包括 Windows、Linux、Mac OS X 以及移动设备如 Android 和 iOS。 2. SQLITE 使用 ...
在桌面系统(如Windows、Linux或macOS)中,你可以直接下载SQLite的动态库或静态库,将其链接到你的项目中。对于编程语言如Python、Java或C#,可以使用对应的SQLite驱动程序库,例如Python的sqlite3模块,Java的...
SQLite是一款轻量级的开源数据库管理系统,它支持多种操作系统,包括Windows、Linux、Android等。在Java和C++中与SQLite交互通常涉及到JNI(Java Native Interface),这是一个Java平台标准,允许Java代码调用本地...