I am learning to work with mysql and c++ in ubuntu os. There are several tutorials on how to interface mysql with c++ in visual studio or in windows, but not one for Linux. Mysql website also does not describe properly on this.
Can anyone suggest me a link to tutorial, book or any thing that gives information an how to interface c++ with mysql in Linux. My database is in linux machine itself.
Thanks for the great help.
Mysql is a database, and to gain access to the data within C++ you will need to be able to “talk” to the database via queries (just like on the mysql command line interface e.g. select * from tablename), the connection process is very similar to the command line interface you will need to supply connection details as in hostname (localhost normally), username, password, database to use and also there are other details that you can pass e.g port number more information can be gained from the MYSQL API pages.
This link has a good example
Connect mysql in c++ for unix
Related
I have some C++ code that connects to a remote database to obtain some data.
But now I'm trying to make the whole system work inside a docker container and I'm having problems, specially because I don't know a lot about connections, network communication, etc.
I basically have a "connectionString" with all the information, host, port, user, password, etc. The host adress is like example.host.adress and when I execute it I get this error:
Error: Can't connect to MySQL server on 'example.host.adress' (110)
I already had problems using apt-get with docker and I managed to solve it with this solution: https://stackoverflow.com/a/51089399/3848742 (the 16.04 fix).
But now I'm having this and I've reading some people with similar problems but I can't get it to work, does anyone know if it's even possible to perform this kind of things, and if so, what could I do to fix it?
Thanks a lot for your time
Some Background -
I have written a C program on the TS-7800 (running Debian Linux) which I access through Putty. The program is essentially in charge of controlling DAC/ADC's in order to modify the state of a memory element.
My next task is to develop a GUI for that program. The GUI is built using Microsoft Visual Studio 2010 in C++. I've made most of the GUI and simply need a way to send the data which I collect to the Linux machine.
My first attempt was to invoke a connection with Putty through command line from the GUI, and then try to send various commands through that Putty connection. The drawback here is that once I invoke a connection with Putty using the command putty username#192.168.1.50, it is done in the foreground, rather then hidden in the background, and I don't know how to continue entering text/commands from the GUI into Putty once it has been launched.
My Question -
How should I go about connecting my GUI on Windows to the program on the Linux machine? Is my attempt with Putty a step in the right direction, or should I be taking a different approach - possibly Cygwin?
Thank you in advance for any help - this is my first post on stackoverflow so please forgive me if I've mistakenly overlooked some detail or if I did not abide by proper etiquette.
You have to follow some protocol to interact with the server. Then your GUI needs to follow that protocol to send commands to the server.
Probably, you are talking about SSH connection with server. There are a lots of SSH Client library available in windows. You can use one in your GUI to interact.
Try taking a look at Boost ASIO. It's a very solid asynchronous IO library included in boost. (You will need to build it however).
I want to run Linux command remotely from Window based Qt C++ application programmatically. What is the simpliest way to do it?
You need some sort of server on the Linux machine and your Windows machine will be a client. I'd say the easiest way would be just make a php script to run your command and drop it in your www root and have your Windows machine fetch that URL.
At the end of the day, without knowing what your requirements are with regard to security and with regard to what kind of commands you'll be running is, it's very difficult to give a definitive answer to this question.
Simply connect to telnet server on the linux using sockets, and send the commands.
This actually requires very little code. Check the Java version here:
Sending telnet commands and reading the response with Java
You can do similarly with Qt/C++ as well.
Simple server-side program witch will handle the requests and then using ex system() function will be this "remotely" part of solution.
And on client-side simple text field handled by function witch will be able to connect to server to send command run request.
The most important thing in this solution will be to take care about security.
One way to do it is, to have a client-server model, the server resides in linux and client can be your computer. That way you can send commands to the server and have its output thrown at you. That's one way I think of this problem.
Use UPnP to get past the firewall(or use NAT traversal or UDP/TCP hole punching). Otherwise (without forwarding the port) it would be impossible to reach the server.
The second is to write your own RSH and SSH utility. (or use putty or other pre-existing software)
You could use Plink if you are on Windows whatever version. If you can run PuTTY, then you can run PLink. PuTTY Plink Documentation. Using that you could use the executable, and automate things. Otherwise, if you're looking for a specific programming language, they'd still be dependent upon some SSH Library. If you're writing your own installer, you could include the PLink.exe in your installer, and distribute it with your application.
From the documentation page:
Z:\sysosd>plink login.example.com 'echo "Hello World"'
Ok guys, I've been trying to get this working for a few weeks in my spare time, and all day today, and I have nothing to show for it, so here's my question.
First off, the end goal for this is to read and write basic information (id #s, names, etc.) from a remote mysql database, to a C++ program written in Visual Studio 2010 Pro, or something equivalent (and free). I access the server from my laptop with SSH, and I can call family members to mess with router settings and such.
I'm trying to use a MySQL database on a Ubuntu Server machine that I access remotely from a Windows 7 laptop. I have installed MySQL Connector C++ from the MySQL website (the msi installer). NOTE: I have not done anything with the Connector install except run the exe I downloaded. Didn't think I needed to compile anything, but I'm wrong a lot. I have created a database, a user who has privileges to the database, and this user can (in theory) connect from any ip, because it is declared as 'username#'%'. I also changed the my.cnf file so that the bind-address line is commented out. I used 'mysqladmin ping -h serveraddress -u username -p' and that gave me 'mysqld is alive', so I'm assuming the database is accessible from any ip remotely. So, I opened up VS 2010 Pro, made a new project, went to tools, and then 'Connect To Database'. I selected Microsoft MySQL Server and put in the information exactly as I did for mysqladmin. I clicked Test Connection and I get an error box that ends with 'provider: Named Pipes Provider, error 40 - Could not open a connection to SQL Server'. Sorry for the block of text, just want to give all the details I can.
Hopefully I'm close to making this work, I'm not pressed for time but I'm really tired of not being able to work on anything else in the project, since it all branches from this database connection.
Thanks you all! I'll reply with whatever you need me to during the day, I'm not much of a night owl anymore =)
UPDATE:
I have the sample code from the mysql site compiling correctly, it was just a matter of finally getting a few hours to sit down and fix linker/library errors one at a time, downloaded the boost libraries, and changed include directories to direct paths when I could get them to work correctly. Now all I need to do is learn how to use it lol
Thanks all!
Not sure if this is the problem but be sure to use the 32 bit ODBC Administrator if you are building a 32 bit application. If you are on a 64 bit PC, by default you are going to be using the 64 bit ODBC Administrator and consequently your 32 bit application won't actually see the DSN that you've created. Run the 32 bit ODBC Administrator using this path: C:\Windows\SysWOW64\odbcad32.exe and then create your DSN.
I'm pretty perplexed... I've got 5 different test computers, all relatively blank Windows XP machines running similar hardware specs. I run a silent install of the FireBird (Classic) database and my application. Some computers require "localhost:" (or 127.0.0.1) before the database location to make a connection, and some simply don't work at all! This is running the exact same software across the board. Does anybody have any suggestions as to what needs to happen to make the connection string universal, or what I could be doing wrong??
It's firebird version 2.1.1.17910 Classic
By the way, i tried connecting to the same database using FlameRobin (a small db management tool) and it worked just fine on the computers that don't connect.
Any more information necessary just let me know! Thanks a lot in advance
For anybody's future reference, the answer is in the services. Apparently it's not being registered as a service for some reason, and on the working computers, was at some point registered, probably through some sort of far earlier tests of Interbase is my best guess.
C:\Windows\System32\drivers\etc and opening up the file 'services' and adding the following line allows the server to run properly.
gds_db 3050/tcp
I'm not sure whether you are aware of that, but a connection string without "localhost:" or "127.0.0.1:" in front of the database name or alias will use the local protocol, which can't be used when connecting to Firebird Classic Server (see this link for more information). If a host name or IP address is given, then TCP port 3050 will be used for the connection.
If you have registered a server in FlameRobin, and did not leave the hostname field in the registration dialog blank, then the host name will be part of the connection string. That would explain why you can connect using FlameRobin.
As for the differences between the machines: You should first go to the Firebird Server Manager applet and make sure that the server is indeed running on all machines, and that the version is the same.
Does it have something to do with the hosts file on some of the computers? Or is that what you're referring to with your
Some computers require "localhost:" (or 127.0.0.1) before the database location...
comment?