2010-11-25 55 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中切換引用,一切工作正常。