Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Datenbank mit c++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.06.2003, 17:16 Uhr
~tobiwankenobi
Gast


Könnt Ihr mir helfen?? Ich suche eine odbc klasse für c++ mit der ich auf mysql zugreifen kann!! (nicht mfc!!!!)

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.06.2003, 19:42 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Wozu ODBC? Greif doch direkt auf MySQL zu, z.B. so:


C++:
#include <windows.h>
#include "mysql.h"

#include <string>

using namespace std;

//------------------------------------------------------------------------------

class MySqlConnection
{
private:
   MYSQL *m_myData;

public:
   MySqlConnection(string sDatabase, string sServer)
   {
      if(!(m_myData = mysql_init(0))) throw "MySQL init failed";
      if(!mysql_real_connect(m_myData, sServer.c_str(), NULL, NULL, sDatabase.c_str(), MYSQL_PORT, NULL, 0)) throw "MySQL connect failed";
   }

   ~MySqlConnection() { mysql_close(m_myData); }
   MYSQL* GetData() { return m_myData; }
};

//------------------------------------------------------------------------------

class MySqlResult
{
private:
   MYSQL_RES *m_myRes;
   MYSQL_ROW m_myRow;
   int m_iFieldCount;
public:
   MySqlResult(MYSQL_RES *res): m_myRes(res), m_iFieldCount(mysql_num_fields(m_myRes)) { }
   ~MySqlResult() { mysql_free_result(m_myRes); }
   bool Next() { return (m_myRow = mysql_fetch_row(m_myRes)); }
   int GetFieldCount() { return m_iFieldCount; }
   string GetField(int iFieldNo) { return m_myRow[iFieldNo]; }
   bool IsNull(int iFieldNo) { return (!m_myRow[iFieldNo]); }
};

//------------------------------------------------------------------------------

class MySqlCommand
{
private:
   MYSQL *m_myData;

public:
   MySqlCommand(MySqlConnection& Conn): m_myData(Conn.GetData()) { }

   MySqlResult ExecuteQuery(string sQuery)
   {
      if(mysql_query(m_myData, sQuery.c_str())) throw ((string)"MySQL: Error in SQL statement" + sQuery).c_str();
      return MySqlResult(mysql_store_result(m_myData));
   }

   unsigned long ExecuteNonQuery(string sCommand)
   {
      if(mysql_query(m_myData, sCommand.c_str())) throw ((string)"MySQL: Error in SQL statement" + sCommand).c_str();
      return mysql_affected_rows(m_myData);
   }
};


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.06.2003, 20:41 Uhr
~tobiwankenobi
Gast


Ist zwar eine gute Idee aber viel zu kompliziert! Ich suche ein einfaches tool wo ich sage connopen etc...

Gibt es sowas nicht??
Muß ich wirklich so umständlich darauf zugreifen???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.09.2003, 13:11 Uhr
~SwordMaster
Gast


@Bruder Leif:
Die klassen sehn ja sehr Gut aus... hast vielleciht ein kleines beispiel wie man sie anwendet?
müßte auch ohne odbc auf mysql zugreifen und da wärs extrem super wenn ich das bald schaffen könnte!
Danke SwordMaster
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.09.2003, 14:17 Uhr
0xdeadbeef
Gott
(Operator)


Auf http://otl.sf.net findest du nen ODBC-Wrapper, der ein ziemlich geniales Streaming-Konzept verfolgt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.09.2003, 15:02 Uhr
Bruder Leif
dances with systems
(Operator)


/*
Moin!

Hab mal schnell ein kleines Beispiel zusammengeschludert. Einfach alles aus MySql\Include und MySql\Lib\Debug ins gleiche Verzeichnis kopieren, dann z.B. mit VC++

Code:
cl /EHsc test.cpp *.lib




C++:
*/
#include <iostream>
#include "mysql.cpp"  // Die Datei von oben

int main()
{
   try
   {
      // Verbindung zu MySQL aufbauen, Datenbank (hier ohne Paßwort) öffnen
      MySqlConnection conn("test", "localhost");
      MySqlCommand com(conn);

      // Tabelle erzeugen
      com.ExecuteNonQuery("create table adressen(name varchar(50) not null, vorname varchar(50) not null, primary key(name, vorname));");

      // Ein paar Datensätze einfügen
      com.ExecuteNonQuery("insert into adressen values('May', 'Brian');");
      com.ExecuteNonQuery("insert into adressen values('Mercury', 'Freddy');");
      com.ExecuteNonQuery("insert into adressen values('Taylor', 'Roger');");
      com.ExecuteNonQuery("insert into adressen values('Deacon', 'John');");

      // Ein paar Datensätze abfragen...
      MySqlResult res = com.ExecuteQuery("select * from adressen where name like 'M%' order by name, vorname;");

      // ...und ausgeben
      while(res.Next())
      {
         cout << (res.IsNull(0) ? "" : res.GetField(0)) << " ";
         cout << (res.IsNull(1) ? "" : res.GetField(1)) << endl;
      }

      // Aufräumen
      com.ExecuteNonQuery("drop table adressen;");
   }
   catch(...)
   {
      cout << "uuups..." << endl;
   }

   // Connection schließt sich im Destruktor automatisch

   return 0;
}
/*


*/
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.09.2003, 16:50 Uhr
Spacelord
Hoffnungsloser Fall


Ist jetzt nur mal so ne Frage.Warum benutzt ihr in einer OOP Sprache eine relationale Datenbank?
Weil sie umsonst ist?Weil sie jeder benutzt?Weil das eben so ist?
Ich würde gerne wissen warum ihr im Bereich der Datenbanken die Vorteile der OOP über den Haufen werft und die relationale DB vorzieht?
Es gibt durchaus auch kostenlose,objektorientierte Datenbanken(die zugegebenerweise nicht so ausgearbeitet sind wie mySql) aber die werden vollkommen in den Hintergrund gedrängt.Warum wird in diesem Bereich der Paradigmenbruch einfach ignoriert?
Ich kann ja noch verstehen wenn man das langsame ODBC nutzt,aber warum nutze ich das unportable API einer Datenbank die vom Konzept her überhaupt nicht zu der Programmiersprache passt die ich nutze?
Kritiker behaupten ja dass objektorientierte Datenbanken letztendlich auch nur einem erweitertem ER-Modell folgen aber im Vergleich ist die letztendliche Implementierung einer Methode in der OOP ja auch imperativ,und trotzdem bietet die OOP ansich enorme Vorteile.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.09.2003, 22:26 Uhr
Bruder Leif
dances with systems
(Operator)


Kommt immer drauf an, WAS Du speichern willst. Wenn Du z.B. eine Adreßliste speichern willst, kommt so oder so eine Tabelle dabei raus. Ob ich eine einzelne Adresse jetzt feldweise als Record speichere oder als Objekt, und dann in einer Tabelle die einzelnen Referenzen auf die Objekte halten und mir nach der Abfrage die Datensätze wieder zur Tabelle zusammensetzen muß, macht vielleicht vom Paradigma her einen Unterschied, vom Nutzen her nicht. Wird eher komplizierter...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.09.2003, 17:41 Uhr
~DerLiebeGast
Gast


So einfach ist es ja mal nicht!
Wie Spacelord schon erwähnt hatte ist das das Standardargument(ist ja auch nur ein erweitertes ER Modell).Mal abgesehen davon das sich die physische Speicherung durchaus von der einer relationalen DB unterscheidet bietet eine objektorientierte DB auch andere Vorteile!
Nehmen wir mal das Beispiel einer Bank.
Wenn von Konto A ein Betrag überwiesen werden soll,muss sichergestellt sein dass dieser Betrag einem anderem Konto gutgeschrieben wird.In einer OOP DB kann man das über ein private Attribut Kontostand und einer Methode ueberweisen erreichen.In einer relationalen DB muss man das über Umwege realisieren.Warum gelten hier die mitlerweile anerkannten Vorteile der OOP auf einmal nicht mehr?Eine OO DB bietet hervorragende Möglichkeiten objektbezogene Integritätsbedingungen sicherzustellen.
Das Ganze sauber gekapselt!!Keine externen,generischen Abfragen auf "unbekannte" Attribute!

MfG
DerLiebeGast
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.09.2003, 18:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Rein von der theorie bieten natürlich Objektoriente Datenbanken uU Vorteile gegenüber RDBMS. Allerdings gibt es da auch einige Randbedingungen, die man sehen sollte:

Zuletzt habe ich mich vor ca 8 Jahren mit OO Datenbanken auseinandergesetzt (ObjectStore) und dies schnell wieder verworfen, weil sie rein performancetechnisch eine Katastrophe waren. Ich bin mir zwar sicher, daß sich da inzwischen auch was dran geändert hat, aber ich fand den Unterschied schon ziemlich krass und glaube nicht, daß er inzwischen ganz aufgeholt wurde. In 10 Jahren, denke ich, sieht das wieder anders aus.

Was die Integritätsregeln angeht: das ist graue Theorie. Wird alles gerne in der Uni so beigebracht, ist in vielen Dingen aber einfach nicht praixstauglich. In der Praxis werden sehr oft bewußt redundanzen in Kauf genommen (eines der größten NoNos), auf dinge wie Referentielle Integrität verzichtet usw, um insbesondere Große Datenbanken überlaupt bedienbar zu halten (im Sinne von performance). Ich rede jetzt nicht von so 0815 DBs mit vielleicht 100 Gleichzeitigen benutzern und ein paar 100 MB Datenbestand, sondern richtig fetten Teilen.
Die Dinge, die normalerweise in der RDBMS sein sollten, werden dann direkt mit in der Applicationslogik abgefackelt.
Nein, schön finde ich das auch nicht, aber es gibt eben einfach beweggründe, eine der reinen Theorie widersprechenden Lösung anzuvisieren.
Von der Theorie gebe ich recht: OO Datenbanken sind eine feine sache.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: