业务需求,数据搜索查询,本来是直接在服务器远程指令查询,感觉非常方便,奈何一个三炮(SB)提的需求,想要本地便携式查询数据。
当时一万个草泥马从脑顶飞过,明显是闲着蛋疼。。。
“生活就想是被XX,既然无力抵抗,倒不如闭上眼好好享受~”--qq5w
扯淡完毕,切入主题。
查找了很多的嵌入式的数据库,我们的数据源大概是1千万左右的数据,最终选择的是sqlite这款。无论从稳定性,性能,存储大小来说,都满足需求。
一、安装sqlite
首先我们需要sqlite数据库安装文件,具体在官网有下载。
1:sqlite-dll-win32-x86-3140200
http://pan.baidu.com/s/1mh9siE0
2:sqlite-tools-win32-x86-3140200
http://pan.baidu.com/s/1jIHJV8q
3:在C盘创建:C:\sqlite 文件,然后将下载下来的两个文件解压到sqlite文件中(盘符可以随便)
4:配置path环境变量(不多说了,配置java环境应该都会)
5:cd 进入sqlite文件中 然后运行sqlite3.exe (或者直接打开sqlite3.exe)
如图为安装配置正常显示
二、制作嵌入式的.db
我们公司的服务器是sql server 服务器。
这里有款软件叫做sql server to sqlite db converter
直接能将数据库的数据转换为.db文件(sqlite数据库)
下载地址:http://pan.baidu.com/s/1kVpXAz9
三、导入sqlite可视化工具
凡是什么数据库,用可视化工具会方便很多,sqlite也一样。
这里我推荐一款叫做sqlitestudio的软件,很方便
下载地址:http://pan.baidu.com/s/1slB0caD
把我们上步获得的.db文件导入数据库。
查看数据是否有误。
四、java访问嵌入式数据
jar包 下载地址:http://pan.baidu.com/s/1hsfUt1M
首先我们将我们的.db文件考入我们的工程的根目录下,例如temp2.db
代码如下
public class SQLiteTest
{
public static void main(String args[])
{
File directory = new File("temp2.db");
//1
String fileName = directory.getAbsolutePath().toLowerCase().replace("\\", "/");
//2 e:\eclipse-standard-kepler-sr2-win32-x86_64\eclipse\d\workspace\javastaduy\temp2.db
try
{
Class.forName("org.sqlite.JDBC");
//3
Connection conn = DriverManager.getConnection("jdbc:sqlite://"+fileName);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from userName");
while(rs.next())
{
String id = rs.getString("id");
String name = rs.getString("name");
System.out.println("id:"+id+" name:"+name);
}
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
细心的应该能看到我在1的位置做了很繁琐的操作,把 路径中的 \换成了/
以下是楼主个人的观点,要是理解的不正确,需大牛出来指正。
3代码的位置路径应该是jdbc:sqlite:/C:/xxx.db
这个应该是延续了linux系统的文件路径方式。
而我们window系统的路径一般都是C:\的形式。
所以我们把路径格式模板替换。
而且我做了大小写的处理,linux系统是大小写敏感的,楼主也不清楚为什么盘符C 大写的时候总是报错(out of memory 这个异常)
我的.db数据就3条数据,怎么会内存溢出呢?
但是改写成c:/就没问题了,应该是类似linux大小写的问题。