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



  • 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.

    @
    QSqlDatabase db = QSqlDatabase::database(SESSION_NAME_SECOND);
    if (db.isValid()) {
    db.close();
    QSqlDatabase::removeDatabase(SESSION_NAME_SECOND);
    }

    //QMessageBox::warning(0,"Warning0",SESSION_NAME);
    db = QSqlDatabase::addDatabase("QSQLITE", SESSION_NAME_SECOND);
    db.setDatabaseName(fileName);
    
    QString msg = tr("Unable to open or create file %1. It is probably not a database").arg(QFileInfo(fileName).fileName());
    if(!db.open())  {
        QMessageBox::warning(0, "BatchWindow", msg);
        return;
    }
    /* Qt database open() (exactly the sqlite API sqlite3_open16())
       method does not check if it is really database. So the dummy
       select statement should perform a real "is it a database" check
       for us. */
    _*QSqlQuery q("select 1 from sqlite_master where 1=2", db);*_
    if (!q.exec())  {
        *QMessageBox::warning(0, "DBList", msg);*__
        return;
    }   else    {
        isOpened = true;
    

    @

    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



  • 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



  • 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() ":http://doc.qt.nokia.com/latest/qsqldatabase.html#lastError on your db on the open and "QSqlQuery::lastError() ":http://doc.qt.nokia.com/latest/qsqlquery.html#lastError on the failed query. They will tell you what happened.



  • 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



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



  • [quote author="pico" date="1297428894"] 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?
    [/quote]

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



  • Hi, Volker:

    [quote author="Volker" date="1297464678"]

    Is the database file available?
    Is it in the right directory?
    Is the sqlite version the same?
    [/quote]

    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



  • 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?



  • 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



  • 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.



  • 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



  • 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.



  • 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]



  • 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?



  • 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



  • 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":http://www.sqlite.org/wal.html 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 (Version 3 and Above)":http://doc.qt.nokia.com/4.7/sql-driver.html#qsqlite of the "SQL Database Drivers":http://doc.qt.nokia.com/4.7/sql-driver.html page. Just use the newest SQLite version from the webpage.

    On Jira, there is an open bug report "QTBUG-16607":http://bugreports.qt.nokia.com/browse/QTBUG-16607 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.



  • Hi, Volker:
    I really appreciate your great help.
    What you said make me know lots of things about database file.

    Thanks a lot.

    BR,
    Pico



  • Hi, Volker:
    Although I followed what you showed to me, I failed to generate a QtSql4.dll.
    I could get libqsqlite4.a, qsqlite4.dll, and something else.
    However, I can still NOT make a sql query successfully.

    Could you give me more details for how to build a new sql driver and install it?

    Thanks a lot.

    BR,
    Pico



  • It could be, that your application grabs an old version of the plugin. Make sure, that
    "QCoreApplication::addLibraryPath() ":http://doc.qt.nokia.com/4.7/qcoreapplication.html#addLibraryPath

    You can check the version of the used SQLite with

    @
    select sqlite_version();
    @

    Issue this in your program and check that you actually use the newly built plugin, not the old one.



  • Just for the records, if anyone stumbles over this old thread: In the recent release 4.8 of Qt the included SQLite has been updated to version 3.7.7.1.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.