Jak przekazać identyfikator połączenia do bazy

0

Stworzyłem sobie testowa klasę. Chcę ten plik dołączyć do głównego programu i wywoływać obiekt w wątku , żeby na nim pracować przy wrzucaniu danych. I teraz tak pomyślałem , że zrobie taki konstruktor łączący się z bazą i potrzebuje ten identyfikator przekazać do kolejnych funkcji które by wstawiały lub wyjmowały dane. Klasa wygląda tak:

 
#include <pqxx/pqxx> //postgresql
using namespace pqxx;
		
class db {
       
	public:
	string conn;
	db();
	void show();

};


db::db() {
	try {
		connection conn("dbname=abc user=postgres password=postgress hostaddr=127.0.0.1 port=5432"); 
		cout << "konstruktor" << endl;
	} 
	catch(exception &e) {
    		cout << e.what() << endl;
	}
}


void db::show() {
	work trans(conn);
	result r = trans.exec("INSERT INTO status(name) VALUES('test')");
	trans.commit();
	cout << "show" << endl;
}

I teraz nie wiem jak do funkcji SHOW przekazać ten identyfikator : conn
A może cały ten pomysł nie jest dobry ?
Poradźcie coś...

0

Zmienna conn jest zmienną lokalną, zostanie zniszczona zaraz po zakończeniu konstruktora. Jak już to powinieneś przechowywać połączenie w jakiejś zmiennej w klasie.

Ogólnie to można do tego typu zastosowań zaprzągnąć wzorzec singleton - aplikacja powinna korzystać z tego samego połączenia a nie co chwila tworzyć nowe obiekty z których każdy by tworzył nowe połączenie. Tutaj jednak ostrzegam że trzeba mądrze zastosować ten wzorzec.

Druga sprawa to kwestia wątków - jeśli chcesz w wielu wątkach mieć połączenie to trzeba zadbać aby klasa z połączeniem była bezpieczna do korzystania w wątkach. Przydadzą sie wtedy muteksy.

Ogólnie to co pokazałeś(kod) robi wrażenie nie do końca przemyślanego. Spisz sobie na kartce co chcesz robić w takij klasie, wtedy będziesz wiedział jakie metody i do czego potrzebujesz. Jakby co to pisz, zapewne ktoś coś doradzi :)

0

Udało mi się znależć roziwązanie poprzez zmianę na

conn = new connection("dbname=abc user=postgres password=postgress hostaddr=127.0.0.1 port=5432");

Czy nadal to jest niebezpieczne?

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