2008-09-23 5 views
52

के लिए एक अच्छा ओओ सी ++ रैपर क्या है, मैं स्क्लाइट के लिए एक अच्छा ऑब्जेक्ट उन्मुख सी ++ (सी के विपरीत) रैपर ढूंढना चाहता हूं। लोग क्या सलाह देते हैं? यदि आपके पास कई सुझाव हैं तो कृपया उन्हें वोटिंग उद्देश्यों के लिए अलग उत्तरों में रखें। साथ ही, कृपया इंगित करें कि आपके पास उस रैपर का कोई अनुभव है जिसका आप सुझाव दे रहे हैं और आप इसे कैसे उपयोग करते हैं।स्क्लाइट

+1

इस सूची को भी चेकआउट करें: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers – User

उत्तर

4

मैं इस एक http://www.codeproject.com/KB/database/CppSQLite.aspx का उपयोग किया है, लेकिन मैं सी # करने के लिए स्थानांतरित कर दिया है, इसलिए वहाँ नए/बेहतर लोगों को हो सकता है अब

0

इस पुस्तकालय शानदार है।

http://www.sqlapi.com/

Windows और पुस्तकालय उपलब्ध की लिनक्स संस्करण हैं और मैं ऊपर और मिनटों में चल रहा था।

+16

मैं cur हूँ इसके बारे में इतना शानदार क्या है? –

+8

नोटिस लाइब्रेरी शेयरवेयर है। मुझे एहसास हुआ कि जब मैंने अपना पूरा स्रोत बदल दिया था ... – NeDark

+19

साइट कहती है, "यदि आप स्क्लाप्पी ++ वेब की स्थानीय प्रतिलिपि ब्राउज़ कर रहे हैं, तो कृपया www.sqlapi.com \ ऑर्डर पर आधिकारिक ऑर्डरिंग पेज पर जाएं ताकि यह सत्यापित किया जा सके कि कीमतें बढ़ रही हैं -तारीख तक।" ईमानदारी से मैं एक डेवलपर से कोड लाइब्रेरी के लिए असहज भुगतान कर रहा हूं जो यह नहीं जानता कि बैकस्लैश यूआरआई में नहीं है। ;) –

16

सी ++ में डेटाबेस के लिए एक और अच्छा कुरकुरा SOCI है। यह बहुत ओओ नहीं है, लेकिन अधिक आधुनिक सी ++ है।

यह ओरेकल, पोस्टग्रेएसक्यूएल और MySQL का समर्थन करता है। एक SQLite backend is in the CVS

4

http://www.codeproject.com/KB/database/CppSQLite.aspx बस शानदार है, यह बंदरगाह के लिए बहुत आसान है, मैं इसे आधे घंटे या उससे भी अधिक समय में बीसीबी 5 (ओएमजी) पर काम कर रहा था। यह उतना पतला है जितना आप प्राप्त कर सकते हैं और समझने में आसान है। ऐसे उदाहरणों की एक अच्छी संख्या है जो आपको हर चीज़ के बारे में जानने के लिए कवर करती हैं। यह त्रुटि प्रबंधन के लिए अपवादों का उपयोग करता है - मैंने मिनटों के एक मीटर में रिटर्न कोड प्रदान करने के लिए इसे संशोधित किया। केवल एक मुश्किल मुद्दा है अपनी खुद की lib फ़ाइल बनाने के लिए कोई भी प्रदान नहीं किया जाता है।

try 
{ 

    CppSQLite3DB db; 

    db.open(asFileName.c_str()); 

    db.execDML("Update data set hrx = 0"); 

} // try 

catch (...) 
{ 

} // catch 

इस तुलना में बहुत सरल नहीं हो सकता है .....

-1

आप सफलतापूर्वक के लिए MinGW-3.4.5 यह पोर्ट है? क्या आप पोर्ट संस्करण को साझा करेंगे?

Thx।

http://www.codeproject.com/KB/database/CppSQLite.aspx बस शानदार है, यह बंदरगाह के लिए बहुत आसान है, मैं इसे आधे घंटे या उससे भी अधिक समय में बीसीबी 5 (ओएमजी) पर काम कर रहा था। यह उतना पतला है जितना आप प्राप्त कर सकते हैं और समझने में आसान है। ऐसे उदाहरणों की एक अच्छी संख्या है जो आपको हर चीज़ के बारे में जानने के लिए कवर करती हैं। यह त्रुटि प्रबंधन के लिए अपवादों का उपयोग करता है - मैंने मिनटों के एक मीटर में रिटर्न कोड प्रदान करने के लिए इसे संशोधित किया। केवल एक मुश्किल मुद्दा है अपनी खुद की lib फ़ाइल बनाने के लिए कोई भी प्रदान नहीं किया जाता है।

11

उपयोग क्यूटी पर एक नज़र ले जा सकते हैं - यह SQLite कि अपनी समग्र डिजाइन में अच्छी तरह से फिट बैठता है के लिए बाध्यकारी महान है

5

मैं किसी भी चीज़ से मुझे प्रसन्न नहीं था, इसलिए मैंने अपना खुद लिखा: sqlite3cc

यहाँ एक कोड उदाहरण है:

sqlite::connection db(filename); 

sqlite::command c(db, "UPDATE foo SET bar = ? WHERE name = ?"); 
c << 123 << name << sqlite::exec; 

sqlite::query q(db, "SELECT foo FROM bar"); 
for(sqlite::query::iterator i = q.begin(); i != q.end(); i++) 
    std::cout << i->column<std::string>(0) << "\n"; 
+0

क्या यह अब डाउनलोड के लिए उपलब्ध नहीं है? – NeDark

+0

हां, यह उपलब्ध है। अभी तक कोई उचित रिलीज नहीं हुआ है। आप बाजार भंडार से स्रोत कोड प्राप्त कर सकते हैं [यहां] (http://www.waxworlds.org/edam/software/sqlite3cc#repository) या [यहां] (https://code.launchpad.net/sqlite3cc) (आपको [आरएसीएस] [http://bazaar.canonical.com/) से बाज़ार आरसीएस उपकरण डाउनलोड करने की आवश्यकता होगी यदि आपके पास नहीं है) या आप स्रोत कोड ऑनलाइन [यहां] देख सकते हैं (http: //bazaar.launchpad.net/~edam/sqlite3cc/trunk/files) – edam

44

यह वास्तव में नीचे वोट आमंत्रित कर रही है, लेकिन यहां आता है ...

मैं सी ++ से सीधे एसक्लाइट का उपयोग करता हूं, और एक अतिरिक्त सी ++ अमूर्त परत के साथ कोई मूल्य नहीं देखता। यह काफी अच्छा (और कुशल) है जैसा कि है।

+7

वैसे आपको केवल दो डाउनवॉट्स के लिए -4 मिल गया है और मैंने आपको ऊपर उठाया है। सी इंटरफ़ेस का उपयोग करना निश्चित रूप से एक विकल्प है और हम इसे चुनने की संभावना रखते हैं। निस्संदेह हम कुछ हल्के सी ++ रैपर का उपयोग कर सकते हैं, संभवतः कस्टम डेलेटर्स के साथ साझा_ptr को बढ़ावा दे सकते हैं, और संभावित रूप से त्रुटियों को संभालने के लिए अपवाद, लेकिन एक विशाल एपीआई के लिए कोई वास्तविक आवश्यकता नहीं है। – CashCow

+0

@CashCow: हाँ - धन्यवाद - मैंने वही किया। –

+1

इसी प्रकार, अंत में, यह हमारे पास सबसे अधिक विकल्प था। – WhozCraig

12

यहां एक ऐसा है जिसे थोड़ी देर में अपडेट नहीं किया गया है, लेकिन मैक ओएस जीसीसी 4.3 पर संकलित और चलाता है। इसे एमआईटी लाइसेंस के तहत भी जारी किया जाता है, ताकि आप इसे वाणिज्यिक परियोजना में इस्तेमाल कर सकें, कोई समस्या नहीं। http://code.google.com/p/sqlite3pp/

उपयोग को बढ़ावा देने-ified और बहुत साफ है:

sqlite3pp::database db("test.db"); 
sqlite3pp::transaction xct(db); 
{ 
    sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)"); 
    cmd.bind(":user", "Mike"); 
    cmd.bind(":phone", "555-1234"); 
    cmd.execute(); 
} 
xct.rollback(); 

देखें: http://code.google.com/p/sqlite3pp/wiki/UsagePage

7

मैं भी मैं क्या मिल सकता है से खुश नहीं थे। अब आप लिख सकते हैं:

class Person { 
public: 
    Person() {} 
    static SqlTable<Person>& table() { 
     static SqlTable<Person> tab = SqlTable<Person>::sqlTable("Person", 
      SqlColumn<Person>("Firstname", makeAttr(&Reservation::firstname)), 
      SqlColumn<Person>("Lastname", makeAttr(&Reservation::lastname)), 
      SqlColumn<Person>("Age",  makeAttr(&Reservation::age)), 
     return tab; 
    } 
    std::string firstname; 
    std::string lastname; 
    int age; 
}; 

SqliteDB db("testtable.db"); 
auto sel(db.select<Person>("Firstname=\"Danny\" and Lastname=\"Zeckzer\"")); 
std::for_each(sel.first, sel.second, [](const Person& p) { 
... 
Person me; 
db.insert<Person>(me); 
... 
std::vector<Person> everybody; 
db.insert<Person>(everybody.begin(), everybody.end()); 

तालिका विधि तुम सब जब तक आप sqlite3 डेटा प्रकार से चिपके के रूप में लिखने की ज़रूरत है। चूंकि सबकुछ एक टेम्पलेट है क्योंकि बहुत ही अमूर्त परत कोड -ओ के बाद रहता है। प्राकृतिक जुड़ने के लिए व्यक्ति वर्ग के समान परिणाम वर्ग की आवश्यकता होती है। कार्यान्वयन 500 से कम लाइनों के साथ एक एकल शीर्षलेख है। लाइसेंस एलजीपीएल है। Source

3

एक और सरल NLDatabase है। अस्वीकरण: मैं लेखक हूँ। बेसिक उपयोग (और ईमानदारी से, आप की तुलना में यह एक से "बुनियादी" भी बहुत कुछ नहीं मिलेगा) इस तरह दिखता है:

#include "NLDatabase.h" 


using namespace std; 
using namespace NL::DB; 


int main(int argc, const char * argv[]) { 

    Database db("test.sqlite"); 

    auto results = db.query("SELECT * FROM test WHERE name <> ?").select("TOM"); 

    for (auto const & row : results) { 
     cout << "column[0]=" << row.column_string(0) << endl; 
    } 
} 

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

for (auto & row : Database("test.sqlite").query("SELECT * FROM test").select()) { 
    cout << row.column_string(0) << endl; 
} 
6

मैं इस पोस्ट पढ़ सकते हैं और पुस्तकालयों जवाब में बताया गया में से कुछ,
की कोशिश की लेकिन उनमें से कोई भी मेरे लिए काफी आसान था (मैं एक आलसी प्रोग्रामर हूँ!)। sqlite modern cpp

database db("dbfile.db"); 
// executes the query and creates a 'user' table if not exists 
db << "create table if not exists user (" 
     " age int," 
     " name text," 
     " weight real" 
     ");"; 
// inserts a new user and binds the values to '?' marks 
db << "insert into user (age,name,weight) values (?,?,?);" 
     << 20 
     << "bob" 
     << 83.0; 
// slects from table user on a condition (age > 18) and executes 
// the lambda for every row returned . 
db << "select age,name,weight from user where age > ? ;" 
    << 18 
    >> [&](int age, string name, double weight) { 
     cout << age << ' ' << name << ' ' << weight << endl; 
    }; 
// selects the count(*) of table user 
int count = 0; 
db << "select count(*) from user" >> count; 

मज़ा:

तो मैं अपने आवरण लिखा है!

3

मैंने अपनी कंपनी की आवश्यकता के कारण एक बनाया है। https://www.github.com/rubdos/libsqlitepp यह सी ++ 11 है, और केवल शीर्षलेख है। बस अपने प्रोजेक्ट में हेडर डालें, इसे शामिल करें और सी स्क्लाइट लाइब्रेरी से लिंक करें।

उदाहरण उस गिट रेपो पर कहीं भी होना चाहिए, जो उपयोग करने में काफी आसान है।

4

हर किसी ने क्या उपयोग करना है इस बारे में अच्छी सलाह दी है: मैं आपको बताऊंगा कि कौन सा उपकरण उपयोग नहीं है।

LiteSQL

मेरा अनुभव भयानक है।
मैं सिर्फ ओआरएम उपयोग पर कुछ शोध कर रहा हूं, और मैं इसका बहुत परीक्षण कर रहा हूं।

कमजोरियों:

  • कोई प्रलेखन
  • कोई व्याख्यात्मक README
  • की शर्तों पर कोई स्पष्टीकरण नहीं
  • bug का एक बहुत की वजह से संकलन नहीं है (सच नहीं है, में निश्चित नहीं है v0.3.17)