Thank you Michael for your prompt response. I have been able to duplicate the error message. I think this could be a bug in SQLite3. If it is a bug, how do I go about reporting it? //== my_sqlite3.hpp === #ifndef JME_MY_SQLITE3_HPP #define JME_MY_SQLITE3_HPP
#include <iostream> #include"sqlite3.h" namespace jme { class mySQLite3 { private: sqlite3 *db; // Data Base sqlite3_stmt* stmt; // SQL statement bool rc; // SQL return code std::string databese_name; // The name of the database std::string sql_param_tblName; // Databese table Name parameters std::string stmtName; // SQL statement name std::string apstr; // All Purpose String int apint; // All Purpose Integer std::string sqlite3_version; private: //! Initalization method, instead of using the 'tor initialize //! all varialbles and set all necessary parameters, we use an Init void Init(); public: //Constructors mySQLite3(); mySQLite3(const std::string&); //Destructor ~mySQLite3(); //! Pass to this method the name of the database to be openned void createDatabase(const std::string&)throw(std::exception) ; //! Pass to this method the SQL statement for the table creation void createTable(const std::string& )throw(std::exception) ; }; } #endif === my_sqlite3.cpp=== #ifndef JME_MY_SQLITE3_HPP #include "my_sqlite3.hpp" #endif jme::mySQLite3::mySQLite3(const std::string& s) { this->Init(); this->databese_name = s; this->createDatabase(databese_name); } jme::mySQLite3::mySQLite3() { this->Init(); } void jme::mySQLite3::Init() { databese_name = sql_param_tblName = stmtName = "."; sqlite3_version = "SQLite version: "; sqlite3_version += sqlite3_libversion(); } void jme::mySQLite3::createTable(const std::string& s) throw (std::exception) { rc = sqlite3_prepare_v2( db, s.c_str(), -1, &stmt, NULL); if(rc != SQLITE_OK) { sqlite3_close(db); sqlite3_finalize(stmt); std::string error("Error prepare_v2: "); error += sqlite3_errmsg(db); std::cout << "Error: " << rc << " " << error << std::endl; } rc = sqlite3_step(stmt); std::cout << "Error: " << rc << std::endl; if(rc != SQLITE_DONE) { sqlite3_close(db); sqlite3_finalize(stmt); std::string error("error sqlite3_step: "); error += sqlite3_errmsg(db); std::cout << error << std::endl; } sqlite3_finalize(stmt); } void jme::mySQLite3::createDatabase(const std::string& s)throw(std::exception) { rc = sqlite3_open_v2(s.c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if(rc != SQLITE_OK) { sqlite3_close(db); apstr = "Error opening database: "; apstr += databese_name; apstr += "\nError value: "; apstr += sqlite3_errmsg(db); std::cout << apstr << std::endl; } } jme::mySQLite3::~mySQLite3() { sqlite3_close(db); } === main.cpp == //STL #include<iostream> //JME #include"my_sqlite3.hpp" int main() { std::string s1("CREATE TABLE name(n_id INTEGER PRIMARY KEY, title TEXT, fname TEXT, mname TEXT, lname TEXT)"); std::string s2("INSERT INTO name (n_id, title, fname, mname, lname) VALUES (?, ?, ?, ?, ?)"); jme::mySQLite3 myDB("database.db3"); myDB.createTable(s1); std::cin.get(); return 0; } -----Original Message----- From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users-boun...@sqlite.org] On Behalf Of Black, Michael (IS) Sent: Monday, July 23, 2012 3:53 PM To: General Discussion of SQLite Database Subject: Re: [sqlite] C++ - Creating Table Just as a sanity check your code does work OK. I made it a standalone program. #include <iostream> #include "sqlite3.h" using namespace std; class mySQLite3Class { private: //SQLite3 sqlite3* db; //SQLite3 string dbName; // Database name string apstr; // All Purpose String string sql_param_tblName; // Databese table Name parameters string stmtName; // SQL statement name public: void createDB(); void create_tblName(); void createDatabase(const string& s); void createTable(const string& s); mySQLite3Class(const string& s) { createDatabase(s); } }; void mySQLite3Class::createDatabase(const string& s) { int rc = sqlite3_open_v2(s.c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if(rc != SQLITE_OK) { std::cout << rc << std::endl; } } void mySQLite3Class::createTable(const string& s) { sqlite3_stmt *stmt; int rc = sqlite3_prepare_v2(db, s.c_str(), s.length(), &stmt, NULL ); if(rc != SQLITE_OK) { std::cout << rc << std::endl;// error = 1 std::cout << sqlite3_errmsg(db) << std::endl; // er-msg = library routine called out of sequence } rc = sqlite3_step(stmt); if(rc != SQLITE_DONE) { std::cout << rc << endl; } sqlite3_finalize(stmt); } int main(int argc,char *argv[]) { string dbName = "001Database.sql"; string sql_param_tblName = "CREATE TABLE name(n_id INTEGER PRIMARY KEY, title TEXT, fname TEXT, mname TEXT, lname TEXT)"; mySQLite3Class *myDB = new mySQLite3Class(dbName); myDB->createTable(sql_param_tblName); return 0; } Michael D. Black Senior Scientist Advanced Analytics Directorate Advanced GEOINT Solutions Operating Unit Northrop Grumman Information Systems From: sqlite-users-boun...@sqlite.org [sqlite-users-boun...@sqlite.org] on behalf of Arbol One [arbol...@gmail.com] Sent: Monday, July 23, 2012 1:54 PM To: SqLite Subject: EXT :[sqlite] C++ - Creating Table Using SQLite version 3.7.8 amalgamation, under Win7 with MinGW, I compile the bellow program, but for some strange reason I am getting a runtime error when creating the table. I hope that one of you would be able to tell me what I am doing wrong. TIA === class mySQLite3Class { private: //SQLite3 sqlite3* db; //SQLite3 Glib::ustring dbName; // Database name Glib::ustring apstr; // All Purpose String Glib::ustring sql_param_tblName; // Databese table Name parameters Glib::ustring stmtName; // SQL statement name public: void createDB(); void create_tblName(); mySQLite3Class(const Glib::ustring& s){ createDatabase(s);} }; void mySQLite3Class::createDatabase(const Glib::ustring& s) { rc = sqlite3_open_v2(s.c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if(rc != SQLITE_OK) { std::cout << rc << std::endl; } } void mySQLite3Class::createTable(const Glib::ustring& s){ rc = sqlite3_prepare_v2(db, s.c_str(), s.length(), &stmt, NULL ); if(rc != SQLITE_OK) { std::cout << rc << std::endl;// error = 1 std::cout << sqlite3_errmsg(db) << std::endl; // er-msg = library routine called out of sequence } rc = sqlite3_step(stmt); if(rc != SQLITE_DONE) { std::cout << rc << stdl; } sqlite3_finalize(stmt); } myClass{ private: mySQLite3Class* myDB; Glib::ustring sql_param_tblName; Glib::ustring dbName; public: myClass(); } myClass::myClass(){ dbName = "001Database.sql"; sql_param_tblName = "CREATE TABLE name(n_id INTEGER PRIMARY KEY, title TEXT, fname TEXT, mname TEXT, lname TEXT)"; myDB = new mySQLite3Class(dbName); myDB->createTable(sql_param_tblName); ==> // problem } _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users