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

嵌入式c資料庫

發布時間: 2022-05-23 02:41:43

⑴ 請問誰能告訴我c語言中嵌入式系統程序是什麼意思大概或者形象化的說一下就行了。

C語言 可以支持相當多的操作系統,緣以她發明的早。。二是當時高級語言也就她 設計的好。所以眾多操作系統都為C語言留介面,這就是C為什麼兼容相當多的操作系統,一直到今天。
所謂嵌入式系統程序,先首你要了解什麼是嵌入式操作系統,在工業計算機自動化,平板電腦上,工業顯示屏/機箱,如今的智能手機的操作系統。在這些平台上用C語言開發出來的程序就是嵌入式系統程序

⑵ 如何學習嵌入式c語言編程

你這問題有點廣。。。我就說一下我的經歷體驗吧

首先是C基礎,必須非常熟練!主要是指針、鏈表,這個階段至少要寫幾個幾百行的小程序(盡量無BUG,下同)
接下來可以用一些API,比如資料庫、套接字、一些圖形界面庫等,應該可以寫一兩千到三四千行的程序了
然後才能正式開始嵌入式學習,自己先摸索著寫個操作系統什麼的吧,從這個階段開始,已經不重視代碼量了,具體的到了這個階段就知道

⑶ c語言怎麼有個嵌入式sql鏈接金倉資料庫

(1) 資料庫內核· 操作系統平台跨越多種操作系統平台,可運行於Windows、Linux、Solaris等操作系統平台上,客戶端與伺服器都可跨越操作系統平台。· 數據存儲支持TB級數據量,數據文件自動管理,無須人工干預。·

⑷ 什麼是嵌入式資料庫SQlite

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

⑸ 嵌入式SQL,使用C或C++訪問學生管理資料庫,實現增刪改查功能

一個教材管理系統,給你參考下 void shumingsearch(struct book *head) /*按教材名稱查找*/ { struct book *p; char name[20]; int c; if(head==NULL) {printf("未打開任何文件");getchar();return;} printf("1,查找專業 2,查找教材名稱:"); ...

⑹ C 嵌入式sql查詢結果和資料庫被容不符

...貼代碼,這樣誰都不知道是怎麼回事!

⑺ 如何用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)

⑻ 嵌入式開發需要掌握哪些知識

嵌入式系統是計算機軟體和硬體的綜合體,崗位包括:ESE(嵌入式軟體工程師);ADE(嵌入式應用開發工程師);FWE(嵌入式底層開發工程師);FEC(嵌入式固件開發工程師),你可以先下載全套嵌入式視頻課自學,看是否感興趣。

課程內容主要包括:

①C,Java核心編程:c語言核心編程,Java核心編程;

②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;

③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;

④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;

⑤大型項目實踐:每期安排各類型真實的項目,詳細可以點我下載資料。

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。

⑼ 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,否則可能會出錯。

⑽ 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!