CppSQLite3库

参考:

http://blog.csdn.net/northcan/article/details/7252337

 

官网示例:

        try
        {
            int i, fld;
            time_t tmStart, tmEnd;
            CppSQLite3DB db;

            cout << "SQLite Version: " << db.SQLiteVersion() << endl;

            remove(gszFile);
            db.open(gszFile);

            cout << endl << "Creating emp table" << endl;
            db.execDML("create table emp(empno int, empname char(20));");
            ///
            // Execute some DML, and print number of rows affected by each one
            ///
            cout << endl << "DML tests" << endl;
            int nRows = db.execDML("insert into emp values (7, 'David Beckham');");
            cout << nRows << " rows inserted" << endl;

            nRows = db.execDML(
             "update emp set empname = 'Christiano Ronaldo' where empno = 7;");
            cout << nRows << " rows updated" << endl;

            nRows = db.execDML("delete from emp where empno = 7;");
            cout << nRows << " rows deleted" << endl;

            /
            // Transaction Demo
            // The transaction could just as easily have been rolled back
            /
            int nRowsToCreate(50000);
            cout << endl << "Transaction test, creating " << nRowsToCreate;
            cout << " rows please wait..." << endl;
            tmStart = time(0);
            db.execDML("begin transaction;");

            for (i = 0; i < nRowsToCreate; i++)
            {
                char buf[128];
                sprintf(buf, "insert into emp values (%d, 'Empname%06d');", i, i);
                db.execDML(buf);
            }

            db.execDML("commit transaction;");
            tmEnd = time(0);

            
            // Demonstrate CppSQLiteDB::execScalar()
            
            cout << db.execScalar("select count(*) from emp;")
                   << " rows in emp table in ";
            cout << tmEnd-tmStart << " seconds (that was fast!)" << endl;

            
            // Re-create emp table with auto-increment field
            
            cout << endl << "Auto increment test" << endl;
            db.execDML("drop table emp;");
            db.execDML(
             "create table emp(empno integer primary key, empname char(20));");
            cout << nRows << " rows deleted" << endl;

            for (i = 0; i < 5; i++)
            {
                char buf[128];
                sprintf(buf,
           "insert into emp (empname) values ('Empname%06d');", i+1);
                db.execDML(buf);
                cout << " primary key: " << db.lastRowId() << endl;
            }

         ///
         // Query data and also show results of inserts into auto-increment field
         //
            cout << endl << "Select statement test" << endl;
            CppSQLite3Query q = db.execQuery("select * from emp order by 1;");

            for (fld = 0; fld < q.numFields(); fld++)//number of columns
            {
                cout << q.fieldName(fld) << endl;// << "(" << q.fieldType(fld) << ")|";
            }
            cout << endl;

            while (!q.eof())
            {
                cout << q.fieldValue(0) << "|";
                cout << q.fieldValue(1) << "|" << endl;
                q.nextRow();
            }

            ///
            // SQLite's printf() functionality. Handles embedded quotes and NULLs
            
            cout << endl << "SQLite sprintf test" << endl;
            CppSQLite3Buffer bufSQL;
            bufSQL.format("insert into emp (empname) values (%Q);", "He's bad");
            cout << (const char*)bufSQL << endl;
            db.execDML(bufSQL);

            bufSQL.format("insert into emp (empname) values (%Q);", NULL);
            cout << (const char*)bufSQL << endl;
            db.execDML(bufSQL);

            
            // Fetch table at once, and also show how to
            // use CppSQLiteTable::setRow() method
            //
            cout << endl << "getTable() test" << endl;
            CppSQLite3Table t = db.getTable("select * from emp order by 1;");

            for (fld = 0; fld < t.numFields(); fld++)
            {
                cout << t.fieldName(fld) << "|";
            }
            cout << endl;
            for (int row = 0; row < t.numRows(); row++)
            {
                t.setRow(row);
                for (int fld = 0; fld < t.numFields(); fld++)
                {
                    if (!t.fieldIsNull(fld))
                        cout << t.fieldValue(fld) << "|";
                    else
                        cout << "NULL" << "|";
                }
                cout << endl;
            }

            
            // Test CppSQLiteBinary by storing/retrieving some binary data, checking
            // it afterwards to make sure it is the same
            //
            cout << endl << "Binary data test" << endl;
            db.execDML("create table bindata(desc char(10), data blob);");

            unsigned char bin[256];
            CppSQLite3Binary blob;
            for (i = 0; i < 256; i++)
            {
                bin[i] = i;
            }

            blob.setBinary(bin, sizeof(bin));

            bufSQL.format("insert into bindata values ('testing', %Q);",
                          blob.getEncoded());
            db.execDML(bufSQL);
            cout << "Stored binary Length: " << sizeof bin << endl;

            q = db.execQuery("select data from bindata where desc = 'testing';");

            if (!q.eof())
            {
                blob.setEncoded((unsigned char*)q.fieldValue("data"));
                cout << "Retrieved binary Length: "
           << blob.getBinaryLength() << endl;
            }

            const unsigned char* pbin = blob.getBinary();
            for (i = 0; i < 256; i++)
            {
                if (pbin[i] != i)
                {
                    cout << "Problem: i: ," << i << " bin[i]: "
                 << pbin[i] << endl;
                }
            }

            /
            // Pre-compiled Statements Demo
            /
            cout << endl << "Transaction test, creating " << nRowsToCreate;
            cout << " rows please wait..." << endl;
            db.execDML("drop table emp;");
            db.execDML("create table emp(empno int, empname char(20));");
            tmStart = time(0);
            db.execDML("begin transaction;");

            CppSQLite3Statement stmt = db.compileStatement(
                "insert into emp values (?, ?);");
            for (i = 0; i < nRowsToCreate; i++)
            {
                char buf[16];
                sprintf(buf, "EmpName%06d", i);
                stmt.bind(1, i);
                stmt.bind(2, buf);
                stmt.execDML();
                stmt.reset();
            }

            db.execDML("commit transaction;");
            tmEnd = time(0);

            cout << db.execScalar("select count(*) from emp;")
               << " rows in emp table in ";
            cout << tmEnd-tmStart << " seconds (that was even faster!)" << endl;
            cout << endl << "End of tests" << endl;
        }
        catch (CppSQLite3Exception& e)
        {
            cerr << e.errorCode() << ":" << e.errorMessage() << endl;
        }

        
        // Loop until user enters q or Q
        ///
        char c(' ');

        while (c != 'q' && c != 'Q')
        {
            cout << "Press q then enter to quit: ";
            cin >> c;
        }

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值