如何在Tomcat 6中配置SQLite?

DG.*_*DG. 3 java sqlite tomcat jdbc

你能否提供一下如何在tomcat 6中使用sqlite?我正在使用Xerial sqlite jdbc驱动程序.在我的应用程序中,我有多个sqlite数据库(.db文件),需要连接到不同的sqlite数据库,具体取决于用户登录的内容?我在哪里可以将所有.db文件放在webapp根目录中,或者放在系统上的任何位置,还是放在WEB-INF中?

谢谢,

Mat*_*ttC 8

我刚刚使用Tomcat 7配置sqlite3.现在一切正常,所以我想分享我的设置.
- 下载存在于sqlite-jdbc-3.7.2.jar中的JDBC驱动程序(org.sqlite.JDBC)(或最新版本).https://bitbucket.org/xerial/sqlite-jdbc/downloads
并将其复制到yourTomcat/lib
- 您可以将sqlite db复制到任何您想要的位置.对于我的设置,我在tomcat安装下创建了一个'dbs'目录,并将其放在那里.

现在设置你的应用程序.如果您没有META-INF/context.xml文件,请创建一个.这是一个最小的文件:

<?xml version="1.0" encoding="UTF-8"?>
<Context>  
  <Resource name="jdbc/yourdb" 
            auth="Container" 
            type="javax.sql.DataSource" 
            driverClassName="org.sqlite.JDBC"
            url="jdbc:sqlite:/${catalina.home}/dbs/yourDB.db"
            factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory">
  </Resource>
</Context>
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到WEB-INF/web.xml:

<resource-ref>
    <description>Reviews Database</description>
    <res-ref-name>jdbc/yourdb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

在这一点上,你应该好好去.下面是一些访问数据库的示例代码(我有一个表'admin',列''username'):

public String getName() {
    LOG.info("getting name : " + this.name);
    try {
          Context ctx = new InitialContext();
          DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/yourdb");
          Connection conn = ds.getConnection();
          Statement stat = conn.createStatement();
          ResultSet rs = stat.executeQuery("select username from admin");
          this.name = rs.getString(1);
    } catch (SQLException se) {
          LOG.info(se.toString());
    } catch (NamingException ne) {
          LOG.info(ne.toString());
    }
    return this.name;
}
Run Code Online (Sandbox Code Playgroud)

注意:默认情况下,tomcat的某些发行版没有附带tomcat.dbcp,如果遇到问题,可能更容易引用commons附带的dbcp类,org.apache.commons.dbcp.BasicDataSourceFactory.我有tomcat.dbcp这个问题没有包含在我的tomcat7安装中,一旦我在context.xml中切换了引用,一切正常.


Buh*_*ndi 6

我们做的非常相似.遗憾的是,您无法在Tomcat上创建SQLite连接池,因为SQLite为每个用户都有一个数据库文件.

只需复制文件TOMCAT_HOME/lib夹中的jar文件,但不能通过JNDI调用连接.你必须做这样的事情:

/**
     * 
     * @param driverClassName
     * @param url
     * @param user
     * @param password
     * @throws SQLException 
     * @throws Exception 
     */
    public DefaultJdbcTransaction(String driverClassName, String url, String user, String password) throws SQLException {
        super();
        // TODO Auto-generated constructor stub
        try {
            Class.forName(driverClassName).newInstance();

            if (user == null && password == null) {
                connection = DriverManager.getConnection(url);
            } else {
                connection = DriverManager.getConnection(url, user, password);
            }
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            throw new SQLException(e);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            throw new SQLException(e);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            throw new SQLException(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

Where url="jdbc:sqlite:/path/to/sqlite/file/userId.db",driverClassName="org.sqlite.JDBC"和(user = password = null).

我正在使用sqlitejdbc-v056.jar.

希望这可以帮助