gpt4 book ai didi

c - 如何读取 firebird 数据库查询结果大小?

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:50 25 4
gpt4 key购买 nike

我正在做与 firebird 数据库的 C 接口(interface)。我做了一些查询操作。我想知道如何读取结果大小?

下面是代码。我已经创建了一些值并将其插入到表中。我想读取结果的大小。

#include <stdio.h>
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"

static char *createTable="CREATE TABLE newex (Id int)"; //query for creating data table
static char *Insertvalues="INSERT INTO newex values (1)";//doing insertion into the

//above created table

int SQLOpen(void)
{
ISC_STATUS status_vector[20];
isc_tr_handle transactionHandle = NULL; //transaction handle
isc_db_handle database = SQLGetDatabase();//database handle
char logInData [256], *dpb, *p;
short bufferLength;
User_Credentials credentials;

sprintf(logInData, "%c%c%c%c%c%c%s%c%c%s", isc_dpb_version1,
isc_dpb_num_buffers,
1,
90,
isc_dpb_user_name,
strlen("SYSDBA"),
"SYSDBA",
isc_dpb_password,
strlen("masterkey"),
"masterkey"); //passing user //credentials to connect to the database

bufferLength = strlen(logInData);

if (isc_attach_database(status_vector, strlen(DATABASE_PATH), DATABASE_PATH, &DatabaseHandle,bufferLength, logInData)) // connecting to database
{
SQLTestForErrors(status_vector);
throw(ConnectionError, "");
}
return 1;
}
char** SQLQuery(char *query, uint maxRows)
{
isc_tr_handle transactionHandle = NULL;
isc_db_handle database = SQLGetDatabase();
short bufferLength;
char dpb_buffer[256], *dpb, *p;
ISC_STATUS status_vector[20];


isc_start_transaction(status_vector, &transactionHandle, 1, &database, 0, NULL);

if (isc_dsql_execute_immediate(status_vector, &database, &transactionHandle, 0, query, 1, NULL)) //query operations 'create/insert'
{
SQLTestForErrors(status_vector);
throw(QueryError, "");

}
isc_commit_transaction(status_vector, &transactionHandle);
return testString;
}

int main()
{
//struct Folder_table;
e4c_using_context(E4C_TRUE)
{

SQLOpen();
SQLQuery(createTable);
SQLQuery(Insertvalues);
}

}

最佳答案

您不能提前:结果集在您读取行时具体化(使用 isc_fetch):直到您读取所有行(此时您可以自己计算,也可以通过信息请求查询)。

但是我注意到您尝试使用 isc_dsql_execute_immediate。您只能将 isc_dsql_execute_immediate 用于 ddl 和生成一行的查询(您需要为多行准备和执行)。

关于c - 如何读取 firebird 数据库查询结果大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com