Hi,
Ich gehe jetzt mal davon aus, dass du nicht wirklich int_wert
auf 20 festlegst und drei Zeilen später ohne jegliche
Modifikationsmöglichkeit benutzt… Wieso nicht
da hast du recht Mein Code liegt in einer Schleife, die den int hochzählt.
ostringstream os;
os
sicher ein Ansatz um Zeit zu sparen. Habe aber eine noch viel schönere Lösung gefunden, die für Datenbankprogrammierung um einiges besser geeignet ist als immer den String neu zusammenzusetzen. Ich rede von PreparedStatements. Da arbeitet man mit Platzhaltern. Die bringen wirklich was von der Performance her. Habe mal einen kleinen Test gemacht indem ich 100000 Inserts ausgeführt habe. Zeitersparnis lag bei ca. 30% verglichen mit dem immer wieder neu zusammensetzen per Stringoperationen.
Aber jetzt poste ich einfach mal etwas Code. Vielleicht stößt ja mal wer per Suche drauf und freut sich dann über Code. Denn nichts ist nerviger als irgendwo im Netz was zu finden was zu seinem Problem passt und dann nur zu lesen „Problem gelöst…nochmals Danke an alle“
so dann will ich mal. ich hoffe ich erwische alle relevanten Stellen aus meinem Code:
Das das Insert-Statement nciht wirklich sinnvoll ist weiss ich auch Soll eher das Prinzip verdeutlichen.
#include "mysql\mysql.h"
#define HOST "localhost"
#define USER "root"
#define PASSWD ""
#define DB\_NAME "test"
MYSQL \*mysql = NULL; // Connection handler
MYSQL\_STMT \*stmt;
MYSQL\_BIND bind[1];
int int\_data;
mysql = mysql\_init(NULL);
if(mysql == NULL)
{
printf( "Init failed...\n" );
return 1; // Init failed.
}
if(!mysql\_real\_connect(mysql, HOST, USER, PASSWD, DB\_NAME, MYSQL\_PORT, NULL, 0))
{
printf( "Connection failed...\n" );
return 1; // Connection failed.
}
if(mysql\_query(mysql, "START TRANSACTION") != 0)
{
printf( "START TRANSACTION failed...\n" );
return 1;
}
#define INSERT\_COMMAND "INSERT INTO test1 (Spot\_nr, s1, s2, s3) VALUES( ?, 'test1', 'test2', 'test3')"
stmt = mysql\_stmt\_init(mysql);
if (!stmt)
{
fprintf(stderr, " mysql\_stmt\_init(), out of memory\n");
return 1;
}
if (mysql\_stmt\_prepare(stmt, INSERT\_COMMAND, strlen(INSERT\_COMMAND)))
{
fprintf(stderr, " mysql\_stmt\_prepare(), INSERT failed\n");
fprintf(stderr, " %s\n", mysql\_stmt\_error(stmt));
return 1;
}
int param\_count= mysql\_stmt\_param\_count(stmt);
fprintf(stdout, " total parameters in INSERT: %d\n", param\_count);
/\* INTEGER PARAM \*/
/\* This is a number type, so there is no need to specify buffer\_length \*/
bind[0].buffer\_type= MYSQL\_TYPE\_LONG;
bind[0].buffer= (char \*)&int\_data;
bind[0].is\_null= 0;
bind[0].length= 0;
if (mysql\_stmt\_bind\_param(stmt, bind))
{
fprintf(stderr, " mysql\_stmt\_bind\_param() failed\n");
fprintf(stderr, " %s\n", mysql\_stmt\_error(stmt));
return 1;
}
for(int\_data = 0; int\_data
so viel Spaß mit dem Code.
hier steht noch mehr wie man diese "?"-Syntax mit Leben in Form von Strings füllt. ich hab oben ja nur nen int Wert eingesetzt, da ich nur ihn brauche im Moment:
http://bugs.mysql.com/bug.php?id=8367
Gruß
Pfanni