Java и SQLite

Меня привлекает аккуратность, которую обеспечивает одна файловая база данных. Какая библиотека драйверов / соединителей предназначена для подключения и использования SQLite с Java.

Я обнаружил библиотеку обертки, http://www.ch-werner.de/javasqlite/, но есть ли другие более известные проекты, доступные?

10 ответов

Решение

В вики перечислены еще несколько обёрток:

  • Оболочка Java (вокруг интерфейса SWIG): http://tk-software.home.comcast.net/
  • Хороший учебник для использования драйвера JDBC для SQLite. (это работает по крайней мере!) http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite
  • Кроссплатформенный драйвер JDBC, который использует встроенные собственные библиотеки SQLite в Windows, Linux, OS X и использует чистую реализацию Java в других ОС: https://github.com/xerial/sqlite-jdbc (ранее zentus)
  • Еще одна Java - SWIG обертка. Работает только на Win32. http://rodolfo_3.tripod.com/index.html
  • sqlite-java-shell: 100% чистый Java-порт оболочки командной строки sqlite3, созданной с помощью NestedVM. (Это не драйвер JDBC).
  • Драйвер SQLite JDBC для Mysaifu JVM: Драйвер SQLite JDBC для Mysaifu JVM и библиотека SQLite JNI для Windows (x86) и Linux (i386/PowerPC).

Я нашел ваш вопрос при поиске информации с SQLite и Java. Просто подумал, что добавлю свой ответ, который я также разместил в своем блоге.

Я уже давно пишу на Java. Я также знал о SQLite, но никогда не использовал его… Ну, я использовал его через другие приложения, но никогда в приложении, которое я кодировал. Так что я нуждался в этом для проекта на этой неделе, и он настолько прост в использовании!

Я нашел драйвер Java JDBC для SQLite. Просто добавьте JAR-файл в ваш classpath и импортируйте java.sql.*

Его тестовое приложение создаст файл базы данных, отправит несколько команд SQL для создания таблицы, сохранит некоторые данные в таблице, прочитает их и отобразит на консоли. Он создаст файл test.db в корневом каталоге проекта. Вы можете запустить этот пример с java -cp .:sqlitejdbc-v056.jar Test,

package com.rungeek.sqlite;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test {
    public static void main(String[] args) throws Exception {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        Statement stat = conn.createStatement();
        stat.executeUpdate("drop table if exists people;");
        stat.executeUpdate("create table people (name, occupation);");
        PreparedStatement prep = conn.prepareStatement(
            "insert into people values (?, ?);");

        prep.setString(1, "Gandhi");
        prep.setString(2, "politics");
        prep.addBatch();
        prep.setString(1, "Turing");
        prep.setString(2, "computers");
        prep.addBatch();
        prep.setString(1, "Wittgenstein");
        prep.setString(2, "smartypants");
        prep.addBatch();

        conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);

        ResultSet rs = stat.executeQuery("select * from people;");
        while (rs.next()) {
            System.out.println("name = " + rs.getString("name"));
            System.out.println("job = " + rs.getString("occupation"));
        }
        rs.close();
        conn.close();
    }
  }

Я понимаю, что вы спрашивали конкретно о SQLite, но, возможно, база данных HSQL лучше подойдет для Java. Он написан на самой Java, работает в JVM, поддерживает таблицы в памяти и т. Д., И все эти функции делают его вполне пригодным для прототипирования и модульного тестирования.

Проект Дэвида Крошау (sqlitejdbc-v056.jar), кажется, устарел, и последнее обновление было 20 июня 2009, источник здесь

Я бы порекомендовал вилку Xerials из обертки Crawshaw sqlite. Я заменил sqlitejdbc-v056.jar на файл Xerials sqlite-jdbc-3.7.2.jar без каких-либо проблем.

Использует тот же синтаксис, что и в ответе Берни, и намного быстрее и с последней библиотекой sqlite.

Чем отличается Zentus от SQLite JDBC?

Исходный драйвер Zentus для SQLite JDBC http://www.zentus.com/sqlitejdbc/ сам по себе является отличной утилитой для использования баз данных SQLite на языке Java, и наша библиотека SQLiteJDBC также опирается на его реализацию. Однако его версия на чистой Java, которая полностью переводит коды SQLite на C / C++ в Java, значительно медленнее по сравнению с его собственной версией, которая использует двоичные файлы SQLite, скомпилированные для каждой ОС (win, mac, linux).

Чтобы использовать собственную версию sqlite-jdbc, пользователь должен был указать путь к собственным кодам (dll, jnilib, таким образом, файлы, которые являются программами JNDI C) с помощью аргументов командной строки, например, -Djava.library.path=(путь к dll, jnilib и т. д.) или -Dorg.sqlite.lib.path и т. д. Этот процесс был подвержен ошибкам и мешал указывать каждому пользователю устанавливать эти переменные. Наша библиотека SQLiteJDBC полностью устраняет эти неудобства.

Еще одно отличие состоит в том, что мы поддерживаем эту библиотеку SQLiteJDBC самой новой версией движка SQLite, потому что мы являемся одним из самых горячих пользователей этой библиотеки. Например, SQLite JDBC является основным компонентом UTGB (Токийского университета Genome Browser) Toolkit, который является нашей утилитой для создания персонализированных браузеров генома.

РЕДАКТИРОВАТЬ: Как обычно, когда вы обновляете что-то, будут проблемы в каком-то непонятном месте в вашем коде (случилось со мной). Тест Тест Тест =)

Существует новый проект SQLJet, который является чистой реализацией SQLite на Java. Он еще не поддерживает все функции SQLite, но может быть очень хорошим вариантом для некоторых проектов Java, работающих с базами данных SQLite.

Сообщение Берни очень полезно. Не могу проголосовать (не хватает репутации:(). Но это очень помогло. Просто чтобы повторить!

http://www.zentus.com/sqlitejdbc/

Здесь вы можете найти последнюю версию jite для SQLite JDBC. Просто добавьте банку в ваш путь к классу, и все готово!:) Вы можете запустить пример кода Берни, чтобы проверить, все ли в порядке.

http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html http://www.sqlite.org/lang.html

Здесь вы можете найти некоторую помощь по синтаксису SQL для SQLite. Ура к SQLite:)

Код sqlitejdbc можно загрузить с помощью git по https://github.com/crawshaw/sqlitejdbc.

# git clone https://github.com/crawshaw/sqlitejdbc.git sqlitejdbc
...
# cd sqlitejdbc
# make

Примечание: Makefile требует двоичного файла curl для загрузки библиотек sqlite /deps.

Когда вы компилируете и запускаете код, вы должны установить значение параметров classpath. Так же, как следующее:

javac -classpath .;sqlitejdbc-v056.jar Text.java

java -classpath .;sqlitejdbc-v056.jar Text

Пожалуйста, обратите внимание на "." и sparate ";"(победа, linux - ":")

Пример кода приводит к утечке памяти в Tomcat (после удаления веб-приложения загрузчик классов все еще остается в памяти), что приведет к outofmemory в конце концов. Чтобы решить эту проблему, используйте sqlite-jdbc-3.7.8.jar; это снимок, поэтому он еще не появился для maven.

Опечатка: java -cp .:sqlitejdbc-v056.jar Test

должно быть: java -cp .:sqlitejdbc-v056.jar; Test

обратите внимание на точку с запятой после ".jar", я надеюсь, что это помогает людям, может вызвать много хлопот

Другие вопросы по тегам