[odb-users] SQLITE no such table : person
Gunjur Munireddy Prashanth / LOKISA Smart Energy GmbH
GPrashanth at prosolartec.de
Fri Aug 23 04:58:11 EDT 2013
Hello,
The question might be stupid because I am new to ODB and I was trying to run the hello world example.
There is no compilation error.
It creates the database but not the table and nothing is written in to the database and I get an error saying no such table person.
If I create the table manually then I can add the data into database.
I am using sqlite.
I have attached the code. Which I am using
Thnaks.
-------------- next part --------------
#ifndef DATABASE_HXX
#define DATABASE_HXX
#include <string>
#include <memory> // std::auto_ptr
#include <cstdlib> // std::exit
#include <iostream>
#include <odb/database.hxx>
#if defined(DATABASE_MYSQL)
# include <odb/mysql/database.hxx>
#elif defined(DATABASE_SQLITE)
# include <odb/connection.hxx>
# include <odb/transaction.hxx>
# include <odb/schema-catalog.hxx>
# include <odb/sqlite/database.hxx>
#elif defined(DATABASE_PGSQL)
# include <odb/pgsql/database.hxx>
#elif defined(DATABASE_ORACLE)
# include <odb/oracle/database.hxx>
#elif defined(DATABASE_MSSQL)
# include <odb/mssql/database.hxx>
#else
# error unknown database; did you forget to define the DATABASE_* macros?
#endif
inline std::auto_ptr<odb::database>
create_database (int& argc, char* argv[])
{
using namespace std;
using namespace odb::core;
if (argc > 1 && argv[1] == string ("--help"))
{
cout << "Usage: " << argv[0] << " [options]" << endl
<< "Options:" << endl;
#if defined(DATABASE_MYSQL)
odb::mysql::database::print_usage (cout);
#elif defined(DATABASE_SQLITE)
odb::sqlite::database::print_usage (cout);
#elif defined(DATABASE_PGSQL)
odb::pgsql::database::print_usage (cout);
#elif defined(DATABASE_ORACLE)
odb::oracle::database::print_usage (cout);
#elif defined(DATABASE_MSSQL)
odb::mssql::database::print_usage (cout);
#endif
exit (0);
}
#if defined(DATABASE_MYSQL)
auto_ptr<database> db (new odb::mysql::database (argc, argv));
#elif defined(DATABASE_SQLITE)
auto_ptr<database> db (
new odb::sqlite::database (
argc, argv, false, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE));
// Create the database schema. Due to bugs in SQLite foreign key
// support for DDL statements, we need to temporarily disable
// foreign keys.
//
{
connection_ptr c (db->connection ());
c->execute ("PRAGMA foreign_keys=OFF");
transaction t (c->begin ());
schema_catalog::create_schema (*db);
t.commit ();
c->execute ("PRAGMA foreign_keys=ON");
}
#elif defined(DATABASE_PGSQL)
auto_ptr<database> db (new odb::pgsql::database (argc, argv));
#elif defined(DATABASE_ORACLE)
auto_ptr<database> db (new odb::oracle::database (argc, argv));
#elif defined(DATABASE_MSSQL)
auto_ptr<database> db (new odb::mssql::database (argc, argv));
#endif
return db;
}
#endif // DATABASE_HPP
-------------- next part --------------
A non-text attachment was scrubbed...
Name: main.cxx
Type: application/octet-stream
Size: 1031 bytes
Desc: main.cxx
Url : http://codesynthesis.com/pipermail/odb-users/attachments/20130823/5c62dc32/main.obj
-------------- next part --------------
#ifndef PERSON_HXX
#define PERSON_HXX
#include <string>
#include <cstddef> // std::size_t
#include <odb/core.hxx>
#pragma db object
class person
{
public:
person (const std::string& first,
const std::string& last,
unsigned short age)
: first_ (first), last_ (last), age_ (age)
{
}
const std::string&
first () const
{
return first_;
}
const std::string&
last () const
{
return last_;
}
unsigned short
age () const
{
return age_;
}
void
age (unsigned short age)
{
age_ = age;
}
private:
friend class odb::access;
person () {}
#pragma db id auto
unsigned long id_;
std::string first_;
std::string last_;
unsigned short age_;
};
#pragma db view object(person)
struct person_stat
{
#pragma db column("count(" + person::id_ + ")")
std::size_t count;
#pragma db column("min(" + person::age_ + ")")
unsigned short min_age;
#pragma db column("max(" + person::age_ + ")")
unsigned short max_age;
};
#endif // PERSON_HPP
More information about the odb-users
mailing list