Java и SQLite

293

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

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

Теги:

10 ответов

179
Лучший ответ

wiki перечисляет еще несколько оберток:

  • 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.comhttps://stackoverflow.com/index.html
  • sqlite-java-shell: 100% чистый Java-порт оболочки командной строки sqlite3, созданной с помощью NestedVM. (Это не драйвер JDBC).
  • Драйвер SQLite JDBC для JVM Mysaifu: SQLite JDBC-драйвер для JVM Mysaifu и SQLite JNI-библиотека для Windows (x86) и Linux (i386/PowerPC).
  • 6
    Мое дополнение к этому списку - sqlite4java - code.google.com/p/sqlite4java - это оболочка (без JDBC); предварительно скомпилирован для Windows, Mac, Linux. Он прост в использовании и обеспечивает соблюдение некоторых контрактов, чтобы помочь разработчику избежать неправильного использования SQLite.
  • 6
    sqlite4java выглядит интересно, но у них также есть отличное сравнение различных оболочек: code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
Показать ещё 7 комментариев
245

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

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

Я нашел Java JDBC-драйвер для SQLite. Просто добавьте JAR файл в свой путь к классам и импортируйте 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();
    }
  }
  • 9
    Я постоянно удивляюсь тому, как старые посты могут быть невероятно полезными - как этот. +1
  • 1
    Вот почему я думаю, что Джоэл говорил бычьи слова (техническая беседа Google: youtube.com/watch?v=NWHfY_lvKIQ ), когда говорил, что дизайн stackoverflow.com лучше из-за того, что все «старые» посты болтаются в интернете. Это просто перефразировка.
Показать ещё 5 комментариев
27

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

  • 2
    Да, HSQL - очень хороший выбор, и я довольно широко использовал его в паре клиентских приложений для хорошего эффекта. Однако в этом случае я действительно хотел использовать SQLite.
15

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

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

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

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

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

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

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

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

  • 1
    Проект sqlite-jdbc великолепен, но имейте в виду, что он лицензирован Apache . Поэтому вы должны дать атрибуцию, если вы используете ее, будь то код FOSS или проприетарный.
15

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

  • 3
    Это выглядит многообещающе, но похоже, что пока не предлагает возможности SQL-запросов, что-то вроде прерывателя сделки для меня.
  • 0
    Все еще не поддерживает запросы SQL, скорее, API более низкого уровня.
4

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

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

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

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

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

  • 0
    Имейте в виду, нет поддержки BLOB!
2

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

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

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

2

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

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

java -classpath .;sqlitejdbc-v056.jar Text

Обратите внимание на "." и "sparate"; "(win, linux есть": ")

1

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

0

Typo: java -cp .:sqlitejdbc-v056.jar Test

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

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

  • 0
    Хотите разработать? На * nix the; отделит Java от команды Test (и, следовательно, создаст ошибку). В Windows: не будет работать как разделитель cp. Так что в целом .:xxx.jar; не имеет смысла. И вам также нужно указать имя пакета для класса Test.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню