February 11, 2011

pico pico
Lab Rat
28 posts

In window XP, I failed to open a database file comes from Android phone.

Page  
1

Hi, Sir: I got a database file comes from Android phone, and I tried to do something on this file. So, I implement an AP to handle this file.

My original code is developed on Ubuntu, and this AP works fine. Then, I move this codebase to Window XP, and use Qt-Window version to recompile it. Everything is OK until I try to execute this AP to open an existing database file.
  1.     QSqlDatabase db = QSqlDatabase::database(SESSION_NAME_SECOND);
  2.     if (db.isValid()) {
  3.         db.close();
  4.         QSqlDatabase::removeDatabase(SESSION_NAME_SECOND);
  5.     }
  6.  
  7.     //QMessageBox::warning(0,"Warning0",SESSION_NAME);
  8.     db = QSqlDatabase::addDatabase("QSQLITE", SESSION_NAME_SECOND);
  9.     db.setDatabaseName(fileName);
  10.  
  11.     QString msg = tr("Unable to open or create file %1. It is probably not a database").arg(QFileInfo(fileName).fileName());
  12.     if(!db.open())  {
  13.         QMessageBox::warning(0, "BatchWindow", msg);
  14.         return;
  15.     }
  16.     /* Qt database open() (exactly the sqlite API sqlite3_open16())
  17.        method does not check if it is really database. So the dummy
  18.        select statement should perform a real "is it a database" check
  19.        for us. */
  20.     _*QSqlQuery q("select 1 from sqlite_master where 1=2", db);*_
  21.     if (!q.exec())  {
  22.         *QMessageBox::warning(0, "DBList", msg);*__
  23.         return;
  24.     }   else    {
  25.         isOpened = true;
  26.    
When I try to use QSqlQuery and perform “exec()”, it would get failed. Then, post a warning dialog to show “Unable to open or create file XXX.db. It is probably not a database”. Could you tell me what I do wrong??? BR, Pico

19 replies

February 11, 2011

pico pico
Lab Rat
28 posts

Hi, Sir:

Could anyone help me to solve this issue?
I really need to port my AP on windowXP with Qt-SDK 4.7.

Thanks a lot.

BR,
Pico

February 11, 2011

Volker Volker
Robot Herder
5428 posts

Would you PLEASE be patient!
3 and half hours and you’re moaning about no response. You’re not serious, are you?

If you want to know what’s going on, call QSqlDatabase::lastError() [doc.qt.nokia.com] on your db on the open and QSqlQuery::lastError() [doc.qt.nokia.com] on the failed query. They will tell you what happened.

February 11, 2011

pico pico
Lab Rat
28 posts

Hi, Volker: Thanks for your reminders!! I am just too emotional…

And, after checking the error, it shows “No query Unable to fetch row”. But, I have no idea on why I get this error. Again, I have to say this AP works well under Ubuntu. So, Do I need to modify anything for that? Thanks a lot. BR, Pico

February 11, 2011

zester zester
Lab Rat
87 posts

Sounds like sqlite isn’t setup properly on windows. Is it only this database file or do others also give you problems?

February 11, 2011

Volker Volker
Robot Herder
5428 posts

pico wrote:
And, after checking the error, it shows “No query Unable to fetch row”.

But, I have no idea on why I get this error. Again, I have to say this AP works well under Ubuntu. So, Do I need to modify anything for that?

Is the database file available?
Is it in the right directory?
Is the sqlite version the same?

February 14, 2011

pico pico
Lab Rat
28 posts

Hi, Volker:

Volker wrote:

Is the database file available?
Is it in the right directory?
Is the sqlite version the same?

This database is OK to perform action on Ubuntu on the same codes. And, for the version, I have no many ideas on that. However, I think it is 3.6.22. In addition, opening the database seems no error… Thanks a lot. BR, Pico

February 14, 2011

Volker Volker
Robot Herder
5428 posts

No clue here what’s going wrong. I cannot even assure that the file is opened correctly.

Regearding sqlite version, its not the exact version but more a sqlite2 or sqlite3 question. Can you open the file with the sqlite command line tool?

February 15, 2011

pico pico
Lab Rat
28 posts

Hi, Volker: I also guess this is a sqlite question, however, I am not familiar with sqlite. And, I also download the sqlite command line tool to test it. It works well…

And, I also use some other commercial tool to open it. It is OK, too. In addition, I find a command “Repair” in a tool. If I do it on those database files, I can open them by Qt’s sql dll. So, I would like to know if Qt’s sqlite driver doesn’t have error tolerance on mismatched SQL files. If so, does it mean I have to use another sqlite driver? Thanks a lot. BR, Pico

February 15, 2011

Volker Volker
Robot Herder
5428 posts

If you use SQL databases, you should at least make yourself comfortable with using the command line tools.

Without the actual files I cannot comment any further. It’s completely unclear what’s going wrong.

February 17, 2011

pico pico
Lab Rat
28 posts

Hi, Volker: Is there anyway to send you the database file? Could you help me to check it? Because I use the sqlite tool downloaded from the SQL web, it works well.

So, I can not understand why I can not use the Qt’s SQL dll to handle that. Thanks a lot. BR, Pico

February 17, 2011

Andre Andre
Area 51 Engineer
6031 posts

Well, you could always put it up on one of the many free services for such things. Perhaps using dropbox in a public folder?
Please just post the link here, so others than just Volker can take a look at your issue if they are interested.

 Signature 

Looking for Qt developers to join our team @ i-Optics: https://qt-project.org/forums/viewthread/25393/

February 17, 2011

pico pico
Lab Rat
28 posts

Hi, Sir: The link to this database file is http://dl.dropbox.com/u/21382345/blake_cruiser.db If possible, please help me to know what I do wrong.

Thanks a lot. BR, Pico

[EDIT: fixed link, Volker]

February 17, 2011

Volker Volker
Robot Herder
5428 posts

I cannot open the database file on Ubuntu (sqlite 3.4.2 and 3.6.16) nor on Mac OS X (sqlite 3.6.12).

Is the OS/lib/program that creates the database file using some kind of encryption?

February 18, 2011

pico pico
Lab Rat
28 posts

Hi, Volker: This database file comes from Android phone. I just copy it out, and try to parse it.

But, I can use sqlite3_analyzer downloaded from “www.sqlite.org” to open it. So, I guess this might be related to version. If so, could you give me a piece of advice to solve the version issue? For example, could I get the updated library from Qt’s web for SQL? Or, something like that… BR, Pico

February 18, 2011

Volker Volker
Robot Herder
5428 posts

Ok, problem found: The SQLite version in Android is newer than that bundled with Qt. Actual problem is, that it is too new and contains a WAL feature [sqlite.org] that older versions cannot deal with.

  • Android has SQLite 3.7.x
  • Qt 4.7.1 has SQLite 3.6.19

I can easily change a working database file to be locked out of a 3.6.x client by changing that mentioned WAL flag.

The good news is: You can build the SQLite plugin of Qt with a newer version of SQLite. The docs have instructions on how to do this in section QSQLITE for SQLite [doc.qt.nokia.com] of the SQL Database Drivers [doc.qt.nokia.com] page. Just use the newest SQLite version from the webpage.

On Jira, there is an open bug report QTBUG-16607 [bugreports.qt.nokia.com] which requests an update of the built in SQLite version to 3.7.x. You can vote for it, this may accelerate it a bit.

Page  
1

  ‹‹ UDP Multicast      change item’s color in table-view on click ››

You must log in to post a reply. Not a member yet? Register here!