Tôi muốn tìm một đối tượng tốt có định hướng C++ (như trái ngược với C) wrapper cho sqlite. Mọi người khuyên gì? Nếu bạn có một số gợi ý, vui lòng đặt chúng trong các câu trả lời riêng cho mục đích bỏ phiếu. Ngoài ra, vui lòng cho biết bạn có bất kỳ trải nghiệm nào về trình bao bọc mà bạn đang đề xuất và cách bạn tìm thấy nó để sử dụng hay không.Trình bao bọc OO C++ tốt cho sqlite
Trả lời
Tôi đã sử dụng cái này http://www.codeproject.com/KB/database/CppSQLite.aspx nhưng tôi đã chuyển sang C#, do đó có thể mới/những người tốt hơn bây giờ
Thư viện này là rực rỡ.
Có Windows và các phiên bản Linux của thư viện có sẵn và tôi đã dậy và chạy trong vài phút.
Tôi là cur ious gì rực rỡ về nó? –
Lưu ý thư viện là phần mềm chia sẻ. Tôi nhận ra rằng khi tôi đã thay đổi tất cả nguồn của mình ... – NeDark
Trang web nói "Nếu bạn đang duyệt bản sao cục bộ của SQLAPI ++ Web, vui lòng truy cập trang đặt hàng chính thức tại www.sqlapi.com \ Order để xác minh rằng giá đang tăng -to-date. " Thành thật mà nói, tôi không thoải mái khi trả tiền cho một thư viện mã từ một nhà phát triển không biết rằng dấu gạch chéo ngược không thuộc về một URI. ;) –
Một trình bao bọc tốt khác cho cơ sở dữ liệu trong C++ là SOCI. Nó không phải là rất OO, nhưng C++ hiện đại hơn.
Nó hỗ trợ Oracle, PostgreSQL và MySQL. A SQLite backend is in the CVS.
http://www.codeproject.com/KB/database/CppSQLite.aspx thật tuyệt vời, nó rất dễ dàng để cổng, tôi đã có nó làm việc trên bcb5 (omg) trong nửa giờ hoặc lâu hơn. Đó là về mỏng như bạn có thể nhận được và dễ hiểu. Có một số lượng tốt các ví dụ bao gồm tất cả mọi thứ bạn cần biết. Nó sử dụng các ngoại lệ để xử lý lỗi - tôi đã sửa đổi nó để cung cấp mã trả về trong một phút. Chỉ có vấn đề khó khăn là tạo tập tin lib của riêng bạn không được cung cấp.
try
{
CppSQLite3DB db;
db.open(asFileName.c_str());
db.execDML("Update data set hrx = 0");
} // try
catch (...)
{
} // catch
Không thể đơn giản hơn nhiều so với này .....
Bạn đã chuyển thành công nó cho mingw-3.4.5? Bạn sẽ chia sẻ phiên bản được chuyển?
Thx.
http://www.codeproject.com/KB/database/CppSQLite.aspx thật tuyệt vời, rất dễ dàng để cổng, tôi đã làm việc trên bcb5 (omg) trong nửa giờ hoặc lâu hơn. Đó là về mỏng như bạn có thể nhận được và dễ hiểu. Có một số lượng tốt các ví dụ bao gồm tất cả mọi thứ bạn cần biết. Nó sử dụng các ngoại lệ để xử lý lỗi - tôi đã sửa đổi nó để cung cấp mã trả về trong một phút. Chỉ có vấn đề khó khăn là tạo tập tin lib của riêng bạn không được cung cấp.
Sử dụng Qt - nó có lớn bắt buộc đối với SQLite mà cũng phù hợp vào thiết kế tổng thể của nó
Tôi không hài lòng với bất kỳ điều gì tôi có thể tìm thấy, vì vậy tôi đã viết của riêng mình: sqlite3cc.
Dưới đây là một ví dụ mã:
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";
Nó không còn có sẵn để tải xuống? – NeDark
Có, nó có sẵn. Chưa có bản phát hành thích hợp nào. Bạn có thể lấy mã nguồn từ kho lưu trữ ở đây (http://www.waxworlds.org/edam/software/sqlite3cc#repository) hoặc [ở đây] (https://code.launchpad.net/sqlite3cc) (bạn sẽ cần tải xuống các công cụ RCS chợ từ [ở đây] (http://bazaar.canonical.com/) nếu bạn không có chúng) hoặc bạn có thể xem mã nguồn trực tuyến [tại đây] (http: //bazaar.launchpad.net/~edam/sqlite3cc/trunk/files) – edam
Điều này thực sự đang mời xuống phiếu, nhưng ở đây đi ...
Tôi sử dụng sqlite trực tiếp từ C++ và không thấy bất kỳ giá trị nào có lớp trừu tượng C++ được thêm vào. Nó khá tốt (và hiệu quả) như vậy.
Vâng, bạn chỉ có -4 cho hai downvotes và tôi upvoted bạn. Sử dụng giao diện C chắc chắn là một lựa chọn và có thể là một lựa chọn mà chúng tôi chọn. Tất nhiên chúng ta có thể sử dụng một vài trình bao bọc C++ nhẹ, có thể tăng :: shared_ptr với các deleters tùy chỉnh, và có thể là ngoại lệ để xử lý các lỗi, nhưng không có nhu cầu thực sự cho một API khổng lồ. – CashCow
@CashCow: Có - cảm ơn - tôi cũng làm như vậy. –
Tương tự như vậy, cuối cùng, đây là lựa chọn lành mạnh nhất mà chúng tôi đã có. – WhozCraig
Đây là bản chưa được cập nhật trong một thời gian, nhưng biên dịch và chạy trên Mac OS GCC 4.3. Nó cũng được phát hành theo Giấy phép MIT, vì vậy bạn có thể sử dụng nó trong một dự án thương mại, không có vấn đề gì. http://code.google.com/p/sqlite3pp/
Việc sử dụng là tăng-ified và rất sạch sẽ:
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();
Tôi cũng không hài lòng với những gì tôi có thể tìm thấy. Bây giờ bạn có thể viết:
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());
Phương pháp bảng là tất cả những gì bạn cần để viết miễn là bạn dính vào các loại dữ liệu sqlite3. Như tất cả mọi thứ là một mẫu không có nhiều lớp trừu tượng mã vẫn còn sau-O. Tham gia tự nhiên yêu cầu một lớp kết quả tương tự như lớp Person. Việc triển khai thực hiện là một tiêu đề có ít hơn 500 dòng. Giấy phép là LGPL. Source
Một cách đơn giản khác là NLDatabase. Disclaimer: Tôi là tác giả. Sử dụng cơ bản (và thành thật mà nói, bạn sẽ không nhận được nhiều hơn "cơ bản" từ trang này) trông giống như sau:
#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;
}
}
Và chỉ để vui, mở cơ sở dữ liệu, chạy truy vấn và tìm nạp kết quả trong một dòng:
for (auto & row : Database("test.sqlite").query("SELECT * FROM test").select()) {
cout << row.column_string(0) << endl;
}
tôi đọc bài đăng này và thử một số các thư viện được đề cập trong câu trả lời,
Nhưng không ai trong số họ là đủ dễ dàng cho tôi (tôi là một lập trình viên lười biếng!).
Vì vậy, tôi đã viết wrapper của riêng tôi: 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;
Hãy vui vẻ!
Tôi đã thực hiện một điều này vì nhu cầu trong công ty của chúng tôi. https://www.github.com/rubdos/libsqlitepp Đó là C++ 11 và chỉ tiêu đề. Chỉ cần đặt tiêu đề trong dự án của bạn, bao gồm nó và liên kết đến các thư viện sqlite C.
Ví dụ phải ở đâu đó trên đó, cũng khá dễ sử dụng.
Mọi người đều đã đưa ra lời khuyên tốt về những gì cần sử dụng: Tôi sẽ cho bạn biết công cụ KHÔNG sử dụng nào.
Trải nghiệm của tôi thật khủng khiếp.
Tôi chỉ đang thực hiện một số nghiên cứu về việc sử dụng orm và tôi đang thử nghiệm rất nhiều.
Điểm yếu:
- không có tài liệu
- không README giải thích
- có lời giải thích về điều kiện tiên quyết
- không biên dịch do rất nhiều bug (là không đúng sự thật, không được cố định trong v0.3.17)
- 1. Có trình bao bọc .NET/C# cho SQLite không?
- 2. Thư viện trình bao bọc Cocoa/Objective-C tốt nhất cho SQLite trên iPhone
- 3. C Trình bao bọc cho C++
- 4. Trình bao bọc C++ dành cho ncurses?
- 5. Có trình bao bọc OpenCL tốt cho Ruby không?
- 6. authorize.net Trình bao bọc/thư viện C#
- 7. Trình bao bọc C# cho các đối tượng
- 8. C# - trình bao bọc tham chiếu cho loại giá trị
- 9. Trình bao bọc đối tượng iOS-C cho Google Documents
- 10. Trình bao bọc Python cho thư viện UDT C++
- 11. Trình bao bọc C# cho kernel32.dll API
- 12. Trình bao bọc C# có sẵn miễn phí tốt nhất cho BITS là gì?
- 13. . Trình bao bọc mạng cho API Perforce?
- 14. Chức năng trình bao bọc cho IndexedDB
- 15. Trình bao bọc C++ để tăng/C++ 11
- 16. Trình bao bọc cơ sở dữ liệu gọn nhẹ của Python cho SQLite
- 17. Có một trình bao bọc tốt xung quanh ILGenerator không?
- 18. Viết trình bao bọc bảng điều khiển trong C#?
- 19. Trình bao bọc C++/CLI cho native C++ để sử dụng làm tham chiếu trong C#
- 20. Viết trình bao bọc dòng lệnh di động trong C
- 21. C++ thiết kế trình bao bọc ghi nhật ký
- 22. Trình bao bọc .NET cho chức năng API của Windows
- 23. HOWTO: Viết trình bao bọc API Python?
- 24. Trình bao bọc .NET tốt nhất cho Google Maps hoặc Yahoo Maps?
- 25. Trình bao bọc dịch vụ web
- 26. Viết trình bao bọc được quản lý cho Chromium
- 27. Cân nhắc về trình bao bọc setuid
- 28. Trình bao bọc API tìm kiếm Google cho Node.js
- 29. Có một trình bao bọc giống ORM cho memcached
- 30. Lỗi khi cố gắng sử dụng trình bao bọc SQLite FMDatabase
Ngoài ra, hãy kiểm tra danh sách tại: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers – User