اینم یه تجربه پراکنده کوتاه دیگه!
من اخیرا توی یکی از پروژههام که به زبان c++ نوشته شده نیاز داشتم که از یک شبه ORM به نسبت سبک استفاده کنم چند تا ویژگی داشته باشه. این ویژگیها عبارتند از:
- متن باز باشه
- وابستگیهای زیادی نداشته باشه
- حداقل از sqlite و mysql و postgres پشتیبانی کنه
- استفاده ازش راحت باشه
گزینههای زیادی جلوی روم نبود
یادمه نمیاد چرا odb رو از لیست انتخابهام حذف کردم. اما qxrm به دلیل اینکه نمیخواستم یه وابستگی جدید(وابستگی به qt) به کدم اضافه کنم استفاده نکردم. و در انتها از soci استفاده کردم. کار با soci به نسبت راحته و فقط کافیه که نمونه کد ازش ببینید. تقریبا هم توی تمام توزیعهای لینوکس قابل استفاده است
#include "soci.h" #include "soci-oracle.h" #include <iostream> #include <istream> #include <ostream> #include <string> #include <exception> using namespace soci; using namespace std; bool get_name(string &name) { cout << "Enter name: "; return cin >> name; } int main() { try { session sql(oracle, "service=mydb user=john password=secret"); int count; sql << "select count(*) from phonebook", into(count); cout << "We have " << count << " entries in the phonebook.n"; string name; while (get_name(name)) { string phone; indicator ind; sql << "select phone from phonebook where name = :name", into(phone, ind), use(name); if (ind == i_ok) { cout << "The phone number is " << phone << 'n'; } else { cout << "There is no phone for " << name << 'n'; } } } catch (exception const &e) { cerr << "Error: " << e.what() << 'n'; } }
همین.