Java та SQLite [закрито]


333

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

Я виявив бібліотеку обгортки, http://www.ch-werner.de/javasqlite , але чи є інші більш відомі проекти?


10
Мені подобається, що питання із сотнями відгуків та відповідей, що мають сотні оновлень, закривається як "поза темою". Це своєрідно
Ендрю Костер

Відповіді:


196

У вікі перелічено ще кілька обгортків:

  • Обгортка 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 та бібліотека JNI SQLite JNI для Windows (x86) та Linux (i386 / PowerPC).

7
Моє доповнення до цього списку sqlite4java - code.google.com/p/sqlite4java - це обгортка (немає JDBC); попередньо складений для Windows, Mac, Linux. Це простий у використанні, і він застосовує деякі контракти, щоб допомогти розробнику уникнути зловживань SQLite.
sereda

7
sqlite4java виглядає цікаво, але вони також чудово порівняють різні обгортки там: code.google.com/p/sqlite4java/wiki/ComppareToOtherWrappers
Скотт Беннетт-Макліш

1
@kdt Проблема, яку я виявив із драйвером zentus, полягає в тому, що він, здається, не підтримує BLOB взагалі
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC - це роздрібний драйвер zentus і підтримує BLOB (на їхньому сайті є короткий посібник).
johnharris85


247

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

Я кодую в 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();
    }
  }

1
Ось чому я думаю, що Джоел говорив биком (Google tech talk: youtube.com/watch?v=NWHfY_lvKIQ ), кажучи, що дизайн stackoverflow.com є кращим, оскільки всі "старі" публікації зависають в Інтернеті. Це просто переоцінка.
Ніколаос

26
Також зверніть увагу , що проект Crawshaw здається на паузі, але був роздвоєний і оновлюється тут: xerial.org/trac/Xerial/wiki/SQLiteJDBC
Лапо

8
zentus.com здається розбитим, тут знайдено дзеркало; priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
Даніель Магнуссон

3
Спасибі @DanielMagnusson, ти рятувальник життя. Хоча по цій темі, кожен, хто все ще шукає драйвер sqliteJDBC, може перейти на priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/…, оскільки посилання на about.htm на посилання невірне.
javatarz


30

Я розумію, що ви спеціально запитували про SQLite, але, можливо, база даних HSQL буде краще відповідати Java. Він написаний на самій Java, працює в JVM, підтримує таблиці в пам'яті і т.д.


3
Так, HSQL - це дуже хороший вибір, і я досить широко його використовував у кількох клієнтських додатках для хорошого ефекту. Однак у цьому випадку я дійсно хотів використовувати SQLite.
Скотт Беннетт-Макліш

18

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

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

Використовує той самий синтаксис, що і у відповіді Берні, і він набагато швидший і з останньою бібліотекою sqlite.

Чим відрізняється від SQLite JDBC Zentus?

Оригінальний драйвер SQLite JDBC Zentus http://www.zentus.com/sqlitejdbc/ сам по собі є чудовою утилітою для використання баз даних SQLite з мови Java, і наша бібліотека SQLiteJDBC також покладається на її реалізацію. Однак його чиста-версія Java, яка повністю переводить c / c ++ коди SQLite на 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 (University of Tokyo Genome Browser), який є нашою утилітою для створення персоналізованих браузерів геному.

EDIT : Як завжди, коли ви щось оновлюєте, в якомусь незрозумілому місці вашого коду будуть проблеми (трапилося зі мною). Тестовий тест =)


1
sqlite-jdbcПроект є великим, але бути в курсі , що це Apache ліцензовані . Тому ви повинні дати атрибуцію, якщо ви її використовуєте, незалежно від того, чи є ваш код FOSS або власником.
dotancohen

16

Існує новий проект SQLJet, який є чистою реалізацією Java SQLite. Він ще не підтримує всі функції SQLite, але може бути дуже хорошим варіантом для деяких Java-проектів, які працюють із базами даних SQLite.


4
Це виглядає багатообіцяюче, але, здається, він ще не пропонує можливості запиту SQL, як для мене, такий собі вимикач угод.
Скотт Беннетт-Макліш

Досі не підтримує SQL запити, скоріше, API нижчого рівня.
Базель Шишані

Все ще дуже корисно для програм, де вам потрібно генерувати лише файли SQLite, тобто не потрібно SQL для запиту даних.
Алхімік

5

Повідомлення Берні дуже корисне. Не міг проголосувати (не маю достатньої репутації :(). Але це дуже допомогло. Просто повторити!

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

Тут ви можете знайти останню банку SQLite JDBC. Просто додайте банку в ваш класний шлях і все закінчено! :) Ви можете запустити зразок коду Берні, щоб перевірити, чи все добре.

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

Тут ви можете знайти допомогу щодо синтаксису SQL для SQLite. Привіт SQLite :)


3

Під час компіляції та запуску коду слід встановити значення параметрів classpath. Як і в наступному:

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

java -classpath .;sqlitejdbc-v056.jar Text

Зверніть увагу на "." і sparate ";" (win, linux є ":")


3

Код sqlitejdbc можна завантажити за допомогою git з https://github.com/crawshaw/sqlitejdbc .

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

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


2

Приклад коду призводить до витоку пам’яті в Tomcat (після відключення webapp, завантажувач все ще залишається в пам’яті), що призведе до кінця outofmemory. Спосіб її вирішення - використовувати sqlite-jdbc-3.7.8.jar ; це знімок, тому він ще не з'являється для Maven.


0

Друкарська помилка: java -cp .:sqlitejdbc-v056.jar Test

має бути: java -cp .:sqlitejdbc-v056.jar; Test

зауважте крапку з комою після ".jar", сподіваюся, що допоможе людям, може спричинити багато клопоту


Хочете допрацювати? На * nix the; буде відокремлювати Java від команди Test (і тому створить помилку). У Windows: не працюватимуть як сепаратор cp. Так що взагалі .:xxx.jar;немає сенсу. А також вам потрібно вказати назву пакета для класу Test.
eckes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.