Как настроить SQLite в Tomcat 6? - PullRequest
       36

Как настроить SQLite в Tomcat 6?

3 голосов
/ 25 ноября 2010

Подскажите, пожалуйста, как использовать sqlite в Tomcat 6?Я использую драйвер Xerial sqlite jdbc.В моем приложении у меня есть несколько баз данных sqlite (файлы .db), и мне нужно будет подключиться к другой базе данных sqlite в зависимости от того, какой пользователь входит в систему?Куда я могу поместить все файлы .db - в корневом каталоге веб-приложения или в любом месте системы или в WEB-INF?

Спасибо,

Глубоко

Ответы [ 2 ]

8 голосов
/ 07 ноября 2012

Я только что прошел настройку sqlite3 с Tomcat 7. Теперь все работает, так что я решил поделиться своими настройками.
- Загрузите драйвер JDBC (org.sqlite.JDBC), который находится в sqlite-jdbc-3.7.2.jar (или любой другой последней версии).https://bitbucket.org/xerial/sqlite-jdbc/downloads
и скопируйте его в ваш Tomcat / lib- Вы можете скопировать базу данных sqlite куда угодно.Для моей установки я создал каталог 'dbs' под моей установкой tomcat и поместил его туда.

Теперь настройте свое приложение.Если у вас нет файла 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, если вы столкнетесь с проблемами, может быть проще сослаться на класс dbcp, который поставляется с общими, org.apache.commons.dbcp.BasicDataSourceFactory.У меня была эта проблема с tomcat.dbcp, не включенным в мою установку tomcat7, и как только я переключил ссылку в context.xml, все работало нормально.

6 голосов
/ 25 ноября 2010

То, что мы сделали, очень похоже.К сожалению, вы не можете создать пул соединений SQLite на Tomcat, поскольку 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.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...