如何在Tomcat 6中配置SQLite?

4
请提供如何在Tomcat 6中使用SQLite的步骤,我正在使用Xerial SQLite JDBC驱动程序。在我的应用程序中,我有多个SQLite数据库(.db文件),根据用户登录情况需要连接到不同的SQLite数据库。我应该把所有的.db文件放在哪里?是放在webapp根目录下还是系统的任何位置或WEB-INF目录中?谢谢!
2个回答

9
我刚刚完成了在Tomcat 7中配置sqlite3的过程。现在一切都正常工作,所以我想分享我的设置。
- 下载JDBC驱动程序(org.sqlite.JDBC),它位于sqlite-jdbc-3.7.2.jar(或最新版本)中。 https://bitbucket.org/xerial/sqlite-jdbc/downloads,然后将其复制到yourTomcat/lib目录下。
- 您可以将sqlite数据库复制到任何您想要的地方。对于我的设置,我在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>

然后将以下内容添加到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>

现在,您应该可以开始了。这是一些访问数据库的示例代码(我有一个名为“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;
}

注意:某些Tomcat发行版本默认不带有tomcat.dbcp,如果遇到问题,可能更容易引用commons中提供的dbcp类(org.apache.commons.dbcp.BasicDataSourceFactory)。我在我的Tomcat7安装中遇到了没有包含tomcat.dbcp的问题,一旦我在context.xml中切换了引用,一切都正常工作了。

仅供参考:在Tomcat 8上 => factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" - cosmincalistru

7
我们所做的与此相似。不幸的是,无法在Tomcat上创建SQLite连接池,因为SQLite为每个用户都有一个数据库文件。
只需将jar文件复制到TOMCAT_HOME/lib文件夹中,但无法通过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);
        }
    }

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

我正在使用 sqlitejdbc-v056.jar

希望这有所帮助。


感谢您的迅速回复。如果我不能使用Tomcat提供的连接池,那么多个用户可以连接到同一个.db文件吗?还是说我需要实现某种基本的连接池,因为多个用户可能会同时连接到同一个数据库? - DG.
如果多个用户将连接到同一个数据库文件,则可以使用连接池,否则,您将浪费时间。 - Buhake Sindi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接