2010-11-25 86 views
3

你能提供关于如何在tomcat 6中使用sqlite的步骤吗?我正在使用Xerial sqlite jdbc驱动程序。在我的应用程序中,我有多个sqlite数据库(.db文件),需要根据用户登录的情况连接到不同的sqlite数据库?我可以在哪里放置所有的.db文件 - 在webapp root的目录中,或者在系统上的任何地方,或者在WEB-INF中?如何在Tomcat 6中配置SQLite?

感谢,

回答

5

我们所做的是非常相似的。不幸的是,你不能在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); 
     } 
    } 

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

我使用的是sqlitejdbc-v056.jar

希望这有助于

+0

感谢您的及时回应。如果我不能使用Tomcat提供的连接池,那么多个用户可以连接到同一个.db文件,还是需要实现某种基本连接池,因为多个用户最终可能会同时连接到同一个数据库? – 2010-11-26 05:30:16

+0

如果多个用户连接到同一个db文件,那么连接池是可能的,否则您浪费时间。 – 2010-11-26 08:52:12

6

我只是通过与Tomcat的现在7.一切工作的sqlite3配置去了,所以想我会分享我的设置。
- 下载生活在sqlite-jdbc-3.7.2.jar(或任何最新版本)中的JDBC驱动程序(org.sqlite.JDBC)。 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> 

在这一点上,你要善于去。下面是访问数据库的一些示例代码(我有一个表“管理员”与列“用户名”):

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,如果如果遇到问题,可能会更容易引用公有的org.apache.commons.dbcp.BasicDataSourceFactory附带的dbcp类。我有tomcat.dbcp这个问题没有包含在我的tomcat7安装中,一旦我在context.xml中切换引用,一切工作正常。