zoukankan      html  css  js  c++  java
  • mips平台使用jdbc操作sqlite的最终解决方案

    1、概述:

    本项目需要在多平台上(mips必须支持)操作嵌入式数据库sqlite,而最新的sqlite-jdbc-3.15.1.jar的本地驱动只含有少量的平台,于是解决支持mips平台实在必行。方法有多,具体如下。

    1.1 SQLite三种JDBC驱动的区别

    摘自http://blog.sina.com.cn/s/blog_654337ca01016x4n.html

    在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的。

     
    SQLite Wrapper by Christian
    这个驱动其实是在本地C/C++的SQLite上用JDBC实现进行了包装。大小100+K。
    优点:体积小;速度快
    缺点:依赖本地SQLite驱动,每个平台需要分别编译
    具体用法,详见http://www.doc88.com/p-1337567572201.html(标题为[精品]JAVA在SQLite嵌入式数据库中的应用)
     
    SQLite Zentus Driver
    这个驱动是SQLite数据库的纯Java实现,仅需要这个驱动就可以操作SQLite数据库文件。大小2.6M。
    优点:无其他依赖
    缺点:速度稍慢(纯Java实现),没有找到驱动下载地址
     
    SQLite Xerial Driver
    这个驱动扩展了Zentus版本,并且在jar中加入了Windows、Linux、Mac OS X三种本地SQLite驱动库,使四种驱动并存于jar包中。其目的在于在不同的操作系统中自动使用不同的本地驱动(在这三种以外的系统中则使用纯Java实现的驱动),既保证无其他依赖,又保证速度最快。但是因为包含这么多版本的驱动,所以就比较大,大小有3M。
    优点:速度快;无其他依赖
    缺点:体积大
     
    最后忽然发现,Zentus驱动从2009年6月就没有再更新了(最新版本基于SQLite3.6.14.2),Xerial驱动从2010年8月就没有再更新……SQLite Wrapper貌似一直在更新,目前最新的版本是2012年2月的。

    1.2 SQLite Xerial Driver 驱动

    • 方法1:mips上也使用本地库,下载源代码编译即可。不过编译很费劲,对于不可以联网的单位工作机,根本行不通

    源代码下载地址

    • 方法2:使用jdbc的jdbc-odbc桥方式。

    第一步:加载驱动(作用是把需要的驱动程序加入内存)

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

    第二步:得到连接(指定连接到哪个数据源),如果配置数据源时选择的是Windows NT验证方式,则不需写出用户名和密码

    Connection ct=DriverManager.getConnection("jdbc:odbc:simpledb")如果有用户名和密码,则在数据源之后写出。

    jdk从1.8开始,删除了jdbc-odbc桥,所以odbc的驱动是用不了的,建议重新安装jdk1.7或者更低的版本。此方案行得通,不过强烈要求jdk版本低于1.7或者更低版本,不利于jdk的升级。

    摘自http://blog.csdn.net/u011502222/article/details/44234103  (文章标题为java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver解决方法! )

    JDK7  和  JDK8  貌似都不支持  JDBC-ODBC  桥连,所以最好下个版本  6

    摘自 http://wenku.baidu.com/link?url=Tz8acJQlGCGQgejp7D4DJ0o_54AcohTmGm2c47Cy7X3y1nrLwyIap4pIuHnaVB_01WlFlTQ12NoHKidcwmNLYvKasEEhgqgI-WjVOg1C0xK (文章标题为JDBC-ODBC桥连access教程)

    • 方法3 使用纯java的SQLite(Applies to versions before 3.7.15)不包含3.7.15

    sqlite-jdbc-3.7.2.jar的下载地址

    http://www.java2s.com/Code/Jar/s/Downloadsqlitejdbc372jar.htm本项目的sqlite-jdbc-3.7.2.jar是从此链接下载的,因为下边的链接资源不畅通

    https://bitbucket.org/xerial/sqlite-jdbc/downloads?tab=tags

    2、sqlite-jdbc-3.15.1.jar   Supported Operating Systems

    摘自https://bitbucket.org/xerial/sqlite-jdbc

    Since sqlite-jdbc-3.6.19, the natively compiled SQLite engines will be used for the following operating systems:

    • Windows XP, Vista (Windows, x86 architecture, x86_64)
    • Mac OS X 10.4 (Tiger), 10.5(Leopard), 10.6 SnowLeopard (for i386, x86_64, Intel CPU machines)
    • Linux i386 (Intel), amd64 (64-bit X86 Intel processor)

    In the other OSs not listed above, the pure-java SQLite is used. (Applies to versions before 3.7.15)

    If you want to use the native library for your OS, [build the source from scratch.编译很麻烦,且跨平台性不好,到另一平台需要继续重新编译

    3、JDBC 连接 使用sqlite-jdbc-3.7.2.jar操作数据库报错:java.sql.SQLException: out of memory,解决方案参考接下来的详细描述。

    java sqlite out of memory异常

    摘自http://www.cnblogs.com/cnryb/archive/2012/06/13/2548445.html

    今天用sqlite写点东西eclips给我了这个东西

    out of memory

    image

    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(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at com.loveoop.sqlite.Test.main(Test.java:19)

     

    原因:目录结构中存在中文,

    解决方案:把中文修改为英文~~~~。

    Good luck!!

  • 相关阅读:
    启动docker 服务时 虚拟机端口转发 外部无法访问
    ADC滤波处理的十种方法
    ubuntu卸载软件
    Cannot fetch index base URL http://pypi.python.org/simple/
    pip命令详解
    QT入门
    tensorflow学习-第一章
    opencv学习-第一章
    二叉树详解
    C/C++内存地址划分
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/6183849.html
Copyright © 2011-2022 走看看