2008-09-03 5 views
310

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

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

उत्तर

188

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

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

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

+6

sqlite4java दिलचस्प लग रहा है, लेकिन उनके पास विभिन्न रैपरों की एक बड़ी तुलना भी है: http://code.google.com/p/sqlite4java/wiki/ComparisonToOtherWrappers –

+1

@kdt ज़ेंटस ड्राइवर के साथ मिली समस्या यह है कि यह बीएलओबी के सभी – Martijn

236

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

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

मैं SQLite के लिए एक जावा JDBC ड्राइवर पाया। बस अपने क्लासपाथ में JAR file जोड़ें और 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(); 
    } 
    } 
+8

मैं लगातार आश्चर्यचकित हूं कि पुरानी पोस्ट कितनी उपयोगी हो सकती है - इस तरह की। +1 –

+1

यही कारण है कि मुझे लगता है कि जोएल बैल से बात कर रहा था (Google टेक टॉक: http: //www.youtube.com/watch? v = NWHfY_lvKIQ) यह कहकर कि stackoverflow.com का डिज़ाइन इंटरनेट पर चारों ओर लटकने वाली सभी "पुरानी" पोस्टों के कारण बेहतर है। यह सिर्फ एक रिहाश है। – Nikolaos

+26

यह भी ध्यान दें कि क्रॉशॉ प्रोजेक्ट अंतराल पर प्रतीत होता है, लेकिन फोर्क किया गया था और अपडेट किया गया था यहां: http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC – lapo

28

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

+1

हां एचएसक्यूएल एक बहुत अच्छी पसंद है और मैंने इसे अच्छे प्रभाव के लिए कुछ क्लाइंट ऐप्स में काफी व्यापक रूप से उपयोग किया है। हालांकि इस उदाहरण में, मैं वास्तव में SQLite का उपयोग करना चाहता था। –

15

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

+3

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

+0

फिर भी निम्न स्तर एपीआई, एसक्यूएल प्रश्नों का समर्थन नहीं करता है। –

4

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

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

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

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

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

+0

आपको याद है, कोई ब्लॉब समर्थन नहीं! – Martijn

1

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

0

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

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

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

+0

विस्तृत करने के लिए देखभाल? * निक्स पर; जावा कमांड टेस्ट कमांड से अलग करेगा (और इसलिए एक त्रुटि बनाएँ)। विंडोज़ पर: एक सीपी सेपरेटर के रूप में काम नहीं करेगा। तो सब कुछ '।: Xxx.jar;' समझ में नहीं आता है। और आपको टेस्ट क्लास के लिए पैकेज नाम निर्दिष्ट करने की भी आवश्यकता है। – eckes

2

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

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

java -classpath .;sqlitejdbc-v056.jar Text 

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

15

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

मैं करूंगा क्रॉशॉक्क्लाइट रैपर के Xerials fork की पुनरीक्षण करें। मैंने बिना किसी समस्या के Xerials sqlite-jdbc-3.7.2.jar फ़ाइल के साथ sqlitejdbc-v056.jar को प्रतिस्थापित किया।

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

ज़ेंटस के SQLite जेडीबीसी से अलग क्या है?

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

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

एक और अंतर यह है कि हम अप करने की तारीख SQLite इंजन के नवीनतम संस्करण को यह SQLiteJDBC libray रख रहे हैं, क्योंकि हम इस पुस्तकालय का सबसे गर्म उपयोगकर्ताओं में से एक हो रहा है। उदाहरण के लिए, एसक्यूएलआईटी जेडीबीसी यूटीबीबी (टोक्यो जेनोम ब्राउज़र विश्वविद्यालय) टूलकिट, का मुख्य घटक है जो व्यक्तिगत जीनोम ब्राउज़र बनाने के लिए हमारी उपयोगिता है।

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

+1

'sqlite-jdbc' प्रोजेक्ट बहुत अच्छा है, लेकिन ध्यान रखें कि यह [अपाचे लाइसेंस प्राप्त] है (http://www.apache.org/licenses/LICENSE-2.0.txt)। इसलिए यदि आप इसका उपयोग करते हैं तो आपको एट्रिब्यूशन देना होगा, भले ही आपका कोड एफओएसएस या स्वामित्व है। – dotancohen

2

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

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

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