Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Selecting data from mysql using qt?



  • Do it this way, then it will prompt for a password:

    @/opt/lampp/bin/mysql -D testTwo -h localhost -u root -p
    @



  • i got a big ouput here but i have not seen any errors in this. when i try to post whole output this forum didnt allow me to post more than 6000 characters



  • Cut it into pieces or use something like pastebin.



  • ok here it is
    @
    root@zafar-laptop:/# /opt/lampp/bin/mysql -u root -p 123456 testTwo
    /opt/lampp/bin/mysql Ver 14.14 Distrib 5.1.41, for pc-linux-gnu (i686) using EditLine wrapper
    Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license
    Usage: /opt/lampp/bin/mysql [OPTIONS] [database]
    -?, --help Display this help and exit.
    -I, --help Synonym for -?
    --auto-rehash Enable automatic rehashing. One doesn't need to use
    'rehash' to get table and field completion, but startup
    and reconnecting may take a longer time. Disable with
    --disable-auto-rehash.
    -A, --no-auto-rehash
    No automatic rehashing. One has to use 'rehash' to get
    table and field completion. This gives a quicker start of
    mysql and disables rehashing on reconnect. WARNING:
    options deprecated; use --disable-auto-rehash instead.
    -B, --batch Don't use history file. Disable interactive behavior.
    (Enables --silent)
    --character-sets-dir=name
    Directory where character sets are.
    --column-type-info Display column type information.
    -c, --comments Preserve comments. Send comments to the server. The
    default is --skip-comments (discard comments), enable
    with --comments
    -C, --compress Use compression in server/client protocol.
    -#, --debug[=#] This is a non-debug version. Catch this and exit
    --debug-check Check memory and open file usage at exit.
    -T, --debug-info Print some debug info at exit.
    -D, --database=name Database to use.
    --default-character-set=name
    Set the default character set.
    --delimiter=name Delimiter to be used.
    -e, --execute=name Execute command and quit. (Disables --force and history
    file)
    -E, --vertical Print the output of a query (rows) vertically.
    -f, --force Continue even if we get an sql error.
    -G, --named-commands
    Enable named commands. Named commands mean this program's
    internal commands; see mysql> help . When enabled, the
    named commands can be used from any line of the query,
    otherwise only from the first line, before an enter.
    Disable with --disable-named-commands. This option is
    disabled by default.
    -g, --no-named-commands
    Named commands are disabled. Use * form only, or use
    named commands only in the beginning of a line ending
    with a semicolon (;) Since version 10.9 the client now
    starts with this option ENABLED by default! Disable with
    '-G'. Long format commands still work from the first
    line. WARNING: option deprecated; use
    --disable-named-commands instead.
    -i, --ignore-spaces Ignore space after function names.

    @



  • @
    --local-infile Enable/disable LOAD DATA LOCAL INFILE.
    -b, --no-beep Turn off beep on error.
    -h, --host=name Connect to host.
    -H, --html Produce HTML output.
    -X, --xml Produce XML output
    --line-numbers Write line numbers for errors.
    -L, --skip-line-numbers
    Don't write line number for errors. WARNING: -L is
    deprecated, use long version of this option instead.
    -n, --unbuffered Flush buffer after each query.
    --column-names Write column names in results.
    -N, --skip-column-names
    Don't write column names in results. WARNING: -N is
    deprecated, use long version of this options instead.
    -O, --set-variable=name
    Change the value of a variable. Please note that this
    option is deprecated; you can set variables directly with
    --variable-name=value.
    --sigint-ignore Ignore SIGINT (CTRL-C)
    -o, --one-database Only update the default database. This is useful for
    skipping updates to other database in the update log.
    --pager[=name] Pager to use to display results. If you don't supply an
    option the default pager is taken from your ENV variable
    PAGER. Valid pagers are less, more, cat [> filename],
    etc. See interactive help (\h) also. This option does not
    work in batch mode. Disable with --disable-pager. This
    option is disabled by default.
    --no-pager Disable pager and print to stdout. See interactive help
    (\h) also. WARNING: option deprecated; use
    --disable-pager instead.
    -p, --password[=name]
    Password to use when connecting to server. If password is
    not given it's asked from the tty.
    -P, --port=# Port number to use for connection or 0 for default to, in
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/services, built-in default (3306).
    --prompt=name Set the mysql prompt to this value.
    --protocol=name The protocol of connection (tcp,socket,pipe,memory).
    -q, --quick Don't cache result, print it row by row. This may slow
    down the server if the output is suspended. Doesn't use
    history file.
    -r, --raw Write fields without conversion. Used with --batch.
    --reconnect Reconnect if the connection is lost. Disable with
    --disable-reconnect. This option is enabled by default.
    -s, --silent Be more silent. Print results with a tab as separator,
    each row on new line.
    -S, --socket=name Socket file to use for connection.
    --ssl Enable SSL for connection (automatically enabled with
    other flags). Disable with --skip-ssl.
    --ssl-ca=name CA file in PEM format (check OpenSSL docs, implies
    --ssl).
    --ssl-capath=name CA directory (check OpenSSL docs, implies --ssl).
    --ssl-cert=name X509 cert in PEM format (implies --ssl).
    --ssl-cipher=name SSL cipher to use (implies --ssl).
    --ssl-key=name X509 key in PEM format (implies --ssl).
    --ssl-verify-server-cert
    Verify server's "Common Name" in its cert against
    hostname used when connecting. This option is disabled by
    default.
    -t, --table Output in table format.
    --tee=name Append everything into outfile. See interactive help (\h)
    also. Does not work in batch mode. Disable with
    --disable-tee. This option is disabled by default.
    --no-tee Disable outfile. See interactive help (\h) also. WARNING:
    option deprecated; use --disable-tee instead
    -u, --user=name User for login if not current user.
    -U, --safe-updates Only allow UPDATE and DELETE that uses keys.
    -U, --i-am-a-dummy Synonym for option --safe-updates, -U.
    -v, --verbose Write more. (-v -v -v gives the table output format).
    -V, --version Output version information and exit.
    -w, --wait Wait and retry if connection is down.
    --connect_timeout=# Number of seconds before connection timeout.
    --max_allowed_packet=#
    Max packet length to send to, or receive from server
    --net_buffer_length=#
    Buffer for TCP/IP and socket communication
    --select_limit=# Automatic limit for SELECT when using --safe-updates
    --max_join_size=# Automatic limit for rows in a join when using
    --safe-updates
    --secure-auth Refuse client connecting to server if it uses old
    (pre-4.1.1) protocol
    --server-arg=name Send embedded server this as a parameter.
    --show-warnings Show warnings after every statement.

    Default options are read from the following files in the given order:
    /etc/xampp/my.cnf /opt/lampp/etc/my.cnf ~/.my.cnf
    The following groups are read: mysql client
    The following options may be given as the first argument:
    --print-defaults Print the program argument list and exit
    --no-defaults Don't read default options from any options file
    --defaults-file=# Only read default options from the given file #
    --defaults-extra-file=# Read this file after the global files are read

    @



  • @
    Variables (--variable-name=value)
    and boolean options {FALSE|TRUE} Value (after reading options)


    auto-rehash FALSE
    character-sets-dir (No default value)
    column-type-info FALSE
    comments FALSE
    compress FALSE
    debug-check FALSE
    debug-info FALSE
    database (No default value)
    default-character-set latin1
    delimiter ;
    vertical FALSE
    force FALSE
    named-commands FALSE
    ignore-spaces FALSE
    local-infile FALSE
    no-beep FALSE
    host (No default value)
    html FALSE
    xml FALSE
    line-numbers TRUE
    unbuffered FALSE
    column-names TRUE
    sigint-ignore FALSE
    port 3306
    prompt mysql>
    quick FALSE
    raw FALSE
    reconnect TRUE
    socket /opt/lampp/var/mysql/mysql.sock
    ssl FALSE
    ssl-ca (No default value)
    ssl-capath (No default value)
    ssl-cert (No default value)
    ssl-cipher (No default value)
    ssl-key (No default value)
    ssl-verify-server-cert FALSE
    table FALSE
    user root
    safe-updates FALSE
    i-am-a-dummy FALSE
    connect_timeout 0
    max_allowed_packet 16777216
    net_buffer_length 16384
    select_limit 1000
    max_join_size 1000000
    secure-auth FALSE
    show-warnings FALSE

    @



  • Hm, apparently mysql is rather strict in terms of specifying parameters. Try to follow ¤ Dii ¤'s instructions.



  • whats Dii and where are these instructions?



  • Here is his post.

    [quote author="¤ Dii ¤" date="1286874970"]Do it this way, then it will prompt for a password:

    @/opt/lampp/bin/mysql -D testTwo -h localhost -u root -p
    @
    [/quote]



  • lol, don't be write only :)

    /opt/lampp/bin/mysql -D testTwo -h localhost -u root -p



  • BTW if you do this, AND it's working, you end up in mysql command line interface, you can get out with 'exit'



  • sorry i couldnt notice Dii user



  • Wow, mysql is full of surprises. Never got those with psql. ¤ Dii ¤, does it have \q command?



  • yes i get into mysql command line



  • whats the reason that my database is not opening in qt?



  • lyuts: yes \q is working too

    doforumda: ok, so get into the mysql comand line with the command above

    /opt/lampp/bin/mysql -D testTwo -h localhost -u root -p

    and then do this:

    grant all on testTwo.* to 'root'@'localhost' ;

    Then we have a working mysql, and the rights are granted, we can get back to your Qt program.



  • I hope the next post will be like "Hooray, I got it working!!!" :)



  • there is an error in sql syntax
    @
    mysql> grant all on testTwo.* to ‘root’@’localhost’;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '��root’@’localhost’' at line 1
    @



  • Ok, back to your Qt program:

    @#include <QApplication>
    #include <QtSql>

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("testTwo");
    db.setUserName("root");
    db.setPassword("");
    db.setHostName("localhost");
    
    bool ok = db.open();
    qDebug() << ok;
    
    QSqlQuery query;
    query.exec&#40;"SELECT firstname,lastname FROM testTable"&#41;;
    while(query.next()) {
        QString firstName = query.value(0).toString();
        QString secondName = query.value(1).toString();
        qDebug() << "First Name: " << firstName << "Last Name:" << secondName;
        qDebug() << db.lastError();
    }
    return 0;
    

    }@

    Notice, we don't set a password here.
    The end is 'return 0' instead of 'a.exec()', and it won't hang. The exec() starts the main event loop, and you don't use it here...



  • I think you need to check apostrophes in that command.



  • ok, you have wrong apostrof type there. I mean this >> '



  • i tried without apostrophes as well but same error



  • nope, you had ` before the root and not '
    that was the error



  • ok, wait a second, I checked it in the meantime and it won't work without password, stay tuned, I post the right command



  • you mean like this
    grant all on testTwo.* to root@localhost ;
    if yes it also displaying same error



  • so, here we go:

    grant all on testTwo.* to 'root'@'localhost' identified by 'password';

    Make the right apostrophes! :) You have to set the password in your Qt app too.



  • ok, wait I see



  • the Devnet's forum motor changes the apostrophes somehow... use the straight apostrophes everywhere
    I mean this @'@



  • mysql query did its job its now successful but when i use qt code and try to make it run it displays same error

    @
    Starting /home/zafar/c++/dbExample-build-desktop/dbExample...
    false
    QSqlQuery::exec: database not open
    /home/zafar/c++/dbExample-build-desktop/dbExample exited with code 0
    @



  • wait i think the query is not sucessful because it displays this message 0 rows affected
    @
    mysql> grant all on testTwo.* to 'root'at'localhost' identified by 'password';
    Query OK, 0 rows affected (0.01 sec)
    @



  • Add this to your code after connecting:

    @qDebug() << db.lastError().text();@

    And tell us what the error is.



  • [quote author="doforumda" date="1286877766"]wait i think the query is not sucessful because it displays this message 0 rows affected
    @
    mysql> grant all on testTwo.* to 'root'at'localhost' identified by 'password';
    Query OK, 0 rows affected (0.01 sec)
    @[/quote]

    Did you run that command with 'password' instead of '123456'?



  • 0 rows is just fine with the grant command... have you set the password on

    @db.setPassword("password");@

    ?



  • this is the output after adding lastError.text()
    @
    Starting /home/zafar/c++/dbExample-build-desktop/dbExample...
    " "
    false
    QSqlQuery::exec: database not open
    /home/zafar/c++/dbExample-build-desktop/dbExample exited with code 0
    @

    lyut: yes i use command with 'password' not '123456'

    Dii sorry i didnt understand this db.setPassword("password");
    where should i set this



  • [quote author="doforumda" date="1286878193"]
    lyut: yes i use command with 'password' not '123456'

    Dii sorry i didnt understand this db.setPassword("password");
    where should i set this[/quote]

    1. I assume you should have specified the actual password when running that query.
    2. @db.setPassword("password");@ should be added to your source code just where you set db options.


  • i ran query again with actual password
    i have already setup password in my qt code here it is
    @
    #include <QApplication>
    #include <QtSql>

    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("testTwo");
    db.setUserName("root");
    db.setPassword("123456");
    db.setHostName("localhost");
    
    qDebug() << db.lastError().text();
    
    bool ok = db.open();
    qDebug() << ok;
    
    QSqlQuery query;
    query.exec&#40;"SELECT firstname,lastname FROM testTable"&#41;;
    while(query.next()) {
        QString firstName = query.value(0).toString();
        QString secondName = query.value(1).toString();
        qDebug() << "First Name: " << firstName << "Last Name:" << secondName;
        qDebug() << db.lastError();
    }
    return 0;
    

    }

    @



  • db.lasterror().text() should come after line 16 (db.open()).
    The password in the Qt code must be the same what you have specified in the GRANT command above.

    I suspect probably, you haven't made the database and the table in mysql yet, if you go back to mysql command line, what do you get by these commands:

    @SHOW databases;

    USE testTwo;

    SHOW tables;@

    I go to dinner, be back in a few minutes :)



  • You put my debug before opening the connection. Put it after.



  • i changed db.lastError().text(); and place it after db.open()
    this is the output
    @
    Starting /home/zafar/c++/dbExample-build-desktop/dbExample...
    "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) QMYSQL: Unable to connect"
    false
    QSqlQuery::exec: database not open
    /home/zafar/c++/dbExample-build-desktop/dbExample exited with code 0
    @

    the commands in mysql displayed are here
    repectively to your commands

    @
    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | cdcol |
    | mysql |
    | phpmyadmin |
    | test |
    | testTwo |
    +--------------------+
    6 rows in set (0.01 sec)

    mysql> use testTwo
    Database changed
    mysql> show tables
    -> ;
    +-------------------+
    | Tables_in_testTwo |
    +-------------------+
    | testTable |
    +-------------------+
    1 row in set (0.01 sec)

    @



  • any clues?


Log in to reply