MySQL i C++

0

Mam następujący problem. Otóż postawiłem sobie serwer MySQL i robię mały programik - taki do nauki dla siebie - w którym mogę połączyć się z tą bazą danych problem polega na tym, że korzystam z Visual 2012 Express, a wszystkie biblioteki są na najdalej 2010 ;/ i 2012 ma problemy (albo ja coś źle robię) . I mam do was prośbę jakby ktoś umiał krok po kroku pokazać mi, ew dać jakiś film jak dodać bibliotekę tak abym umiał korzystać z MySQL w języku C++ ?? System Laptopa: Windows 7 x64. (Programowanie na linuxie na razie nie teraz bo muszę się trochę podszkolić w kwestii linuxa (umiem tylko podstawy))

Jestem początkującym w tej kwestii i niestety nie za bardzo się na tym znam :/ .

0

Z jakiej biblioteki korzystasz to obsługi mysql?

0

Biblioteki do MySQL mam stąd:
http://tangentsoft.net/mysql++/

Czytam artykuł:
http://armanos.wordpress.com/2011/04/06/jak-polaczyc-sie-z-serwerem-mysql-z-poziomu-c/

tylko nie umiem tych plików po pobraniu skompilować :/

0

Co to znaczy, że nie umiesz skompilować biblioteki?

0

Tzn. Mam ją w folderze ale nie umiem jej w ogóle odpalić :/ ani z niej korzystać ani nic...

1

Jeśli masz tylko źródła, to przede wszystkim budujesz z nich bibliotekę.
Jak już to zrobisz (bądź masz już *.lib i pliki nagłówkowe), to w VS jako ścieżkę includa podajesz katalog główny plików nagłówkowych biblioteki, a do libów dołączasz potrzebne biblioteki + również wskazujesz do nich ścieżkę.

0

Poddaje się nie umiem tego zrobić :/
Mam *.lib i wpisuje w ustawieniach projektu przeciągam a ten dalej sypie, że źle :/ Umiecie mi całkowicie pomóc od podstaw bo to mi wgl. nie wychodzi :/
Jakby ktoś umiał mi całkiem banalnie wytłumaczyć (oczywiście wiem, że są święta, ale jak ktoś by miał czas) :/ (od momentu skąd pobrać najlepiej)

1

Czemu po prostu nie użyjesz Connectora z http://dev.mysql.com/downloads/connector/cpp/ i go nie zainstalujesz.

0

Zainstalowałem go, tylko nie wiem jak z niego korzystać :/

1
liske1 napisał(a):

Jakby ktoś umiał mi całkiem banalnie wytłumaczyć (oczywiście wiem, że są święta, ale jak ktoś by miał czas) :/ (od momentu skąd pobrać najlepiej)

OK.
MySQL dla opornych :)
Nigdy nie korzystałem z MySQL C++ connector'a. Mogę Ci wytłumaczyć jak podłączyć C connector to to samo, ale nie obiektowo (przypuszczam, że do C++ przerobili na obiekty).

  1. Paczka do MySQL
    Najlepiej ściągnij z oficjalnej strony.
    Tutaj masz instalator do absolutnie wszystkiego (polecam):
    http://dev.mysql.com/downloads/installer/
    W kreatorze wyklikasz co i gdzie chcesz instalować
    Jeśli chcesz tylko bibliotekę to do C masz link:
    http://dev.mysql.com/downloads/connector/c/
    Wybierz paczkę ZIP i ważne NIE VS2005!

  2. Wypakuj gdzie chcesz.

  3. Podłączenie do projektu jest banalne.
    Wystarczy że wkleisz w jakimś pliku nagłówkowym swojego projektu ten kod:

#include <Windows.h>
#include "ścieżka_do_biblioteki\mysql.h"

#pragma once( lib, "ws2_32.lib" )
#pragma once( lib, "ścieżka_do_biblioteki\mysql.lib" )

MySQL wymaga/wymagał do działania na Windows biblioteki Winsock więc może dlatego Ci nie działało.

1

Kiedyś napisałem mały wrapper do obsługi MySQL w C++. Nie gwarantuję że nie ma błędów, używałem tego krótko, w tym czasie wszystko było ok. Potrzebne pliki w załączniku. Podpinasz database.h dyrektywą include i używasz. Przykład użycia:

database db;
if(db.Initialize() != 0)
	return 1;

if(db.Connect("testowa", "root") != 0)
	return 2;

std::string query = "SELECT * FROM account";
if(db.Query(query.c_str()) != 0)
	return 3;

for(int i = 0; i < db.results.size(); i++)
{
	for(int k = 0; k < db.results[i].size(); k++)
		printf("|%s|\t", db.results[i][k].c_str());
	printf("\n");
}


db.Disconnect();
printf("DONE!");

Interfejs(database.h):

 
#pragma once

#include <winsock.h>
#include "mysql.h"
#include <vector>
#include <string>

class database
{
	MYSQL mysql_handle;
	bool initialized;
	bool connected;

public:
	std::vector< std::vector<std::string> > results;
	int Initialize();
	int Connect(const char* database, const char* user, const char* password = "", const char* IP = "127.0.0.1");
	int Query(const char* query); 
	int Disconnect();		
	char* LastError();

	bool Initialized() { return initialized; }
	bool Connected() { return connected; }

	database(void);
	~database(void);
};
0

Jest Udało się :) tzn. nie wiem czy do końca ale robiłem wg. tego poradnika: http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html (działa na visual 2012) i dałem
#include <mysql.h>
i przeszedł kompilacje i uruchomił się -> W projekcie mam tylko main.cpp :)

Czy to oznacza, że wszystko działa jak należy ??

0

Jeśli nie podlinkowałeś libów to nie będzie działać. Skoro jechałeś zgodnie z tym tutkiem to min. zlinkowałeś liby, więc powinno być ok.

0

Coś zrobiłem źle bo mi prosty kod:

 #include <stdio.h>
#include <mysql.h>

int main() {
    MYSQL mysql;

    return 1;
}

wywala błędy

Błąd	1	error C2146: syntax error : missing ';' before identifier 'fd'	c:\program files\mysql\include\mysql_com.h
Błąd	2	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files\mysql\include\mysql_com.h
Błąd	3	error C2065: 'SOCKET' : undeclared identifier	c:\program files\mysql\include\mysql_com.h
Błąd	4	error C2146: syntax error : missing ')' before identifier 's'	c:\program files\mysql\include\mysql_com.h
Błąd	5	error C2059: syntax error : ')'	c:\program files\mysql\include\mysql_com.h

OK Zadziałało wystarczyło dodać bibliotekę: Winsock.h i przekompilował już to :)

0

Mam taki problem:
robię wg. poradnika http://armanos.wordpress.com/2011/04/06/jak-polaczyc-sie-z-serwerem-mysql-z-poziomu-c/

i mam następujący kod:

#include <iostream>
#include <fstream>
#include <string>
#include <winsock.h>
#include <Windows.h>
#include <mysql.h>
#include <winsock.h>


using namespace std;

static char *sql_host = "192.168.1.31";  /* host serwera MySQL */
static char *sql_username = "liske1";  /* nazwa loginu by połączyć się do serwera */
static char *sql_password = "passwd";       /* hasło */
static char *sql_base = "sklep";       /* nazwa bazy */
static unsigned int sql_port = NULL;  /* port na jakim odbiera/wysyła serwer mysql */
static char *opt_socket = NULL;       /* socket name */
static char *sql_db_name = "sklep";   /* database name */
static unsigned int sql_flags = 0;
static MYSQL *conn;                   /* Wskaźnik do połączenia do MySQL */

int main()
{
	conn = mysql_init (NULL);
	mysql_real_connect (conn, sql_host, sql_username, sql_password, sql_base, sql_port, opt_socket, sql_flags);
	cin.ignore();cin.get();
} 

a visual daje error:

Błąd	1	error LNK2001: unresolved external symbol _mysql_real_connect@32	D:\Programowanie\C++\Projekty\Sklep\Sklep\main.obj	Sklep
Błąd	2	error LNK2001: unresolved external symbol _mysql_init@4	D:\Programowanie\C++\Projekty\Sklep\Sklep\main.obj	Sklep
Błąd	3	error LNK1120: 2 unresolved externals	D:\Programowanie\C++\Projekty\Sklep\Release\Sklep.exe	Sklep

Czy jest coś źle z plikiem mysql.h czy to wina programu ?? Bo teraz nie jestem pewny , który ma błąd

1

MySQL ma w komplecie przykłady, może zacznij od nich. Tam dokładnie wytłumaczono co i jak trzeba dodać jakieś 5 wersji dla różnych IDE.

0

Ten problem został rozwiązany:
Wystarczyło zmienić w ustawieniach kompilatora na x64 a nie że ma kompilować jako program 32-bit . Dziękuję wam wszystkim za pomoc :) Jak coś będzie dalej nie tak to będę pisać :)
oraz trzeba było dodać 2 linijki:

#pragma comment(lib, "libmysql")
#pragma comment(lib, "mysqlclient")

================ DODANO ========================
Jeszcze trzeba dodać bibliotekę libmysql.dll do pliku gdzie znajduje się projekt i wtedy mamy całkowicie wszystko działa bez zarzutów

Życzę Wam Wesołych Świąt oraz Miłego kodowania bez błędów :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1