这个要看你的平台的,什么数据库,什么 *** 作系统,什么开发工具
目前,数据库基本都支持SQL语言的(LZ的就是SQL语言),而不同的数据库对C支持的方式也不同
如windwos平台,大部分数据库都可用ADO
当然,数据库本身也会提供C语言开发
如oracle,支持proc,oci等
先找本数据库的书看下,明白SQL语言后再参考不同的平台,看下你而要的数据库的开发方式
示例代码:
// name: queryc
// This prog is used to test C/C++ API for sqlite3 It is very simple,ha !
// Author : zieckey All rights reserved
// data : 2006/11/18
#include <stdioh>
#include <stdlibh>
#include "sqlite3h"
#define _DEBUG_
int main( void )
{
sqlite3 db=NULL;
char zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckeydb", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckeydb successfully!
Congratulations! Have fun ! ^-^
");
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char sql = " CREATE TABLE SensorData(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
//插入数据
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 189 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011306', 164 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char azResult; //二维数组存放结果
//查询数据
sql = "SELECT FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d
" , nrow , ncolumn );
printf( "
The result of querying is :
" );
for( i=0 ; i<( nrow + 1 ) ncolumn ; i++ )
printf( "azResult[%d] = %s
", i , azResult[i] );
//释放掉 azResult 的内存空间
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
sqlite3_close(db); //关闭数据库
return 0;
}
我们这里用到了一个查询的语句是 "SELECT FROM SensorData " ,
在C语言中对应的函数接口是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
这个函数接口的解释在程序中已经注释。
下面我们编译运行下看看,
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc queryc -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
queryc:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# /aout
You have opened a sqlite3 database named zieckeydb successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 189
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306
azResult[14] = 164
zErrMsg = (null)
这里我们可以看到,azResult 的前面 5 个数据正好是我们的表 SensorData 的列属性,
之后才是我们要查询的数据。所以我们的程序中才有 i<( nrow + 1 ) ncolumn 的判断条件:
for( i=0 ; i<( nrow + 1 ) ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
输出中有 zErrMsg = (null) 这样的字句,这是 zErrMsg 保留的错误信息,
正如你所看到的,zErrMsg 为空,表明在执行过程中没有错误信息。
举个例子,连接SQL:
// 打开数据库
strDBClassFormat(_T("Provider=MicrosoftJetOLEDB40;Data Source=%s;Jet OLEDB:Database Password=%s"), m_strUnEntryptMdbFilePath,m_strMDBPassword);
// 创建连接
HRESULT hr = m_pConnectionCreateInstance(_uuidof(Connection));
_ConnectionPtr m_pConnection->Open(m_strDBClass,_T(""),_T(""),adConnectUnspecified);
// 声明表单指针
_RecordsetPtr pBandRecordset;
以上就是关于c语言能实现数据库编写吗全部的内容,包括:c语言能实现数据库编写吗、如何在Linux下用C语言 *** 作数据库sqlite3、用C语言怎么实现与数据库的连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)