<< Chapter < Page | Chapter >> Page > |
Przed uruchomianiem aplikacji natęży mieć bazę danych z tabela 'result' z polami: Id, Time, SP, PV, CV. Jeżeli sie takowej nie posiada należy ją stworzyć.
Oto kilka przydatnych do tego instrukcji:
połączenie z baza:
# mysql -u $user -p
tworzenie bazy danych:
>CREATE DATABASE control;
pracuj z tabela (wykonuj na niej dalsze operacje):
>USE control
tworzenie tabeli:
>CREATE TABLE result(Id int not null auto_increment primary key,Time TimeStamp(14) not null,SP double not null,PV double not null,CV double not null );
dodawanie danych (Id i Time uzupełniane są automatycznie):
>INSERT INTO result (SP,PV,CV) VALUES(1,2,3)
czyszczenie tabeli:
>DELETE FROM result;
czyszczenie tabeli (Id zacznie numerować od nowa):
>TRUNCATE result;
usuwanie tabeli z bazy:
>DROP result;
zamiana nazwy kolumny:
>ALTER TABLE `result` CHANGE `number` `Id` DECIMAL( 9, 0 ) DEFAULT '0' NOT NULL;
zmiana hasła:
>SET PASSWORD FOR $user=PASSWORD('password');
Przed połączeniem z baza danych należy inicjalizować strukturę – identyfikator:
mysql = mysql_init((MYSQL*) 0);
Połączenie z baza danych:
mysql_real_connect( mysql, host, login, passwd, table, port,NULL,0);
Wykonanie zapytania:
mysql_real_query(mysql,query,(unsigned int) strlen(query));
Zamykanie połączenia:
mysql_close(mysql);
Jeżeli chcemy pobrać rezultaty zapytania np. po pytaniu “SHOW” lub “SELECT” należy użyć dodatkowych funkcji.
Używaj rezultatów ostatniego zapytania:
res=mysql_use_result(mysql);
Wyodrębnij nazwy kolumn:
fields = mysql_fetch_fields(res);
Pobierz wiersz spełniający ostatnie zapytanie (konwersja rezultatów w krotki):
row = mysql_fetch_row(res);
Wyodrębnij liczbe kolumn:
num_fields = mysql_num_fields(res);
Wyodrębnij szerokości kolumn:
lengths = mysql_fetch_lengths(res);
MYSQL-struktura komunikacyjna:
typedef struct st_mysql {
NET net; /* Communication parameters */
gptr connector_fd; /* ConnectorFd for SSL */
char *host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsigned int port,client_flag,server_capabilities;
unsigned int protocol_version;
unsigned int field_count;
unsigned int server_status;
unsigned long thread_id; /* Id for connection in server */
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
my_ulonglong extra_info; /* Used by mysqlshow */
unsigned long packet_length;
enum mysql_status status;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */
struct st_mysql_options options;
char scramble_buff[9];
struct charset_info_st *charset;
unsigned int server_language;
} MYSQL;
MYSQL_RES -struktura reprezentująca rezultaty zapytania
typedef struct st_mysql_res {
my_ulonglong row_count;
unsigned int field_count, current_field;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
MEM_ROOT field_alloc;
MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
my_bool eof; /* Used my mysql_fetch_row */
} MYSQL_RES;
MYSQL_ROW-struktura reprezentująca danych w krotce.
typedef struct st_mysql_field {
char *name; /* Name of column */
char *table; /* Table of column if column was a field */
char *def; /* Default value (set by mysql_list_fields) */
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
unsigned int length; /* Width of column */
unsigned int max_length; /* Max width of selected set */
unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */
} MYSQL_FIELD;
Plik nagłówkowy mysql znajduje sie w /usr/include/mysql :
#include<mysql/mysql.h>
Funkcje:
MYSQL *STDCALL mysql_init(MYSQL *mysql);
MYSQL *STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned int clientflag);
void STDCALL mysql_close(MYSQL *sock);
int STDCALL mysql_real_query(MYSQL *mysql, const char *q,unsigned long length);
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
MYSQL_FIELD *STDCALL mysql_fetch_field(MYSQL_RES *result);
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
Literatura
http://mysql.com/
http://www.linuxfocus.org/Polish/September2003/article304.shtml#304lfindex2
Uwagi
kompilacja:
# gcc -lm -lmysqlclient zbiornik_mysql.c regul.c mylib.c -o zbior
katalog zbr2
zawiera zrodal programu ktory wykonuje:
katalog zbr3
zawiera zrodal programu ktory wykonuje:- polczenie z baza
Uwaga odczyt rezultatow nie jest doskonaly, np wysypuje sie przy pytaniu SLECT... zadanym gdy tabela jest pusta
Notification Switch
Would you like to follow the 'Algorytmy i struktury komputerowych systemów sterowania' conversation and receive update notifications?