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.