जावा और SQLite [बंद]


333

मैं उस नीरसता से आकर्षित हूं जो एक एकल फ़ाइल डेटाबेस प्रदान करता है। जावा के साथ SQLite को जोड़ने और उपयोग करने के लिए ड्राइवर / कनेक्टर लाइब्रेरी क्या है।

मैंने एक रैपर लाइब्रेरी की खोज की है, http://www.ch-werner.de/javasqlite , लेकिन क्या अन्य प्रमुख परियोजनाएं उपलब्ध हैं?


9
मैं प्यार करता हूँ कि सैकड़ों upvotes के साथ एक सवाल है, और जवाब है कि सैकड़ों upvotes है, "ऑफ-टॉपिक" के रूप में बंद है। यह शर्मनाक है, लोल
एंड्रयू कॉस्टर

जवाबों:


196

विकि सूचियों कुछ और रैपर:

  • जावा आवरण (एक SWIG इंटरफ़ेस के आसपास): http://tk-software.home.comcast.net/
  • SQLite के लिए JDBC ड्राइवर का उपयोग करने के लिए एक अच्छा ट्यूटोरियल। (यह कम से कम काम करता है!) http://www.ci.uchicago.edu/wiki/bin/view/VDS/VDSDevelopment/UsingSQLite
  • क्रॉस-प्लेटफॉर्म JDBC ड्राइवर जो विंडोज, लिनक्स, ओएस एक्स पर एम्बेडेड देशी SQLite पुस्तकालयों का उपयोग करता है, और अन्य OSes पर शुद्ध जावा कार्यान्वयन पर वापस आता है: https://github.com/xerial/sqlite-jdbc (पूर्व में डेंटस )
  • एक और जावा - SWIG आवरण। यह केवल Win32 पर काम करता है। http://rodolfo_3.tripod.com/index.html
  • साइक्लाइट-जावा-शेल: नेस्टीवीएम के साथ निर्मित sqlite3 कमांडलाइन शेल का 100% शुद्ध जावा पोर्ट। (यह एक JDBC ड्राइवर नहीं है)।
  • Mysaifu JVM के लिए SQLite JDBC ड्राइवर: Mysaifu JVM के लिए SQLite JDBC ड्राइवर और Windows (x86) और Linux (i386 / PowerPC) के लिए SQLite JNI लाइब्रेरी।

7
इस सूची में मेरा जोड़ sqlite4java - code.google.com/p/sqlite4java है - यह एक आवरण (कोई JDBC) नहीं है; विंडोज, मैक, लिनक्स के लिए precompiled। इसका उपयोग करना सरल है और यह कुछ अनुबंधों को लागू करने में मदद करता है ताकि डेवलपर SQLite के दुरुपयोग से बच सके।
सरेडा

7
sqlite4java दिलचस्प लग रहा है, लेकिन उनके पास कई विभिन्न रैपरों की तुलना भी है: code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers
Scott Bennett-McLeish

1
@ ztus ड्राइवर के साथ मुझे जो समस्या मिली है, वह यह है कि यह BLOB को बिल्कुल भी सपोर्ट नहीं करता है
Martijn

12
@Martijn xerial.org/trac/Xerial/wiki/SQLiteJDBC zentus के ड्राइवर और समर्थन ब्लॉब के एक कांटा है (वहाँ अपनी साइट पर एक छोटी टुट है)।
johnharris85 14


247

SQLite और Java के साथ जानकारी खोजते हुए मुझे आपका प्रश्न मिला । बस मैंने सोचा कि मैं अपना जवाब जोड़ दूं जिसे मैंने अपने ब्लॉग पर भी पोस्ट किया है ।

मैं कुछ समय से जावा में कोडिंग कर रहा हूं। मैंने SQLite के बारे में भी जाना है लेकिन कभी भी इसका उपयोग नहीं किया है ... वैसे मैंने इसका उपयोग अन्य अनुप्रयोगों के माध्यम से किया है, लेकिन कभी भी ऐसे ऐप में नहीं जिसे मैंने कोड किया था। इसलिए मुझे इस सप्ताह एक परियोजना के लिए इसकी आवश्यकता थी और यह इतना सरल उपयोग है!

मुझे SQLite के लिए जावा JDBC ड्राइवर मिला। बस अपने वर्गपथ में 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 तकनीक की बात: youtube.com/watch?v=NWHfY_lvKIQ ) से बात कर रहा था, जब यह कहते हुए कि stackoverflow.com का डिज़ाइन बेहतर है क्योंकि सभी "पुराने" पोस्ट इंटरनेट पर घूम रहे हैं। यह सिर्फ एक पुनर्वसन है।
निकोलास

26
यह भी ध्यान दें कि क्रैशव प्रोजेक्ट हाईटस
lapo

8
zentus.com टूटा हुआ लगता है, यहां पाया गया दर्पण; priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/about.htm
डैनियल

3
धन्यवाद @DanielMagnusson, आप एक जीवन रक्षक हैं। विषय पर रहते हुए, कोई भी अभी भी sqliteJDBC ड्राइवर ढूंढ रहा है, priede.bf.lu.lv/pub/DatuBazes/SQLite/SqliteJDBC/ पर जा सकता है । लिंक के बारे में .htm लिंक गलत है।
javatarz


30

मैं समझता हूं कि आपने विशेष रूप से SQLite के बारे में पूछा था, लेकिन शायद HSQL डेटाबेस जावा के साथ बेहतर फिट होगा। यह जावा में ही लिखा गया है, जेवीएम में चलता है, इन-मेमोरी टेबल आदि का समर्थन करता है और यह सभी विशेषताएं इसे प्रोटोटाइप और यूनिट-परीक्षण के लिए काफी उपयोगी बनाती हैं।


3
हाँ HSQL एक बहुत अच्छा विकल्प है और मैंने इसे अच्छे प्रभाव के लिए कुछ क्लाइंट ऐप्स में बड़े पैमाने पर उपयोग किया है। इस उदाहरण में, मैं वास्तव में SQLite का उपयोग करना चाहता था।
स्कॉट बेनेट-मैक्लेश

18

डेविड क्रॉशव प्रोजेक्ट (sqlitejdbc-v056.jar) तारीख से बाहर लगता है और अंतिम अपडेट जून 20, 2009 था, यहाँ स्रोत

मैं Crawshaw sqlite रैपर के Xerials fork को फिर से देखूंगा । मैंने sqlitejdbc-v056.jar को Xerials sqlite-jdbc-3.7.2.jar फ़ाइल के साथ बिना किसी समस्या के बदल दिया।

बर्नी के उत्तर के समान सिंटैक्स का उपयोग करता है और बहुत तेज है और नवीनतम साइक्लाइट लाइब्रेरी के साथ है।

Zentus की SQLite JDBC से अलग क्या है?

मूल ज़ेंटस का SQLite JDBC ड्राइवर http://www.zentus.com/sqlitejdbc/ स्वयं जावा भाषा से SQLite डेटाबेस का उपयोग करने के लिए एक उत्कृष्ट उपयोगिता है, और हमारी SQLiteJDBC लाइब्रेरी भी इसके कार्यान्वयन पर निर्भर करती है। हालाँकि, इसका शुद्ध-जावा संस्करण, जो पूरी तरह से जावा में SQLite के c / c ++ कोड का अनुवाद करता है, अपने मूल संस्करण की तुलना में काफी धीमा है, जो प्रत्येक OS (जीत, मैक, लिनक्स) के लिए संकलित SQLite बायनेरी का उपयोग करता है।

Sqlite-jdbc के मूल संस्करण का उपयोग करने के लिए, उपयोगकर्ता को कमांड-लाइन तर्कों, जैसे, -Djava.library.path = का उपयोग करके मूल कोड (dll, jnilib, इसलिए फाइलें, जो JNDI C प्रोग्राम हैं) के लिए एक रास्ता तय करना था। (dll, jnilib, आदि के लिए पथ), या -Dorg.sqlite.lib.path, आदि। यह प्रक्रिया त्रुटि-प्रवण थी और हर उपयोगकर्ता को इन चरों को सेट करने के लिए बताने के लिए परेशान था। हमारी SQLiteJDBC लाइब्रेरी पूरी तरह से इन असुविधाओं को दूर करती है।

एक और अंतर यह है कि हम इस SQLiteJDBC को लाइब्र-अप-टू-डेट रखते हुए SQLite इंजन के नवीनतम संस्करण में रख रहे हैं, क्योंकि हम इस लाइब्रेरी के सबसे हॉट उपयोगकर्ताओं में से एक हैं। उदाहरण के लिए, SQLite JDBC UTGB (University of Tokyo Genome Browser) टूलकिट का एक मुख्य घटक है, जो व्यक्तिगत जीनोम ब्राउज़र बनाने के लिए हमारी उपयोगिता है।

संपादित करें : हमेशा की तरह जब आप कुछ अपडेट करते हैं, तो आपके कोड में कुछ अस्पष्ट जगह में समस्याएं होंगी (मेरे साथ हुआ)। परीक्षण परीक्षण परीक्षण =)


1
यह sqlite-jdbcपरियोजना बहुत अच्छी है, लेकिन ध्यान रखें कि यह अपाचे लाइसेंस वाली है । इसलिए यदि आप इसका उपयोग करते हैं, तो आपको अपना कोड FOSS या मालिकाना होना चाहिए।
dotancohen

16

एक नया प्रोजेक्ट SQLJet है जो SQLite का शुद्ध जावा कार्यान्वयन है। यह अभी तक सभी SQLite सुविधाओं का समर्थन नहीं करता है, लेकिन कुछ SQL प्रोजेक्ट्स के लिए बहुत अच्छा विकल्प हो सकता है जो SQLite डेटाबेस के साथ काम करते हैं।


4
यह आशाजनक लग रहा है, लेकिन ऐसा प्रतीत होता है कि यह अभी तक एसक्यूएल क्वेरी क्षमता प्रदान नहीं करता है, मेरे लिए एक तरह का सौदा ब्रेकर है।
स्कॉट बेनेट-मैक्लेश

अभी भी SQL प्रश्नों का समर्थन नहीं करता है, बल्कि, निम्न स्तर का API है।
बेसल शिशानी

अभी भी उन अनुप्रयोगों के लिए बहुत उपयोगी है जहाँ आपको केवल SQLite फ़ाइलें जनरेट करने की आवश्यकता होती है , यानी डेटा को क्वेरी करने के लिए SQL की आवश्यकता नहीं है।
अल्केमिस्ट

5

बर्नी का पद बहुत सहायक है। वोट नहीं दे सके (पर्याप्त प्रतिष्ठा नहीं है :()। लेकिन इसने बहुत मदद की। बस फिर से दोहराने के लिए!

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

यहां आप नवीनतम SQLite JDBC जार पा सकते हैं। बस आप वर्गपथ में जार जोड़ें और आप कर रहे हैं! :) आप सब कुछ ठीक है, तो परीक्षण करने के लिए बर्नी का नमूना कोड चला सकते हैं।

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

यहाँ आप SQLite के लिए SQL सिंटैक्स पर कुछ मदद पा सकते हैं। चीयर्स टू SQLite :)


3

जब आप कोड संकलित करते हैं और चलाते हैं, तो आपको classpath विकल्प मान सेट करना चाहिए। निम्नलिखित की तरह:

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

java -classpath .;sqlitejdbc-v056.jar Text

कृपया "पर ध्यान दें।" और विरल ";" (जीतो, लिनक्स है ":")


3

sqlitejdbc कोड को https://github.com/crawshaw/sqlitejbbc से git का उपयोग करके डाउनलोड किया जा सकता है ।

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

नोट: Makefile को sqlite पुस्तकालयों / डिपो को डाउनलोड करने के लिए कर्ल बाइनरी की आवश्यकता होती है।


2

उदाहरण कोड टॉमकैट में एक मेमोरी लीक की ओर जाता है (वेबप को हटाने के बाद, क्लास लोडर अभी भी मेमोरी में रहता है) जो outofmemoryअंततः कारण होगा । इसे हल करने का तरीका sqlite-jdbc-3.7.8.jar का उपयोग करना है ; यह एक स्नैपशॉट है, इसलिए यह अभी तक मावेन के लिए प्रकट नहीं होता है।


0

टाइपो: java -cp .:sqlitejdbc-v056.jar Test

होना चाहिए: java -cp .:sqlitejdbc-v056.jar; Test

".jar" के बाद अर्धविराम पर ध्यान दें, मुझे आशा है कि लोगों की मदद करता है, बहुत परेशानी पैदा कर सकता है


विस्तृत करने के लिए परवाह? पर * निक्स; टेस्ट कमांड से जावा को अलग कर देगा (और इसलिए त्रुटि पैदा करेगा)। विंडोज पर: अभ्यस्त एक सीपी seperator के रूप में काम करते हैं। तो सभी में .:xxx.jar;इसका कोई मतलब नहीं है। और आपको टेस्ट क्लास के लिए पैकेज का नाम भी बताना होगा।
Eckes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.