當前位置:首頁 » 數據倉庫 » c嵌入式資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c嵌入式資料庫

發布時間: 2022-12-26 08:21:27

㈠ 用c語言怎麼連接資料庫

25.2.2. C API函數概述
這里歸納了C API可使用的函數,並在下一節詳細介紹了它們。請參見25.2.3節,「C API函數描述」。

函數
描述

mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查詢更改/刪除/插入的行數。

mysql_autocommit()
切換 autocommit模式,ON/OFF

mysql_change_user()
更改打開連接上的用戶和資料庫。

mysql_charset_name()
返回用於連接的默認字元集的名稱。

mysql_close()
關閉伺服器連接。

mysql_commit()
提交事務。

mysql_connect()
連接到MySQL伺服器。該函數已不再被重視,使用mysql_real_connect()取代。

mysql_create_db()
創建資料庫。該函數已不再被重視,使用SQL語句CREATE DATABASE取而代之。

mysql_data_seek()
在查詢結果集中查找屬性行編號。

mysql_debug()
用給定的字元串執行DBUG_PUSH。

mysql_drop_db()
撤銷資料庫。該函數已不再被重視,使用SQL語句DROP DATABASE取而代之。

mysql_mp_debug_info()
讓伺服器將調試信息寫入日誌。

mysql_eof()
確定是否讀取了結果集的最後一行。該函數已不再被重視,可以使用mysql_errno()或mysql_error()取而代之。

mysql_errno()
返回上次調用的MySQL函數的錯誤編號。

mysql_error()
返回上次調用的MySQL函數的錯誤消息。

mysql_escape_string()
為了用在SQL語句中,對特殊字元進行轉義處理。

mysql_fetch_field()
返回下一個表欄位的類型。

mysql_fetch_field_direct()
給定欄位編號,返回表欄位的類型。

mysql_fetch_fields()
返回所有欄位結構的數組。

mysql_fetch_lengths()
返回當前行中所有列的長度。

mysql_fetch_row()
從結果集中獲取下一行

mysql_field_seek()
將列游標置於指定的列。

mysql_field_count()
返回上次執行語句的結果列的數目。

mysql_field_tell()
返回上次mysql_fetch_field()所使用欄位游標的位置。

mysql_free_result()
釋放結果集使用的內存。

mysql_get_client_info()
以字元串形式返回客戶端版本信息。

mysql_get_client_version()
以整數形式返回客戶端版本信息。

mysql_get_host_info()
返回描述連接的字元串。

mysql_get_server_version()
以整數形式返回伺服器的版本號。

mysql_get_proto_info()
返回連接所使用的協議版本。

mysql_get_server_info()
返回伺服器的版本號。

mysql_info()
返回關於最近所執行查詢的信息。

mysql_init()
獲取或初始化MYSQL結構。

mysql_insert_id()
返回上一個查詢為AUTO_INCREMENT列生成的ID。

mysql_kill()
殺死給定的線程。

mysql_library_end()
最終確定MySQL C API庫。

mysql_library_init()
初始化MySQL C API庫。

mysql_list_dbs()
返回與簡單正則表達式匹配的資料庫名稱。

mysql_list_fields()
返回與簡單正則表達式匹配的欄位名稱。

mysql_list_processes()
返回當前伺服器線程的列表。

mysql_list_tables()
返回與簡單正則表達式匹配的表名。

mysql_more_results()
檢查是否還存在其他結果。

mysql_next_result()
在多語句執行過程中返回/初始化下一個結果。

mysql_num_fields()
返回結果集中的列數。

mysql_num_rows()
返回結果集中的行數。

mysql_options()
為mysql_connect()設置連接選項。

mysql_ping()
檢查與伺服器的連接是否工作,如有必要重新連接。

mysql_query()
執行指定為「以Null終結的字元串」的SQL查詢。

mysql_real_connect()
連接到MySQL伺服器。

mysql_real_escape_string()
考慮到連接的當前字元集,為了在SQL語句中使用,對字元串中的特殊字元進行轉義處理。

mysql_real_query()
執行指定為計數字元串的SQL查詢。

mysql_refresh()
刷新或復位表和高速緩沖。

mysql_reload()
通知伺服器再次載入授權表。

mysql_rollback()
回滾事務。

mysql_row_seek()
使用從mysql_row_tell()返回的值,查找結果集中的行偏移。

mysql_row_tell()
返回行游標位置。

mysql_select_db()
選擇資料庫。

mysql_server_end()
最終確定嵌入式伺服器庫。

mysql_server_init()
初始化嵌入式伺服器庫。

mysql_set_server_option()
為連接設置選項(如多語句)。

mysql_sqlstate()
返回關於上一個錯誤的SQLSTATE錯誤代碼。

mysql_shutdown()
關閉資料庫伺服器。

mysql_stat()
以字元串形式返回伺服器狀態。

mysql_store_result()
檢索完整的結果集至客戶端。

mysql_thread_id()
返回當前線程ID。

mysql_thread_safe()
如果客戶端已編譯為線程安全的,返回1。

mysql_use_result()
初始化逐行的結果集檢索。

mysql_warning_count()
返回上一個SQL語句的告警數。 詳見:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-function-overview
http://dev.mysql.com/doc/refman/5.0/en/c.html

㈡ linux gcc mysql 如何在C語言中使用嵌入式SQL編程 要什麼頭文件如何編譯越詳細越好

最起碼包含mysql.h
實例代碼:
#include <stdlib.h>
#include <stdio.h>

#include "mysql.h"

int main(int argc, char *argv[]) {
MYSQL *conn_ptr;

conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}

conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret",
"foo", 0, NULL, 0);//連接資料庫

if (conn_ptr) {
printf("Connection success\n");
} else {
printf("Connection failed\n");
}

mysql_close(conn_ptr);

return EXIT_SUCCESS;
}
編譯:(假定上面文件取名 con.c,在當前目錄下)
gcc -I/usr/include/mysql con.c -L/usr/lib/mysql -lmysqlclient -o con

㈢ 如何用C語言嵌入式SQL訪問2008SQL資料庫

#include "resource.h"
#include <windows.h>
#include <sqlext.h>
SQLHENV hEnv = NULL;
SQLHDBC hConn = NULL;
SQLHSTMT hStmt=NULL;
SQLHSTMT hStmt1=NULL;
HWND hWinMain;
unsigned char ConnString[1024];
unsigned char FullString[1024];
unsigned char buffer1[1024];
unsigned char number[50];
unsigned char branch[50];
unsigned char money[50];
unsigned char szSQL[100]={"insert into account values(?,?,?)"};
long int size1,size2,size3;
void Connect()
{

int ax,length;
short int *Temp=NULL;
ax=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;

ax=SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;

ax=SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hConn);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return;

SQLSetConnectAttr(hConn,SQL_ATTR_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF,0);
length=sizeof(ConnString);
ax=SQLDriverConnect(hConn,hWinMain,ConnString,length,FullString,sizeof(FullString),Temp,SQL_DRIVER_COMPLETE);
if(ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO)
MessageBox(hWinMain,(char *)FullString,TEXT("提示:"),0);
}
BOOL CALLBACK MainDlg (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND a;
int ax;
switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
Connect();return true;break;
case IDC_EDIT1:
GetDlgItemText(hwnd,IDC_EDIT1,(char *)ConnString,sizeof(ConnString));
a=GetDlgItem(hwnd,IDC_BUTTON1);
if(*ConnString)
EnableWindow(a,TRUE);
else
EnableWindow(a,FALSE);
return true;break;
case IDC_BUTTON2:
GetDlgItemText(hwnd,IDC_EDIT5,(char *)buffer1,sizeof(buffer1));
ax=SQLAllocHandle(SQL_HANDLE_STMT,hConn,&hStmt);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return 0;

SQLSetStmtAttr(hStmt,SQL_ATTR_CURSOR_TYPE,(void *)SQL_CURSOR_STATIC,0);
MessageBox(hWinMain,(char *)buffer1,TEXT("提示:"),0);
ax=lstrlen((char *)buffer1);
SQLExecDirect(hStmt,buffer1,ax);
SQLFreeHandle(SQL_HANDLE_STMT,hStmt);break;
case IDCANCEL:
if(hConn)
{
SQLEndTran(SQL_HANDLE_DBC,hConn,SQL_COMMIT);
SQLDisconnect(hConn);
SQLFreeHandle(SQL_HANDLE_DBC,hConn);
}
if(hEnv)
SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
MessageBox(hWinMain,TEXT("已成功與資料庫斷開連接!"),TEXT("提示...."),0);
break;
case IDOK:
GetDlgItemText(hwnd,IDC_EDIT2,(char *)number,sizeof(number));
GetDlgItemText(hwnd,IDC_EDIT3,(char *)branch,sizeof(branch));
GetDlgItemText(hwnd,IDC_EDIT4,(char *)money,sizeof(money));
size1=sizeof(number);
size2=sizeof(branch);
size3=sizeof(money);
ax=SQLAllocHandle(SQL_HANDLE_STMT,hConn,&hStmt1);
if(ax!=SQL_SUCCESS && ax!=SQL_SUCCESS_WITH_INFO)
return 0;
SQLSetStmtAttr(hStmt1,SQL_ATTR_CURSOR_TYPE,(void *)SQL_CURSOR_STATIC,0);
SQLPrepare(hStmt1,szSQL,sizeof(szSQL));
SQLBindParameter(hStmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,number,10,&size1);
SQLBindParameter(hStmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,branch,10,&size2);
SQLBindParameter(hStmt1,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,50,0,money,10,&size3);
SQLExecute(hStmt1);
MessageBox(hWinMain,TEXT("已成功添加一條記錄!"),TEXT("提示...."),0);
SQLFreeHandle(SQL_HANDLE_STMT,hStmt1);
break;
}
case WM_INITDIALOG:
hWinMain=hwnd;return true;break;
case WM_CLOSE:
EndDialog(hwnd,0);
return true;break;
}
return false;

}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
DialogBoxParam (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, MainDlg, NULL);
return 0;
}
//Driver={SQL Server};Server=伺服器名;Database=eeqt(文件名)
//insert into account values(520,'中國銀行',30000)

㈣ mysql中能在C程序中通過嵌入式SQL訪問資料庫么

先看結構體
----------------------------------------------
以下代碼塊是用來連接資料庫的通訊過程,要連接MYSQL,必須建立MYSQL實例,通過mysql_init初始化方能開始進行連接.
typedefstructst_mysql{
NETnet;/*Communicationparameters*/
gptrconnector_fd;/*ConnectorFdforSSL*/
char*host,*user,*passwd,*unix_socket,
*server_version,*host_info,*info,*db;
unsignedintport,client_flag,server_capabilities;
unsignedintprotocol_version;
unsignedintfield_count;
unsignedintserver_status;
unsignedlongthread_id;/*Idforconnectioninserver*/
my_ulonglongaffected_rows;
my_ulonglonginsert_id;/*idifinsertontablewithNEXTNR*/
my_ulonglongextra_info;/*Usedbymysqlshow*/
unsignedlongpacket_length;
enummysql_statusstatus;
MYSQL_FIELD*fields;
MEM_ROOTfield_alloc;
my_boolfree_me;/*Iffreeinmysql_close*/
my_boolreconnect;/*setto1ifautomaticreconnect*/
structst_mysql_optionsoptions;
charscramble_buff[9];
structcharset_info_st*charset;
unsignedintserver_language;
}MYSQL;

這個結構代表返回行的一個查詢的(SELECT,SHOW,DESCRIBE,EXPLAIN)的結果。返回的數據稱為「數據集」,用過資料庫的朋友應該對資料庫中查詢後得到的結果集不會陌生,在C的API里對應的就是MYSQL_RES了,從資料庫讀取數據,最後就是從MYSQL_RES中讀取數據。

typedefstructst_mysql_res{
my_ulonglongrow_count;
unsignedintfield_count,current_field;
MYSQL_FIELD*fields;
MYSQL_DATA*data;
MYSQL_ROWS*data_cursor;
MEM_ROOTfield_alloc;
MYSQL_ROWrow;/*Ifunbufferedread*/
MYSQL_ROWcurrent_row;/*buffertocurrentrow*/
unsignedlong*lengths;/*columnlengthsofcurrentrow*/
MYSQL*handle;/*forunbufferedreads*/
my_booleof;/*Usedmymysql_fetch_row*/
}MYSQL_RES;

----------------------------------------------
再看函數:

C語言操作mysql數據常用函數
所需頭文件:#include<mysql/mysql.h>
功能:獲得或初始化一個MYSQL結構
函數原型:MYSQL*mysql_init(MYSQL*mysql)
函數返回值:一個被始化的MYSQL*句柄
備註:在內存不足的情況下,返回NULL
所需頭文件:#include<mysql/mysql.h>
函數功能:關閉一個伺服器連接,並釋放與連接相關的內存
函數原型:voidmysql_close(MYSQL*mysql);
函數傳入值:MYSQL:類型的指針
函數返回值:無
所需頭文件:#include<mysql/mysql.h>
函數功能:連接一個MySQL伺服器
函數原型:MYSQL*mysql_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd);
函數傳入值:mysql表示一個現存mysql結構的地址
host表示MYSQL伺服器的主機名或IP
user表示登錄的用戶名
passwd表示登錄的密碼
函數返回值:如果連接成功,一個MYSQL*連接句柄:如果連接失敗,NULL
備註:該函數不推薦,使用mysql_real_connect()代替
所需文件:#include<mysql/mysql.h>
函數功能:MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclient_flag);
函數傳入值:mysql表示一個現存mysql結構的地址
host表示MYSQL伺服器的主機名或IP
user表示登錄的用戶名
passwd表示登錄的密碼
db表示要連接的資料庫
port表示MySQL伺服器的TCP/IP埠
unix_socket表示連接類型
client_flag表示MySQL運行ODBC資料庫的標記
函數返回值:如果連接成功,一個MYSQL*連接句柄:如果連接失敗,NULL
所需頭文件:#include<mysql/mysql.h>
函數功能:返回最新的UPDATE,DELETE或INSERT查詢影響的行數
函數傳入值:MYSQL:類型指針
函數返回值:大於零的一個整數表示受到影響或檢索出來的行數。零表示沒有區配查序中WHERE子句的記錄或目前還沒有查詢被執行;-1表示查詢返回一個錯誤,或對於一個SELECT查詢
所需頭文件:#include<mysql/mysql.h>
函數功能:對指定的連接執行查詢
函數原型:intmysql_query(MYSQL*mysql,constchar*query);
函數傳入值:query表示執行的SQL語句
函數返回值:如果查詢成功,為零,出錯為非零。
相關函數:mysql_real_query
所需頭文件:#include<mysql/mysql.h>
函數功能:為無緩沖的結果集獲得結果標識符
函數原形:MYSQL_RES*mysql_use_result(MYSQL*mysql);
函數傳入值:MYSQL:類型的指針
函數返回值:一個MYSQL_RES結果結構,如果發生一個錯誤發NULL
#incluee<mysql/mysql.h>
檢索一個結果集合的下一行
MYSQL_ROWmysql_fetch_row(MYSQL_RES*result);
MYSQL_RES:結構的指針
下一行的一個MYSQL_ROW結構。如果沒有更多的行可檢索或如果出現一個錯誤,NULL
#include<mysql/mysql.h>
返回指定結果集中列的數量
unsignedintmysql_num_fields(MYSQL_RES*res);
MYSQL_RES結構的指針
結果集合中欄位數量的一個無符號整數
#include<mysql/mysql.h>
創建一個資料庫
intmysql_create_db(MYSQL*mysql,constchar*db);
MYSQL:類型的指針
db:要創建的資料庫名
如果資料庫成功地被創建,返回零,如果發生錯誤,為非零。
#include<mysql/mysql.h>
選擇一個資料庫
intmysql_select_db(MYSQL*mysql,constchar*db);
MYSQL:類型的指針
db:要創建的資料庫名
如果資料庫成功地被創建,返回零,如果發生錯誤,為非零。
----------------------------------------------
再看例子:
很多人用到MySQL來開發一些項目,有時為了性能,我們會直接用C語言來開發相關的模塊,尤其在我們的web應用中,雖然PHP、JSP等腳本均提供了MySQL的介面,但是顯然直接使用C語言具有更好的安全性和性能,Michael以前用PHP開發的多個項目中就使用了C語言編寫的這類介面,然後再編譯到php裡面,供php腳本直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連接MySQL資料庫,並且讀取裡面的數據返回,同時如何進行編譯。
這里的大部分代碼參考了MySQL發行包裡面的.c源文件,大家也可以去裡面找找相關的代碼,下面這段代碼實現了連接到本地MySQL伺服器上9tmd_bbs_utf8資料庫,從數據表tbb_user中根據輸入的userid取得該用戶的用戶名並列印輸出到終端。
#ifdefined(_WIN32)||defined(_WIN64)//為了支持windows平台上的編譯
#include<windows.h>
#endif
#include<stdio.h>
#include<stdlib.h>
#include"mysql.h"//我的機器上該文件在/usr/local/include/mysql下

//定義資料庫操作的宏,也可以不定義留著後面直接寫進代碼
#defineSELECT_QUERY"selectusernamefromtbb_userwhereuserid=%d"

intmain(intargc,char**argv)//char**argv相當於char*argv[]
{
MYSQLmysql,*sock;//定義資料庫連接的句柄,它被用於幾乎所有的MySQL函數
MYSQL_RES*res;//查詢結果集,結構類型
MYSQL_FIELD*fd;//包含欄位信息的結構
MYSQL_ROWrow;//存放一行查詢結果的字元串數組
charqbuf[160];//存放查詢sql語句字元串

if(argc!=2){//檢查輸入參數
fprintf(stderr,"usage:mysql_select<userid> ");
exit(1);
}

mysql_init(&mysql);
if(!(sock=mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))){
fprintf(stderr,"Couldn'tconnecttoengine! %s ",mysql_error(&mysql));
perror("");
exit(1);
}

sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
if(mysql_query(sock,qbuf)){
fprintf(stderr,"Queryfailed(%s) ",mysql_error(sock));
exit(1);
}

if(!(res=mysql_store_result(sock))){
fprintf(stderr,"Couldn'tgetresultfrom%s ",mysql_error(sock));
exit(1);
}

printf("numberoffieldsreturned:%d ",mysql_num_fields(res));

while(row=mysql_fetch_row(res)){
printf("Theruserid#%d'susernameis:%s ",atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0])))?"NULL":row[0]));
puts("queryok! ");
}

mysql_free_result(res);
mysql_close(sock);
exit(0);
return0;//.為了兼容大部分的編譯器加入此行
}
編譯的時候,使用下面的命令
gcc-omysql_select./mysql_select.c-I/usr/local/include/mysql-L/usr/local/lib/mysql-lmysqlclient(-lz)(-lm)後面兩個選項可選,根據您的環境情況
運行的時候,執行下面的命令
./mysql_select1
將返回如下結果:
numberoffieldsreturned:1
Theruserid#1'susernameis:Michael
queryok!

㈤ C語言函數庫 怎樣移植到嵌入式系統中 比如C的 數學函數 怎樣用在 keil4編譯器中

大多數嵌入式C編譯器都自帶標准C庫的,像數學函數這樣的庫keil裡面是有的,你到keil的安裝目錄下去搜索下*.h;有很多庫頭文件。
應該是#include <math.h> 就可以用了;如果發現Link不過,就需要項目屬性去設置下,把庫包含進來。
keil上一些平台相關的庫需要做些介面移植才能使用,比如printf;平台不相關的直接使用就是了。

㈥ 什麼是嵌入式資料庫SQlite

SQlite就是一個精簡版的SQL庫,可以不用SQL Server服務後台支持的情況下,實現選擇、刪除等SQL命令,主要用在獨立的C/C++/Java客戶端程序里。

㈦ 小白自學嵌入式要從哪裡開始求教

嵌入式產品已經改變了我們的日常生活和生產,我們的日常生活和生產也離不開嵌入式的產品,所以這個行業是個能夠長久發展的行業,因為涉及行業面比較廣,產業規模特別大,所以用人需求也是非常多的。因為是高新技術產業,企業給的薪水也是非常可觀,應屆畢業生大多集中在6000~8000,一年工作經驗的大多9000~12000,能有三年經驗大多15000~20000,五年經驗以上工作經驗能拿到30萬年薪以上。新手小白想要學習嵌入式系統該怎麼學呢?

一、基礎學習
1.linux系統是我們學嵌入式的操作平台,所以你需要好好的熟悉這個系統,熟悉好了你才可以進行下一步。
2.學習嵌入式,編程是基礎的,所以C語言是需要必須精通的,推薦視頻嵌入式linuxC語言學習視頻。
3.數據結構和一些演算法的掌握,這些知識掌握的較精,才能為將來做項目打下基礎。
以上是基礎部分,這部分內容主要是一些理論知識,先了解嵌入式這個行業,了解嵌入式產品的一個基本的開發流程,這對後續的開發有很大的幫助。
二、 嵌入式系統核心開發
1.嵌入式應用編程
2.嵌入式Linux並發程序設計
3.嵌入式網路編程
4.嵌入式資料庫開發
5.嵌入式Linux應用綜合項目
6.C++,QT開發
三、嵌入式底層
嵌入式的底層的學習是在學習嵌入式必須涉及到的,如何把你的程序在開發板上進行,就會接觸系統移植,內核開發等,這也算是嵌入式頂層的東西了,所以你需要從嵌入式Linux系統開發,以及驅動開發基礎,你都要了解一下。
四、就是嵌入式的實踐問題了
我們要多鍛煉,多接觸項目,要理論和實踐相結合這樣才好.

㈧ 嵌入式開發要學哪些課程

嵌入式開發的必學課程:C語言,C++,操作系統,計算機組成原理,linux編程,51單片機,arm,硬體編程語言,模擬電路&數字電路。
嵌入式培訓分幾個階段的學習,從基礎到實戰的練習,一點一點學習和掌握這門技術。學習的課程內容包含:嵌入式高級C語言、嵌入式設備及GUI開發、嵌入式Linux高級程序設計、Linux高級網路程序設計、資料庫開發、面向對象高級語言程序設計、物聯網、CotexA53 Linux平台驅動開發及真實的企業實戰項目。
想要學好嵌入式技術,嵌入式軟體開發工程師,從事領域很寬泛,特別是工業控制、消費電子與通信設備三大領域,因為就業面很大,所以人才需求也大。現在智能硬體也比較火,這方面的發展也會大大拓展嵌入式軟體開發工程師的就業機會。再者,嵌入式硬體工程師,需求沒有嵌入式軟體開發工程師大,但因為做硬體門檻會高些,所以這個方向如果做的比較專業,薪資絕對不會低。

㈨ C語言中使用嵌入式sql

嵌入式SQL程序的VC+SQL server 2000實現的環境配置

嵌入SQL的C應用程序具體到VC++6.0, SQL Server2000 下調試可分為五步:1、環境初始化;2、預編譯;3、編譯;4、連接;5、運行。下面就其中重要的的操作方法給以詳細說明。
1、環境初始化
(1) SQL Server2000為其嵌入式SQL提供了一此特殊的介面;默認的安裝方式沒有安裝這此介面;因此,需要把devtools.rar解壓到SQLServer的系統日錄下(即文件夾devtools中的所有文件);如果操作系統安裝在C盤,則SQL Server的系統目錄是C:\Program Files\Microsoft SQL Server。(或 在安裝Microsoft SQL Server 2000時選擇安裝Development Tools,為使用嵌入式SQL語言准備必要的頭文件和庫文件。)
( 2)初始化Visual C++ 6.0編譯器環境。在命令行方式下運行文件\Microsoft Visual Studio\VC98\Bin\vcvars32.bat。
(3)初始化SQL Server的預編譯環境。在命令行方式下運行文件:\Devtools\samples\esqlc\setenv.bat。
( 4) VC++6.0環境配置。具體配置分為如下三步[:
①Tools->options->directories->Include Files:添加 C:\Program Files\Microsoft SQL Server\devtools\include。將SQL server自帶的用於資料庫開發的頭文件包含到工程環境中。
②Tools->options->directories->Lib Files:添加C:\Program Files\Microsoft SQL Server\devtools\x861ib。將開發用到的包包含到工程中。
③project->Settings->Link->Object/Library Moles,添加庫文件:SQLakw32.lib, Caw32.lib。這兩個文件之間用空格分開。

2、預編譯
C語言編譯程序不能識別應用程序中的SQL語句,需要經過預處理程序將其轉換成C語句。SQL Server的預處理程序是nsqlprep.exe。 nsqlprep.exe在SQL Server安裝日錄的MSSQL\Binn下。若SQL Server資料庫採用的是默任安裝方式,則需要把binn.rar的內容拷貝到指定目錄下。

Microsoft SQL Server 2000提供的預編譯程序nsqlprep.exe,用於對嵌入式SQL程序進行預編譯處理,生成C語言源程序.實際上就是將嵌入式SQL程序中的嵌入式SQL語句替換為對運行時庫文件Sqlakw32. dll的函數調用,接著運行時庫文件調用動態連接庫Ntwdblib. dll通過網路來存取Microsoft SQL Server 2000資料庫伺服器.
預編譯程序nsqlprep的常用語法為:
nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password
其中ESQL_File是要預編譯的嵌入式SQL程序;/SQLACCESS通知nsqlprep自動地為嵌入式SQL程序中的靜態SQL語句創建相應的存儲過程;/DB server_name.database_name指明要連接的伺服器以及資料庫名稱;/PASS login.password給出登錄名及相應的口令.

下面的程序demo.sqc實現了從資料庫伺服器hushaobo的資料庫pubs中的authors表中讀取au_lname為white的人對應的 au_fname 值,並保存到變數first_name 中顯示出來。(連接資料庫的用戶為sa,對應密碼為1982)

#include<stdio.h>
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
char first_name[40];
char last_name[]="White";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO hushaobo.pubs
USER sa.1982;
EXEC SQL SELECT au_fname INTO :first_name from authors WHERE au_lname = :last_name;
EXEC SQL DISCONNECT ALL;
printf("first name: %s \n",first_name);
}

在命令行下運行:nsqlprep demo.sqc /SQLACCESS /DB hushaobo.pubs /PASS sa.1982
則生成demo.c,將該文件添加到VC工程中編譯即可。

3、編譯,連接與運行
在VC++6.0中創建一個 "WIN32 Console Application"的Proiect,然後將預編譯生成的c文件加入Proiect,編譯連接即可生成訪問SQL Server的可執行程序。 Visual C++ 6.0進行編譯連接時需要用到動態鏈接庫SQLakw32.d11與SQLaiw32.d11;盡管這兩個文件已經隨同binn.rar被拷貝到SQLServer安裝目錄的MSSQL\Binn文件夾下,但仍然需要把它們的路徑加到系統路徑變數中,以使得程序運行時能找到它們,具體添加方法如下:
方法1:把這兩個文件拷貝到操作系統目錄下的system32子目錄中。
方法2:我的電腦->屬性->高級->環境變數->path->編輯,在變數值中加入路徑值;新路徑與已有路徑間用;間隔。

注意調適程序時,文件名中不要包含cursor,否則可能會出錯。

㈩ 嵌入式要學三個階段嗎

嵌入式要學三個階段如下:

第一階段:基礎與理論階段。

主要包括一些理論知識,你至少了解這行業吧,基本的Linux系統使用;其次就是嵌入式核心開發語言C語言(必須精通);了解C語言數據結構及經典演算法編程;最後就是要了解嵌入式產品的一個基本的開發流程,這對後續的開發有很大的幫助,不至於是那麼的迷茫。

第二階段:嵌入式系統核心開發。

至少這些是你要學會的,當前應用層的開發挺多,特別剛入行前期,神馬驅動的、移植的相關的可能你還不熟練,找工作就靠下面這些知識點了。

嵌入式 Linux應用編程。

嵌入式 Linux並發程序設計。

嵌入式 Linux網路編程。

嵌入式資料庫開發。

嵌入式 Linux應用綜合項目。

ARM處理器編程。

ARM硬體介面開發。

第三階段:底層。

嵌入式底層一般會涉及到,如何把你寫的程序移植到開發板上運行,那麼就會接觸到系統移植、內核驅動開發等等,這是嵌入式工程師最高境界。主要要學以下這些:

嵌入式Linux系統開發。

嵌入式Linux內核開發。

嵌入式Linux驅動開發基礎。

嵌入式Linux驅動高級開發。

IEEE(Institute of Electrical and Electronics Engineers,美國電氣和電子工程師協會)對嵌入式系統的定義:「用於控制、監視或者輔助操作機器和設備的裝置」。原文為:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。

嵌入式系統是一種專用的計算機系統,作為裝置或設備的一部分。通常,嵌入式系統是一個控製程序存儲在ROM中的嵌入式處理器控制板。事實上,所有帶有數字介面的設備,如手錶、微波爐、錄像機、汽車等,都使用嵌入式系統,有些嵌入式系統還包含操作系統,但大多數嵌入式系統都是由單個程序實現整個控制邏輯。

從應用對象上加以定義,嵌入式系統是軟體和硬體的綜合體,還可以涵蓋機械等附屬裝置。國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。