는 시나리오 리눅스 플랫폼에서 bytea와 열이 옥텟에 인쇄 가능한 문자를 변환 : 내가 데이터베이스에서 blobdata 열을 쿼리 할 때PostgreSQL 데이터베이스 여기
CREATE TABLE amaaa
(
laaaid integer NOT NULL DEFAULT 0,
blobdata bytea
)
INSERT INTO amaaa(laaaid)VALUES (1);
SQLRETURN connect()
{
SQLRETURN ret; /* ODBC API return status */
/* Allocate an environment handle */
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myestenv);
/* We want ODBC 3 support */
if (!ret) ret = SQLSetEnvAttr(myestenv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
/* Allocate a connection handle */
if (!ret) ret = SQLAllocHandle(SQL_HANDLE_DBC, myestenv, &dbc);
SQLSetConnectOption(dbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON);
const char* connectStr = "ByteaAsLongVarBinary=1;LFConversion=0;DSN=AMPG961;UID=postgres;PWD={postgres}";
if (!ret) ret = SQLDriverConnect(dbc, NULL, (SQLCHAR*)connectStr, strlen(connectStr), NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
/* Allocate a statement handle */
if (!ret) ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret) getErr(ret);
return ret;
}
void disconnect()
{
/* Disconnect and free all the handles */
SQLRETURN ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
ret = SQLDisconnect(dbc);
ret = SQLFreeHandle(SQL_HANDLE_DBC, dbc);
ret = SQLFreeHandle(SQL_HANDLE_ENV, myestenv);
}
const USHORT LEN = 3;
SQLRETURN update()
{
SQLRETURN ret = connect();
if (ret) return ret;
const unsigned char vLob[LEN] = "v=";
long lBlobLen = LEN - 1;
int lMainRecordId = 1;
SQLLEN cbValue = lBlobLen;
ret = SQLPrepare(stmt, (SQLCHAR*)"UPDATE \"amaaa\" set blobdata = ? where laaaid = ?;", SQL_NTS);
if (!ret) ret = SQLBindParameter(stmt, 1, SQL_PARAM_INPUT,
SQL_BINARY, SQL_LONGVARBINARY, 0,
0, (void*)vLob, lBlobLen, &cbValue);
SQLLEN cbLen = 4;
ret = SQLBindParameter(stmt, 2, SQL_PARAM_INPUT,
SQL_C_LONG, SQL_INTEGER, 0,
0, (void*)&lMainRecordId, sizeof(long), &cbLen);
if (!ret) ret = SQLExecute(stmt);
if ((ret != SQL_SUCCESS) && (ret != SQL_NEED_DATA) && (ret != SQL_SUCCESS_WITH_INFO)) {
printf("SQLExecDirect Failed\n\n");
getErr(ret);
disconnect();
}
return ret;
}
, 값은 항상, 사실은 내가 값을 '075 \ v에' 내가 입력 한 것은 'v ='; 하지만 Windows 플랫폼에서는 동일한 코드가 문제가되지 않습니다. 그것에 대해 궁금하십니까?
미리 감사드립니다.
질문이 명확하지 않습니다. 테이블에 아무 것도 삽입되지 않으므로 비어 있어야합니다. 이 질의를 갖는'odbc' 태그,'C++'보다는 abd'c'가 있어야합니다. –
조언 해 주셔서 감사합니다. – Ramin