Main  /  Edit version 4  /  Edit version 5  /   /  Users Area

Difference "Starting with DbiXX" ver. 4 versus ver. 5

Content:

DbiXX is not a mandatory part of the CppCMS framework; it is just a general purpose library to execute SQL queries in a safe way.
Let's see a simple example:
#include <dbixx/dbixx.h>
#include <iostream>
using namespace dbixx;
using namespace std;
int main()
{
try {
session sql("sqlite3");
sql.param("dbname","test.db");
sql.param("sqlite3_dbdir","./");
sql.connect();
sql<<"DROP TABLE IF EXISTS users";
sql.exec();
sql<<"CREATE TABLE users ( "
" id integer primary key not null, "
" name varchar(128) not null "
");";
sql.exec();
sql<<"INSERT INTO users(id,name) VALUES(?,?)",
1,"Moshe",exec();
sql<<"INSERT INTO users(id,name) VALUES(?,?)",
2,"Yossi",exec();
sql<<"SELECT name FROM users WHERE id=?",1;
row r;
if(sql.single(r)) {
string name;
r>>name;
cout<<name<<endl;
}
else {
cout<<"No user with id="<<1<<endl;
}
result res;
sql<<"SELECT id,name FROM users";
sql.fetch(res);
cout<<"There are "<<res.rows()<<" users\n";
while(res.next(r)) {
int id;
string name;
r>>id>>name;
cout<<id<<"\t"<<name<<endl;
}
}
catch(std::exception const &e) {
cerr<<e.what()<<endl;
return 1;
}
return 0;
}
First we create a sql session object and load the driver "sqlite3". Then we setup all the mandatory parameters needed by the driver and create a connection.
session sql("sqlite3");
sql.param("dbname","test.db");
sql.param("sqlite3_dbdir","./");
sql.connect();
Then we perform queries. First we prepare them using
"iostreams like" style:
sql<<"DROP TABLE IF EXISTS users";
and then execute the operation:
sql.exec();
There is a syntactic sugar for this operation:
sql<<"DROP TABLE IF EXISTS users",exec();
Then we want to execute some commands using parameters
binding:
sql<<"INSERT INTO users(id,name) VALUES(?,?)",
1,"Moshe",exec();
First we load our query. Each "?" represents a bound parameter. Then, using overloaded comma operator, we bind actual values: integer "1" and string "Moshe". Note: every bound string is automatically escaped.
First we load our query. Each "?" represents a bound parameter. Then, using overloaded comma operator, we bind actual values: the integer "1" and the string "Moshe". Note: every bound string is automatically escaped.
Now we want to fetch a single row of data. First, we bind the query and its parameters as before.
sql<<"SELECT name FROM users WHERE id=?",1;
But now, we store the output data in a single row class.
row r;
if(sql.single(r)) {
If the result wasn't an empty set, the condition is true and we can readout the data from the row, using the "iostreams" like interface.
r>>name;
Now, we want to fetch some bigger data set. In this case we
use the class result that stores the output data. We use:
result res;
sql.fetch(res);
Now we can find out the number of rows calling `res.rows()` and iterate over each row calling `res.next(r)`.
Now, you can read the full [DbiXX Library API](http://art-blog.no-ip.info/wikipp/en/page/ref_dbixx)

About

CppCMS is a web development framework for performance demanding applications.

Support This Project

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Navigation

Main Page


Valid CSS | Valid XHTML 1.0