2010-11-25 5 views
3

Pouvez-vous s'il vous plaît fournir les étapes sur la façon d'utiliser sqlite dans tomcat 6? J'utilise le pilote Xerial sqlite jdbc. Dans mon application, j'ai plusieurs bases de données sqlite (fichiers .db) et aurait besoin de se connecter à une base de données sqlite différente en fonction de ce que l'utilisateur se connecte? Où puis-je mettre tous les fichiers .db - avec dans le répertoire racine de la webapp ou n'importe où sur le système ou avec WEB-INF?Comment configurer SQLite dans Tomcat 6?

Merci,

profonde

Répondre

5

Ce que nous avons fait est assez similaire. Malheureusement, vous ne pouvez pas créer un pool de connexion SQLite sur Tomcat car SQLite dispose d'un fichier de base de données pour chaque utilisateur.

Copiez simplement le fichier jar dans le dossier TOMCAT_HOME/lib mais vous ne pouvez pas appeler une connexion via JNDI. Vous devrez faire quelque chose comme ceci:

/** 
    * 
    * @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" et (user = password = null). J'utilise sqlitejdbc-v056.jar.

Hope this helps

+0

Merci pour votre réponse rapide. Si je ne peux pas utiliser le pool de connexion proposé par Tomcat, plusieurs utilisateurs peuvent-ils se connecter au même fichier .db ou dois-je mettre en place une sorte de pool de connexion basique car plusieurs utilisateurs peuvent se connecter simultanément à la même base de données ? –

+0

Si plusieurs utilisateurs se connectent au même fichier db, le regroupement de connexions est possible sinon, vous perdez du temps. –

6

Je suis juste allé à travers la configuration sqlite3 avec Tomcat 7. Tout fonctionne maintenant pensé que je partage ma configuration.
- Téléchargez le pilote JDBC (org.sqlite.JDBC) qui se trouve dans sqlite-jdbc-3.7.2.jar (ou quelle que soit la version la plus récente). https://bitbucket.org/xerial/sqlite-jdbc/downloads
et copiez-le dans votreTomcat/lib
- Vous pouvez copier la base de données SQL sqlite où vous le souhaitez. Pour ma configuration, j'ai créé un répertoire 'dbs' sous mon installation tomcat, et l'ai mis là.

Maintenant, configurez votre application. Si vous n'avez pas de fichier META-INF/context.xml, créez-en un. Ce fichier minimal:

<?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> 

Ensuite, ajoutez ce qui suit 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> 

À ce stade, vous devriez être bon d'aller. Voici quelques exemples de code pour accéder à la base de données (j'ai une table « admin » avec une colonne « nom d'utilisateur »):

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; 
} 

Note: certains distros tomcat ne viennent pas avec tomcat.dbcp par défaut, si vous rencontrez des problèmes, il peut être plus facile de référencer la classe dbcp fournie avec les communs, org.apache.commons.dbcp.BasicDataSourceFactory. J'ai eu ce problème avec tomcat.dbcp pas inclus dans mon installation de tomcat7 et une fois que j'ai changé la référence dans context.xml tout fonctionnait bien.

+0

juste pour info: sur tomcat 8 => factory = "org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" – cosmincalistru