GTK+ 操作 Mysql 数据库示例程序 版本 1.0
2005-02-23 18:18
537 查看
/*
作者:wide288 时间:2005-2-23 元宵节
wide288@0[tempc2]$ cat makefile
CC = gcc
LIB = -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
all:
$(CC) -o create create.c $(LIB) `pkg-config gtk+-2.0 --cflags --libs`
wide288@0[tempc2]$
*/
#include
#include
#define DEF_HOST_NAME "localhost"
#define DEF_USER_NAME "wide288"
#define DEF_PASSWORD "123"
#define DEF_DATABASE "lcrj"
MYSQL *myconnect = NULL;
gboolean isclosed = TRUE;
gboolean iscreate = TRUE;
static GtkWidget *dialog = NULL;
static GtkWidget *entry = NULL;
static GtkWidget *table_dialog = NULL;
static GtkWidget *db_entry = NULL;
static GtkWidget *text = NULL;
static GtkTextBuffer *text_buffer;
gboolean isok = FALSE;
static GtkWidget *drop_table_dialog = NULL;
static GtkWidget *drop_db_entry = NULL;
static GtkWidget *drop_table_entry = NULL;
static GtkTextBuffer *message_buffer;
static GtkWidget *mlabel;
void create_message_dialog(GtkMessageType type, gchar* message)
{
GtkWidget* dialogx;
dialogx = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
type, GTK_BUTTONS_OK, message);
gtk_dialog_run(GTK_DIALOG(dialogx));
gtk_widget_destroy(dialogx);
}
void on_dialog_yes(GtkButton *button, gpointer data)
{
gchar query_buf[4096];
const gchar* dbname;
dbname = gtk_entry_get_text(GTK_ENTRY(entry));
if(iscreate == TRUE)
{
sprintf(query_buf, "CREATE DATABASE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据库!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "创建数据库时出错!");
}
}else{
sprintf(query_buf, "DROP DATABASE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_WARNING, "数据库已经被删除!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "删除数据库时出错!");
}
}
gtk_widget_destroy(dialog);
}
void on_dialog_no(GtkButton *button, gpointer data)
{
gtk_widget_destroy(dialog);
}
void create_run_dialog(gchar *title)
{
GtkWidget *label, *vbox, *button, *sep, *hbox;
dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(dialog), title);
g_signal_connect(G_OBJECT(dialog), "delete_event",
G_CALLBACK(gtk_widget_destroy),dialog);
gtk_container_set_border_width(GTK_CONTAINER(dialog),10);
vbox = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(dialog),vbox);
label = gtk_label_new("输入数据库名:");
gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox),entry, FALSE, FALSE, 5);
sep = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox),sep, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox),hbox, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_YES);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_dialog_yes), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(dialog);
}
void on_db_use(GtkButton *button, gpointer data)
{
const char* query;
char query_buf[1024];
query = gtk_entry_get_text(GTK_ENTRY(db_entry));
sprintf(query_buf, "USE %s", query);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "数据库选用成功!");
gtk_widget_set_sensitive(db_entry, FALSE);
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "选用数据库时出错!");
}
}
void on_create_table_yes(GtkButton* button, gpointer data)
{
gchar* sql_query;
GtkTextIter iter1, iter2;
gtk_text_buffer_get_start_iter(text_buffer, &iter1);
gtk_text_buffer_get_end_iter(text_buffer, &iter2);
sql_query = gtk_text_buffer_get_text(text_buffer, &iter1, &iter2, FALSE);
if(mysql_query(myconnect, sql_query) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据表!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "运行SQL语句时出错!");
}
}
void create_table_dialog(gchar* title)
{
GtkWidget *vbox, *hbox, *label, *button, *viewport;
table_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(table_dialog), title);
g_signal_connect(G_OBJECT(table_dialog), "delete_event",
G_CALLBACK(gtk_widget_destroy), table_dialog);
gtk_container_set_border_width(GTK_CONTAINER(table_dialog), 10);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(table_dialog), vbox);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("数据库名称:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
db_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), db_entry, FALSE, FALSE, 5);
button = gtk_button_new_with_label("选用");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_db_use), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
viewport = gtk_viewport_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(hbox), viewport, TRUE, TRUE, 5);
text = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(viewport), text);
text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
label = gtk_label_new("请在左侧的/n文本输入区/n域内输入创/n建数据表的/nSQL语句,/n单击下面的/n按钮即可执/n行创建数据/n操作");
gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据表");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_create_table_yes), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(table_dialog);
}
void on_drop_table_yes(GtkButton* button, gpointer data)
{
gchar query_buf[4096];
const gchar *dbname, *tablename;
dbname = gtk_entry_get_text(GTK_ENTRY(drop_db_entry));
tablename = gtk_entry_get_text(GTK_ENTRY(drop_table_entry));
sprintf(query_buf, "USE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
sprintf(query_buf, "DROP TABLE %s", tablename);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_WARNING,
"数据库已经打开,数据表成功删除!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR,
"数据库已经打开,但数据表并未删除!");
}
}else{
create_message_dialog(GTK_MESSAGE_ERROR,"打开数据库时出错!");
}
gtk_widget_destroy(drop_table_dialog);
}
void on_drop_table_no(GtkButton* button, gpointer data)
{
gtk_widget_destroy(drop_table_dialog);
}
void create_drop_table_dialog(gchar* title)
{
GtkWidget *vbox, *hbox, *label, *button,
*sep;
drop_table_dialog =
gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(drop_table_dialog), title);
g_signal_connect(G_OBJECT(drop_table_dialog),"delete_event",
G_CALLBACK(gtk_widget_destroy), drop_table_dialog);
gtk_container_set_border_width(GTK_CONTAINER(drop_table_dialog),10);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(drop_table_dialog), vbox);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("打开的数据库:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
drop_db_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), drop_db_entry, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("要删除的数据表:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
drop_table_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), drop_table_entry, FALSE, FALSE, 5);
sep = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_YES);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table_yes), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_NO);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table_no), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(drop_table_dialog);
}
gboolean my_connect1()
{
myconnect = mysql_init(myconnect);
if(mysql_real_connect(myconnect, DEF_HOST_NAME,
DEF_USER_NAME, DEF_PASSWORD, DEF_DATABASE, MYSQL_PORT, NULL, 0))
{
return TRUE;
}else{
myconnect = NULL;
return FALSE;
}
}
void my_disconnect()
{
mysql_close(myconnect);
myconnect = NULL;
}
void on_button_connect(GtkButton *button,
gpointer data)
{
if(my_connect1() == FALSE)
{
gtk_label_set_text(GTK_LABEL(mlabel), "错误:不能与数据库服务器连接。");
}else{
gtk_label_set_text(GTK_LABEL(mlabel), "信息:成功与数据库服务器连接。");
isclosed = FALSE;
}
}
void on_button_disconnect(GtkButton *button, gpointer data)
{
my_disconnect();
isclosed = TRUE;
gtk_label_set_text(GTK_LABEL(mlabel), "注意:成功与数据库服务器断开。");
}
void on_create(GtkButton *button, gpointer data)
{
create_run_dialog("创建mysql数据库");
iscreate = TRUE;
}
void on_drop(GtkButton *button, gpointer data)
{
create_run_dialog("删除mysql数据库");
iscreate = FALSE;
}
void on_create_table(GtkButton *button, gpointer data)
{
create_table_dialog("创建数据表");
}
void on_drop_table(GtkButton *button, gpointer data)
{
create_drop_table_dialog("删除数据表");
}
void on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
if(isclosed == FALSE)
{
my_disconnect();
create_message_dialog(GTK_MESSAGE_INFO, "成功与服务器断开!");
}
gtk_main_quit();
}
int main(int argc, char* argv[])
{
GtkWidget *window;
GtkWidget *vbox1, *hbox, *vbox,
*viewport;
GtkWidget *button, *message;
GtkTextIter iter;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(on_delete_event), NULL);
gtk_window_set_title(GTK_WINDOW(window), "创建/删除数据库和数据表");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
vbox1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox1);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox1),
hbox, FALSE, FALSE, 5);
message = gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(hbox),
message, TRUE, TRUE, 5);
message_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(message));
gtk_text_buffer_get_end_iter(message_buffer, &iter);
gtk_text_buffer_insert(message_buffer, &iter, "此处用来显示一些与软件/n使用有关的数据信息。/n可以到程序中找到这段代码,/n并应用到自己的回调函数中。/n与MySQL数据库服务器连接/n需要用到服务器、用户名/n和密码等参数,这些参数的/n设置可以到MySQL的帮助/n文档中找到,MySQL的C语/n言API的详细说明也可以在/n此文档中找到。", -1);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
button = gtk_button_new_with_label("连接服务器");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_button_connect), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("断开");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_button_disconnect), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据库");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_create), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("删除数据库");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据表");
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_create_table), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("删除数据表");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
viewport = gtk_viewport_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(vbox1), viewport, FALSE, FALSE, 5);
mlabel = gtk_label_new("此处也可以显示提示信息");
gtk_container_add(GTK_CONTAINER(viewport), mlabel);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
/*
此示例本是为写一个理财软件所写,且多抄于书中。
只是花些时间调试。和看 Mysql Api 的手册什么的。
如果有朋友想一起写什么理财软件或用到了 mysql 和 gtk+ 就写邮件给我吧。如果有空大家一起写它。
wide288 at 163 dot com
*/
作者:wide288 时间:2005-2-23 元宵节
wide288@0[tempc2]$ cat makefile
CC = gcc
LIB = -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
all:
$(CC) -o create create.c $(LIB) `pkg-config gtk+-2.0 --cflags --libs`
wide288@0[tempc2]$
*/
#include
#include
#define DEF_HOST_NAME "localhost"
#define DEF_USER_NAME "wide288"
#define DEF_PASSWORD "123"
#define DEF_DATABASE "lcrj"
MYSQL *myconnect = NULL;
gboolean isclosed = TRUE;
gboolean iscreate = TRUE;
static GtkWidget *dialog = NULL;
static GtkWidget *entry = NULL;
static GtkWidget *table_dialog = NULL;
static GtkWidget *db_entry = NULL;
static GtkWidget *text = NULL;
static GtkTextBuffer *text_buffer;
gboolean isok = FALSE;
static GtkWidget *drop_table_dialog = NULL;
static GtkWidget *drop_db_entry = NULL;
static GtkWidget *drop_table_entry = NULL;
static GtkTextBuffer *message_buffer;
static GtkWidget *mlabel;
void create_message_dialog(GtkMessageType type, gchar* message)
{
GtkWidget* dialogx;
dialogx = gtk_message_dialog_new(NULL,
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
type, GTK_BUTTONS_OK, message);
gtk_dialog_run(GTK_DIALOG(dialogx));
gtk_widget_destroy(dialogx);
}
void on_dialog_yes(GtkButton *button, gpointer data)
{
gchar query_buf[4096];
const gchar* dbname;
dbname = gtk_entry_get_text(GTK_ENTRY(entry));
if(iscreate == TRUE)
{
sprintf(query_buf, "CREATE DATABASE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据库!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "创建数据库时出错!");
}
}else{
sprintf(query_buf, "DROP DATABASE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_WARNING, "数据库已经被删除!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "删除数据库时出错!");
}
}
gtk_widget_destroy(dialog);
}
void on_dialog_no(GtkButton *button, gpointer data)
{
gtk_widget_destroy(dialog);
}
void create_run_dialog(gchar *title)
{
GtkWidget *label, *vbox, *button, *sep, *hbox;
dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(dialog), title);
g_signal_connect(G_OBJECT(dialog), "delete_event",
G_CALLBACK(gtk_widget_destroy),dialog);
gtk_container_set_border_width(GTK_CONTAINER(dialog),10);
vbox = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(dialog),vbox);
label = gtk_label_new("输入数据库名:");
gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox),entry, FALSE, FALSE, 5);
sep = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox),sep, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox),hbox, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_YES);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_dialog_yes), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(dialog);
}
void on_db_use(GtkButton *button, gpointer data)
{
const char* query;
char query_buf[1024];
query = gtk_entry_get_text(GTK_ENTRY(db_entry));
sprintf(query_buf, "USE %s", query);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "数据库选用成功!");
gtk_widget_set_sensitive(db_entry, FALSE);
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "选用数据库时出错!");
}
}
void on_create_table_yes(GtkButton* button, gpointer data)
{
gchar* sql_query;
GtkTextIter iter1, iter2;
gtk_text_buffer_get_start_iter(text_buffer, &iter1);
gtk_text_buffer_get_end_iter(text_buffer, &iter2);
sql_query = gtk_text_buffer_get_text(text_buffer, &iter1, &iter2, FALSE);
if(mysql_query(myconnect, sql_query) == 0)
{
create_message_dialog(GTK_MESSAGE_INFO, "成功创建数据表!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR, "运行SQL语句时出错!");
}
}
void create_table_dialog(gchar* title)
{
GtkWidget *vbox, *hbox, *label, *button, *viewport;
table_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(table_dialog), title);
g_signal_connect(G_OBJECT(table_dialog), "delete_event",
G_CALLBACK(gtk_widget_destroy), table_dialog);
gtk_container_set_border_width(GTK_CONTAINER(table_dialog), 10);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(table_dialog), vbox);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("数据库名称:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
db_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), db_entry, FALSE, FALSE, 5);
button = gtk_button_new_with_label("选用");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_db_use), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
viewport = gtk_viewport_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(hbox), viewport, TRUE, TRUE, 5);
text = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(viewport), text);
text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
label = gtk_label_new("请在左侧的/n文本输入区/n域内输入创/n建数据表的/nSQL语句,/n单击下面的/n按钮即可执/n行创建数据/n操作");
gtk_box_pack_start(GTK_BOX(vbox),label, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据表");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_create_table_yes), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(table_dialog);
}
void on_drop_table_yes(GtkButton* button, gpointer data)
{
gchar query_buf[4096];
const gchar *dbname, *tablename;
dbname = gtk_entry_get_text(GTK_ENTRY(drop_db_entry));
tablename = gtk_entry_get_text(GTK_ENTRY(drop_table_entry));
sprintf(query_buf, "USE %s", dbname);
if(mysql_query(myconnect, query_buf) == 0)
{
sprintf(query_buf, "DROP TABLE %s", tablename);
if(mysql_query(myconnect, query_buf) == 0)
{
create_message_dialog(GTK_MESSAGE_WARNING,
"数据库已经打开,数据表成功删除!");
}else{
create_message_dialog(GTK_MESSAGE_ERROR,
"数据库已经打开,但数据表并未删除!");
}
}else{
create_message_dialog(GTK_MESSAGE_ERROR,"打开数据库时出错!");
}
gtk_widget_destroy(drop_table_dialog);
}
void on_drop_table_no(GtkButton* button, gpointer data)
{
gtk_widget_destroy(drop_table_dialog);
}
void create_drop_table_dialog(gchar* title)
{
GtkWidget *vbox, *hbox, *label, *button,
*sep;
drop_table_dialog =
gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(drop_table_dialog), title);
g_signal_connect(G_OBJECT(drop_table_dialog),"delete_event",
G_CALLBACK(gtk_widget_destroy), drop_table_dialog);
gtk_container_set_border_width(GTK_CONTAINER(drop_table_dialog),10);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(drop_table_dialog), vbox);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("打开的数据库:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
drop_db_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), drop_db_entry, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
label = gtk_label_new("要删除的数据表:");
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
drop_table_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(hbox), drop_table_entry, FALSE, FALSE, 5);
sep = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 5);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_YES);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table_yes), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
button = gtk_button_new_from_stock(GTK_STOCK_NO);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table_no), NULL);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
gtk_widget_show_all(drop_table_dialog);
}
gboolean my_connect1()
{
myconnect = mysql_init(myconnect);
if(mysql_real_connect(myconnect, DEF_HOST_NAME,
DEF_USER_NAME, DEF_PASSWORD, DEF_DATABASE, MYSQL_PORT, NULL, 0))
{
return TRUE;
}else{
myconnect = NULL;
return FALSE;
}
}
void my_disconnect()
{
mysql_close(myconnect);
myconnect = NULL;
}
void on_button_connect(GtkButton *button,
gpointer data)
{
if(my_connect1() == FALSE)
{
gtk_label_set_text(GTK_LABEL(mlabel), "错误:不能与数据库服务器连接。");
}else{
gtk_label_set_text(GTK_LABEL(mlabel), "信息:成功与数据库服务器连接。");
isclosed = FALSE;
}
}
void on_button_disconnect(GtkButton *button, gpointer data)
{
my_disconnect();
isclosed = TRUE;
gtk_label_set_text(GTK_LABEL(mlabel), "注意:成功与数据库服务器断开。");
}
void on_create(GtkButton *button, gpointer data)
{
create_run_dialog("创建mysql数据库");
iscreate = TRUE;
}
void on_drop(GtkButton *button, gpointer data)
{
create_run_dialog("删除mysql数据库");
iscreate = FALSE;
}
void on_create_table(GtkButton *button, gpointer data)
{
create_table_dialog("创建数据表");
}
void on_drop_table(GtkButton *button, gpointer data)
{
create_drop_table_dialog("删除数据表");
}
void on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
if(isclosed == FALSE)
{
my_disconnect();
create_message_dialog(GTK_MESSAGE_INFO, "成功与服务器断开!");
}
gtk_main_quit();
}
int main(int argc, char* argv[])
{
GtkWidget *window;
GtkWidget *vbox1, *hbox, *vbox,
*viewport;
GtkWidget *button, *message;
GtkTextIter iter;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(on_delete_event), NULL);
gtk_window_set_title(GTK_WINDOW(window), "创建/删除数据库和数据表");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
vbox1 = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox1);
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox1),
hbox, FALSE, FALSE, 5);
message = gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(hbox),
message, TRUE, TRUE, 5);
message_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(message));
gtk_text_buffer_get_end_iter(message_buffer, &iter);
gtk_text_buffer_insert(message_buffer, &iter, "此处用来显示一些与软件/n使用有关的数据信息。/n可以到程序中找到这段代码,/n并应用到自己的回调函数中。/n与MySQL数据库服务器连接/n需要用到服务器、用户名/n和密码等参数,这些参数的/n设置可以到MySQL的帮助/n文档中找到,MySQL的C语/n言API的详细说明也可以在/n此文档中找到。", -1);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
button = gtk_button_new_with_label("连接服务器");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_button_connect), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("断开");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_button_disconnect), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据库");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_create), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("删除数据库");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("创建数据表");
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_create_table), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
button = gtk_button_new_with_label("删除数据表");
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(on_drop_table), NULL);
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
viewport = gtk_viewport_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(vbox1), viewport, FALSE, FALSE, 5);
mlabel = gtk_label_new("此处也可以显示提示信息");
gtk_container_add(GTK_CONTAINER(viewport), mlabel);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
/*
此示例本是为写一个理财软件所写,且多抄于书中。
只是花些时间调试。和看 Mysql Api 的手册什么的。
如果有朋友想一起写什么理财软件或用到了 mysql 和 gtk+ 就写邮件给我吧。如果有空大家一起写它。
wide288 at 163 dot com
*/
相关文章推荐
- Spring Boot Mysql 数据库操作示例
- jsp程序向调用mysql语句操作数据库传中文出现乱码
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- 编写操作数据库的JAVA程序时需要的连接MySQL数据库的JDBC连接包mysql-connector-java-5.1.10.zip怎么安装
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- mysql修改字符集位utf-8使其和操作数据库连接字符程序统一
- 【Hibernate】mysql版本影响hibernate操作数据库
- mysql 5.7.21解压版本安装 Navicat数据库操作工具安装
- 运用php连接数据库操作示例(MYSQL)
- 把附件(WORD、EXCEL、PDF)或图片存贮到数据库的完整范例程序。(MYSQL、SQL SERVER、ORACLE)三个版本
- 通过配置文件ini配置数据库,操作数据库,以mysql为示例
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
- python 试题:以mysql或者sqlite为例,请用代码给出简洁且完整的数据库操作示例。
- Bluemix云端数据库服务ClearDB MySQL使用示例———Python开发投票程序
- MySQL5.5.22版本安装配置以及基本命令的使用和管理数据库备份与恢复操作详解
- MySQL解压版本安装及Navicat数据库操作工具安装
- 性能测试工具操作数据库(一)-Loadrunner与Mysql