Document Type | Technical Information
Category | App Development
Applicable Product Version | Tibero 7FS02PS
Document Number | TDETI011
Overview
This document provides sample codes for ODBC, JDBC, and ESQL that perform Drop, Create, Insert, Update, Delete, and Select operations on a table containing number, varchar, date, and clob columns.
Applicable Product Information
[tibero7@rocky9.4:T724:/home/tibero]tbboot -version
Tibero 7 (DB 7.2.4) Build 303667
Linux bistro-build-centos_8.4 5.15.0-134-generic #145~20.04.1-Ubuntu SMP Mon Feb 17 13:27:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux version (little-endian)
Patch files (FS02PS_700093a FS02PS_700103a FS02PS_344166f FS02PS_700110a FS02PS_342949f)
Compiled with "cc -no-pie -ggdb -fstack-protector-all -fno-strict-aliasing -fno-omit-frame-pointer -pipe -O3 -D_OPT_COMPILED -U_FORTIFY_SOURCE -D_USE_VIP -Wall -W -Werror-implicit-function-declaration -Wno-unused-parameter -Wpointer-arith -Wdeclaration-after-statement -DHAVE_CONFIG_H -D_WORDSIZE=64 -D_OS_LINUX -D_LINUX_X86_64 -D_X86 -DUSE_ASSERT -DTSAM -DTSAM_NO_ESDS_SEQUENCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_USE_FSYNC -D_CHECK_LICENSE -D_STBLOG -D_TAC -DFD_SETSIZE=8192 -D_CM_OBSERVER -D_USE_FALLOCATE -D_GNU_SOURCE -D_GNU_SOURCE -D_GNU_SOURCE -D_GNU_SOURCE -DHAVE_EPOLL"
Compiled at Oct 13 2025 01:59:51 build seq 303667 init rev {2023-11-24}
Method
Test 1. ODBC Code
- .odbc.ini File Configuration and Test [ODBC Data Source] Tibero7 = Tibero 7 ODBC Driver [ODBC] Trace = 1 TraceFile = /tmp/odbc.trace [Tibero7] Driver = /home/tibero7/client/lib/libtbodbc.so Description = Tibero7 ODBC Datasource SID = T724 User = tibero Password = tmax iodbctest "DSN=Tibero7;UID=tibero;PWD=tmax" [tibero7@rocky9.4:T724:/home/tibero/iodbc/bin]iodbctest "DSN=Tibero7;UID=tibero;PWD=tmax" iODBC Demonstration program This program shows an interactive SQL processor Driver Manager: 03.52.0709.0909 Driver: 07.02.0218 (libtbodbc.so) SQL>select * from TEST_TAB; NUMVAL |TEXTVAL |DATEVAL |CLOBDATA -------------------------------------------------------+------------------------------+-------------------+------------------------------ result set 1 returned 0 rows.
- odbc_test.c File
//#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sqlcli.h>
// Global variables
#define SQL_LEN 1000
#define DATA_LEN 100
#define JOB_LEN 9
#define _SUCCESS 0
int main()
{
// Environment variables
SQLRETURN retval;
SQLHENV henv;
SQLHDBC hdbc;
// SQL variables
SQLHSTMT hstmt;
SQLCHAR szName[50],szId[5];
SQLINTEGER sqlnts=SQL_NTS;
SQLCHAR szNum[10],szText[20],szDate[20],szClob[50];
SQLINTEGER lob_loc = 0;
SQLLEN ind = 0;
int offset = 1;
SQLLEN lob_ind = 0;
SQLBIGINT lob_len = 0;
SQLINTEGER read_char_len = 0;
// Allocate memory for ODBC environment setup
retval = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
// Set ODBC environment attribute (ODBC version 3.0)
retval = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
// Allocate memory for ODBC connection
retval = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
// Set connection attributes and connect to database using ODBC
SQLSetConnectAttr(hdbc,5,(void*)SQL_LOGIN_TIMEOUT,0);
retval=SQLConnect(hdbc,
(SQLCHAR *)"T724", SQL_NTS, //T2KSC560, T1UTF8
(SQLCHAR *)"tibero", SQL_NTS,
(SQLCHAR *)"tmax", SQL_NTS);
// Allocate memory for ODBC SQL statements
retval = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
// Execute ODBC DDL / DML
// Execute DROP statement
retval = SQLExecDirect(hstmt, (SQLCHAR *) "DROP TABLE TEST_TAB", SQL_NTS);
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
printf("SQL DROP query succeeded.\n");
else
printf("SQL DROP query failed.\n");
// Execute CREATE statement
retval = SQLExecDirect(hstmt, (SQLCHAR *) "CREATE TABLE TEST_TAB ( NUMVAL NUMBER, TEXTVAL VARCHAR(30), DATEVAL DATE, CLOBDATA CLOB)", SQL_NTS);
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
printf("SQL create query succeeded.\n");
else
printf("SQL create query failed.\n");
// Execute INSERT statement
retval = SQLExecDirect(hstmt, (SQLCHAR *) "INSERT INTO TEST_TAB VALUES(1, 'James', '2025/11/25' , 'CLOB Data for Test')", SQL_NTS);
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO){
SQLExecDirect(hstmt, (SQLCHAR *) "commit;", SQL_NTS);
printf("SQL insert query succeeded.\n");
}else{
SQLExecDirect(hstmt, (SQLCHAR *) "commit;", SQL_NTS);
printf("SQL insert query failed.\n");
}
// Execute SELECT statement
retval = SQLExecDirect(hstmt,(SQLCHAR*)"select * from TEST_TAB",SQL_NTS);
retval = SQLBindCol(hstmt,4,SQL_C_CLOB_LOCATOR,(SQLPOINTER)&lob_loc, 0, &ind);
if(retval == SQL_SUCCESS){
printf("================== TEST_TAB Result of Insert =================== \n%10s%8s%13s%27s\n"
,"Number","Text","Date","Clob");
while(1){
retval = SQLFetch(hstmt);
if(retval == SQL_ERROR || retval == SQL_SUCCESS_WITH_INFO)
printf("SQLFetch failed.\n");
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hstmt,1,SQL_C_CHAR,szNum,10,&sqlnts);
SQLGetData(hstmt,2,SQL_C_CHAR,szText,20,&sqlnts);
SQLGetData(hstmt,3,SQL_C_CHAR,szDate,20,&sqlnts);
SQLLobGetLength(hstmt, lob_loc, &lob_len, NULL);
read_char_len = lob_len;
SQLLobGetData2(hstmt,lob_loc,offset,(SQLINTEGER *)&read_char_len,SQL_C_CHAR,szClob, sizeof(szClob),&lob_ind);
printf("%10s%8s%13s%27s\n", szNum,szText,szDate,szClob);
}
else
{
break;
}
}
printf("================================================================\n");
}
// Execute UPDATE statement
retval = SQLExecDirect(hstmt, (SQLCHAR *) "UPDATE TEST_TAB SET TEXTVAL = 'David' WHERE NUMVAL = '1'", SQL_NTS);
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
{
SQLExecDirect(hstmt, (SQLCHAR *) "commit;", SQL_NTS);
printf("SQL update query succeeded.\n");
}else{
SQLExecDirect(hstmt, (SQLCHAR *) "rollback;", SQL_NTS);
printf("SQL update query failed.\n");
}
// Execute SELECT statement
retval = SQLExecDirect(hstmt,(SQLCHAR*)"select * from TEST_TAB",SQL_NTS);
retval = SQLBindCol(hstmt,4,SQL_C_CLOB_LOCATOR,(SQLPOINTER)&lob_loc, 0, &ind);
if(retval == SQL_SUCCESS){
printf("================== TEST_TAB Result of Update =================== \n%10s%8s%13s%27s\n"
,"Number","Text","Date","Clob");
while(1){
retval = SQLFetch(hstmt);
if(retval == SQL_ERROR || retval == SQL_SUCCESS_WITH_INFO)
printf("SQLFetch failed.\n");
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hstmt,1,SQL_C_CHAR,szNum,10,&sqlnts);
SQLGetData(hstmt,2,SQL_C_CHAR,szText,20,&sqlnts);
SQLGetData(hstmt,3,SQL_C_CHAR,szDate,20,&sqlnts);
SQLLobGetLength(hstmt, lob_loc, &lob_len, NULL);
read_char_len = lob_len;
SQLLobGetData2(hstmt,lob_loc,offset,(SQLINTEGER *)&read_char_len,SQL_C_CHAR,szClob, sizeof(szClob),&lob_ind);
printf("%10s%8s%13s%27s\n", szNum,szText,szDate,szClob);
}
else
{
break;
}
}
printf("================================================================\n");
}
// Execute DELETE statement
retval = SQLExecDirect(hstmt, (SQLCHAR *) "DELETE FROM TEST_TAB WHERE NUMVAL = '1'", SQL_NTS);
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
{
SQLExecDirect(hstmt, (SQLCHAR *) "commit;", SQL_NTS);
printf("SQL delete query succeeded.\n");
}else{
SQLExecDirect(hstmt, (SQLCHAR *) "rollback;", SQL_NTS);
printf("SQL delete query failed.\n");
}
// Execute SELECT statement
retval = SQLExecDirect(hstmt,(SQLCHAR*)"select * from TEST_TAB",SQL_NTS);
retval = SQLBindCol(hstmt,4,SQL_C_CLOB_LOCATOR,(SQLPOINTER)&lob_loc, 0, &ind);
if(retval == SQL_SUCCESS){
printf("================== TEST_TAB Result of Delete =================== \n%10s%8s%13s%27s\n"
,"Number","Text","Date","Clob");
while(1){
retval = SQLFetch(hstmt);
if(retval == SQL_ERROR || retval == SQL_SUCCESS_WITH_INFO)
printf("SQLFetch failed.\n");
if(retval == SQL_SUCCESS || retval == SQL_SUCCESS_WITH_INFO)
{
SQLGetData(hstmt,1,SQL_C_CHAR,szNum,10,&sqlnts);
SQLGetData(hstmt,2,SQL_C_CHAR,szText,20,&sqlnts);
SQLGetData(hstmt,3,SQL_C_CHAR,szDate,20,&sqlnts);
SQLLobGetLength(hstmt, lob_loc, &lob_len, NULL);
read_char_len = lob_len;
SQLLobGetData2(hstmt,lob_loc,offset,(SQLINTEGER *)&read_char_len,SQL_C_CHAR,szClob, sizeof(szClob),&lob_ind);
printf("%10s%8s%13s%27s\n", szNum,szText,szDate,szClob);
}
else
{
break;
}
}
printf("================================================================\n");
}
// Disconnect
SQLExecDirect(hstmt, (SQLCHAR *) "commit;", SQL_NTS);
SQLDisconnect(hdbc);
SQLFreeConnect( hdbc );
SQLFreeEnv( henv );
return 0;
}
- Compile and Run
/*
cc -m64 -O -I$TB_HOME/client/include -L$TB_HOME/client/lib -c odbc_test.c
cc -m64 -O -I$TB_HOME/client/include -o odbc_test.bin -L$TB_HOME/client/lib -ltbcli -lclialloc odbc_test.o
*/
[tibero7@rocky9.4:T724:/home/tibero/work/source]cc -m64 -O -I$TB_HOME/client/include -L$TB_HOME/client/lib -c odbc_test.c
[tibero7@rocky9.4:T724:/home/tibero/work/source]cc -m64 -O -I$TB_HOME/client/include -o odbc_test.bin -L$TB_HOME/client/lib -ltbcli -lclialloc odbc_test.o
[tibero7@rocky9.4:T724:/home/tibero/work/source]ll -rlt
total 1836
-rw-r-----. 1 tibero7 tibero 1717885 Nov 3 14:06 tibero7-jdbc.jar
-rwxr-x---. 1 tibero7 tibero 5228 Nov 3 14:46 jdbc_test.java
-rw-r-----. 1 tibero7 tibero 4816 Nov 3 15:09 jdbc_test.class
-rwxr-x---. 1 tibero7 tibero 97 Nov 3 15:23 compile
-rwxr-x---. 1 tibero7 tibero 5142 Nov 3 16:13 esql_test.tbc
-rwxr-x---. 1 tibero7 tibero 712 Nov 3 16:59 Makefile.tbc
-rw-r-----. 1 tibero7 tibero 46427 Nov 3 16:59 esql_test.c
-rwxr-x---. 1 tibero7 tibero 36856 Nov 3 16:59 esql_test
drwxr-x---. 3 tibero7 tibero 93 Nov 4 13:45 ..
-rwxr-x---. 1 tibero7 tibero 7304 Nov 4 16:03 odbc_test.c
-rw-r-----. 1 tibero7 tibero 8072 Nov 4 16:03 odbc_test.o
drwxr-x---. 2 tibero7 tibero 4096 Nov 4 16:04 .
-rwxr-x---. 1 tibero7 tibero 18088 Nov 4 16:04 odbc_test.bin
[tibero7@rocky9.4:T724:/home/tibero/work/source]odbc_test.bin
SQL DROP query succeeded.
SQL create query succeeded.
SQL insert query succeeded.
================== TEST_TAB Result of Insert ===================
Number Text Date Clob
1 James 2025/11/25 CLOB Data for Test
================================================================
SQL update query succeeded.
================== TEST_TAB Result of Update ===================
Number Text Date Clob
1 David 2025/11/25 CLOB Data for Test
================================================================
SQL delete query succeeded.
================== TEST_TAB Result of Delete ===================
Number Text Date Clob
================================================================
Test 2. JDBC Code
- jdbc_test.java File
import java.sql.*;
import java.io.*;
import java.util.*;
import com.tmax.tibero.jdbc.*;
import com.tmax.tibero.jdbc.ext.*;
//needed for new CLOB classes
public class jdbc_test
{
public static void main (String args [])
{
Connection conn = null;
PreparedStatement pstmt = null;
Statement stmt = null;
ResultSet rs = null;
// Connection Information
String url = "jdbc:tibero:thin:@localhost:8629:T724";
String user = "tibero";
String pw = "tmax";
String query = null;
try{
// Load the Oracle JDBC driver
Class.forName("com.tmax.tibero.jdbc.TbDriver");
// Connect to the database
conn = DriverManager.getConnection (url, user, pw);
// DROP Table
try{
stmt = conn.createStatement();
query = "DROP TABLE TEST_TAB ;";
int dropCount = stmt.executeUpdate(query);
if (dropCount == 0)
System.out.println("SQL DROP query succeeded");
else
System.out.println("SQL DROP query failed.");
} catch (SQLException sqle) {
}
// CREATE Table
query = "CREATE TABLE TEST_TAB( NUMVAL NUMBER, TEXTVAL VARCHAR(30), DATEVAL DATE, CLOBDATA CLOB);";
int createCount = stmt.executeUpdate(query);
if (createCount == 0)
System.out.println("SQL CREATE query succeeded");
else
System.out.println("SQL CREATE query failed.");
// INSERT Data
// Insert Query
query = "INSERT INTO TEST_TAB VALUES( 1, 'james', '2025/11/03' , 'CLOB Data for Test' );";
pstmt = conn.prepareStatement(query);
// Execute Insert Query
int insertCount = pstmt.executeUpdate();
if (insertCount == 1)
System.out.println("SQL Insert query succeeded");
else
System.out.println("SQL Insert query failed." + insertCount);
pstmt.close();
conn.commit();
// SELECT
query = "SELECT * from TEST_TAB ; ";
rs = stmt.executeQuery(query);
String v_num=null;
String v_text=null;
String v_date=null;
String v_clob=null;
System.out.println("================== TEST_TAB Result of Insert ===================");
System.out.println(" Number Text Date Clob ");
while (rs.next()) {
v_num = rs.getString("NUMVAL");
v_text = rs.getString("TEXTVAL");
v_date = rs.getString("DATEVAL");
v_clob = rs.getString("CLOBDATA");
System.out.println(" " + v_num + " " + v_text + " " + v_date + " " + v_clob);
}
System.out.println("================================================================");
// UPDATE
// Update Query
query = "UPDATE TEST_TAB SET TEXTVAL = 'David' WHERE NUMVAL = '1' ";
pstmt = conn.prepareStatement(query);
// Execute Update Query
int updateCount = pstmt.executeUpdate();
if (updateCount == 1)
System.out.println("SQL Update query succeeded");
else
System.out.println("SQL Update query failed." + updateCount);
pstmt.close();
conn.commit();
// SELECT
query = "SELECT * from TEST_TAB ; ";
rs = stmt.executeQuery(query);
v_num=null;
v_text=null;
v_date=null;
v_clob=null;
System.out.println("================== TEST_TAB Result of Update ===================");
System.out.println(" Number Text Date Clob ");
while (rs.next()) {
v_num = rs.getString("NUMVAL");
v_text = rs.getString("TEXTVAL");
v_date = rs.getString("DATEVAL");
v_clob = rs.getString("CLOBDATA");
System.out.println(" " + v_num + " " + v_text + " " + v_date + " " + v_clob);
}
System.out.println("================================================================");
// DELETE
// Delete Query
query = "DELETE FROM TEST_TAB WHERE NUMVAL = '1' ";
pstmt = conn.prepareStatement(query);
// Execute Delete Query
int deleteCount = pstmt.executeUpdate();
if (deleteCount == 1)
System.out.println("SQL Delete query succeeded");
else
System.out.println("SQL Delete query failed." + deleteCount);
pstmt.close();
conn.commit();
// SELECT
query = "SELECT * from TEST_TAB ; ";
rs = stmt.executeQuery(query);
v_num=null;
v_text=null;
v_date=null;
v_clob=null;
System.out.println("================== TEST_TAB Result of Delete ===================");
System.out.println(" Number Text Date Clob ");
while (rs.next()) {
v_num = rs.getString("NUMVAL");
v_text = rs.getString("TEXTVAL");
v_date = rs.getString("DATEVAL");
v_clob = rs.getString("CLOBDATA");
System.out.println(" " + v_num + " " + v_text + " " + v_date + " " + v_clob);
}
System.out.println("================================================================");
}catch(SQLException se){
try{
conn.rollback();
}catch(Exception see){
see.printStackTrace();
}
se.printStackTrace();
}catch(Exception e){
try{
conn.rollback();
}catch(Exception ee){
ee.printStackTrace();
}
e.printStackTrace();
}finally{
try{
rs.close();
pstmt.close();
stmt.close();
conn.close();
}catch(Exception fe){
fe.printStackTrace();
}
}
}
}
- Run
[tibero7@rocky9.4:T724:/home/tibero/work/source]javac -classpath .:tibero7-jdbc.jar jdbc_test.java
[tibero7@rocky9.4:T724:/home/tibero/work/source]ll -rlt
total 1696
drwxr-x---. 3 tibero7 tibero 93 Nov 3 14:02 ..
-rw-r-----. 1 tibero7 tibero 1717885 Nov 3 14:06 tibero7-jdbc.jar
-rwxr-x---. 1 tibero7 tibero 5228 Nov 3 14:46 jdbc_test.java
drwxr-x---. 2 tibero7 tibero 75 Nov 3 15:09 .
-rw-r-----. 1 tibero7 tibero 4816 Nov 3 15:09 jdbc_test.class
[tibero7@rocky9.4:T724:/home/tibero/work/source]java -classpath .:tibero7-jdbc.jar jdbc_test
SQL DROP query succeeded
SQL CREATE query succeeded
SQL Insert query succeeded
================== TEST_TAB Result of Insert ===================
Number Text Date Clob
1 james 2025-11-03 00:00:00 CLOB Data for Test
================================================================
SQL Update query succeeded
================== TEST_TAB Result of Update ===================
Number Text Date Clob
1 David 2025-11-03 00:00:00 CLOB Data for Test
================================================================
SQL Delete query succeeded
================== TEST_TAB Result of Delete ===================
Number Text Date Clob
================================================================
[tibero7@rocky9.4:T724:/home/tibero/work/source]
Test 3. ESQL Code
- Makefile.tbc File
#Server tb*C makefile
TBLIBDIR = $(TB_HOME)/client/lib
#TBLIB = -ltbxa -ltbertl -ltbcli -lclialloc
TBLIB = -ltbxa -ltbertl
TARGET = $(COMP_TARGET)
APOBJS = $(TARGET).o
OBJS = $(APOBJS)
CFLAGS = -g -I$(TB_HOME)/client/include
#
.SUFFIXES : .c
.c.o:
$(CC) $(CFLAGS) -c $<
#
# server compile
#
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) -L$(TBLIBDIR) $(TBLIB) $(OBJS)
rm -f $(OBJS)
$(APOBJS): $(TARGET).tbc
#tbpc iname=$(TARGET) include=$(TB_HOME)/client/include
tbpc iname=$(TARGET) include=/usr/lib/gcc/x86_64-redhat-linux/11/include/\
include=$(TB_HOME)/client/include
$(CC) $(CFLAGS) -c $(TARGET).c
clean:
-rm -f *.o core $(TARGET) $(TARGET).lis
- compile File #!/bin/sh # program compile # #main COMP_TARGET=$1; export COMP_TARGET make -f Makefile.tbc all
- esql_test.tbc File
/*
$ ./compile esql_test
$ ./esql_test
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
/* #include <oci.h> */
#define SQLCODE sqlca.sqlcode
EXEC SQL BEGIN DECLARE SECTION;
int v_num[10];
varchar v_text[10][100];
varchar v_date[10][100];
char i_CLOB[6000];
varchar o_CLOB[10][6001];
char uid[19];
char pwd[19];
int i = 0;
int count;
EXEC SQL END DECLARE SECTION;
int main()
{
strcpy(uid,"tibero");
strcpy(pwd,"tmax");
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
EXEC SQL DROP TABLE TEST_TAB ;
if(SQLCODE == 0) {
printf("SQL DROP query succeeded\n");
}
else {
printf("SQL DROP query failed");
exit(1);
}
// CREATE Table
EXEC SQL CREATE TABLE TEST_TAB (NUMVAL NUMBER, TEXTVAL VARCHAR(30), DATEVAL DATE, CLOBDATA CLOB);
if(SQLCODE == 0) {
printf("SQL CREATE query succeeded\n");
}
else {
printf("SQL CREATE query failed");
exit(1);
}
// Insert Data
EXEC SQL INSERT INTO TEST_TAB(NUMVAL, TEXTVAL, DATEVAL, CLOBDATA) values(1, 'James', sysdate, 'CLOB Data for Test');
if(SQLCODE == 0) {
printf("SQL INSERT query succeeded\n");
}
else {
printf("SQL INSERT query failed");
exit(1);
}
// SELECT Data
// CURSOR DECLARE
EXEC SQL DECLARE tmp_cursor CURSOR FOR
SELECT NUMVAL, TEXTVAL, DATEVAL, DBMS_LOB.SUBSTR(CLOBDATA,dbms_lob.getlength(CLOBDATA),1) FROM TEST_TAB;
// CURSOR OPEN
EXEC SQL OPEN tmp_cursor;
EXEC SQL FETCH tmp_cursor
INTO :v_num, :v_text, :v_date, :o_CLOB;
count = sqlca.sqlerrd[2];
if (sqlca.sqlcode == 0 || sqlca.sqlcode == 1403) {
printf("================== TEST_TAB Result of Insert ===================\n");
printf(" Number Text Date Clob \n");
printf("----------------------------------------------------------------\n");
for(i = 0; i < count; i++)
{
v_text[i].arr[v_text[i].len] = '\0';
v_date[i].arr[v_date[i].len] = '\0';
o_CLOB[i].arr[o_CLOB[i].len] = '\0';
printf(" %d %s %s %s\n", v_num[i], v_text[i].arr, v_date[i].arr, o_CLOB[i].arr);
}
printf("================================================================\n");
}
else {
// printf(" Operation Fail ( SQLCODE = %d ) \n\n", sqlca.sqlcode );
}
EXEC SQL CLOSE tmp_cursor;
// Update Data
EXEC SQL UPDATE TEST_TAB SET TEXTVAL = 'David' WHERE NUMVAL = 1;
if(SQLCODE == 0) {
printf("SQL UPDATE query succeeded\n");
}
else {
printf("SQL UPDATE query failed");
exit(1);
}
// SELECT Data
// CURSOR OPEN
EXEC SQL OPEN tmp_cursor;
EXEC SQL FETCH tmp_cursor
INTO :v_num, :v_text, :v_date, :o_CLOB;
count = sqlca.sqlerrd[2];
if (sqlca.sqlcode == 0 || sqlca.sqlcode == 1403) {
printf("================== TEST_TAB Result of Update ===================\n");
printf(" Number Text Date Clob \n");
printf("----------------------------------------------------------------\n");
for(i = 0; i < count; i++)
{
v_text[i].arr[v_text[i].len] = '\0';
v_date[i].arr[v_date[i].len] = '\0';
o_CLOB[i].arr[o_CLOB[i].len] = '\0';
printf(" %d %s %s %s\n", v_num[i], v_text[i].arr, v_date[i].arr, o_CLOB[i].arr);
}
printf("================================================================\n");
}
else {
// printf(" Operation Fail ( SQLCODE = %d ) \n\n", sqlca.sqlcode );
}
EXEC SQL CLOSE tmp_cursor;
// Delete Data
EXEC SQL DELETE FROM TEST_TAB WHERE NUMVAL = 1;
if(SQLCODE == 0) {
printf("SQL DELETE query succeeded\n");
}
else {
printf("SQL DELETE query failed");
exit(1);
}
// SELECT Data
// CURSOR OPEN
EXEC SQL OPEN tmp_cursor;
EXEC SQL FETCH tmp_cursor
INTO :v_num, :v_text, :v_date, :o_CLOB;
count = sqlca.sqlerrd[2];
if (sqlca.sqlcode == 0 || sqlca.sqlcode == 1403) {
printf("================== TEST_TAB Result of Delete ===================\n");
printf(" Number Text Date Clob \n");
printf("----------------------------------------------------------------\n");
for(i = 0; i < count; i++)
{
v_text[i].arr[v_text[i].len] = '\0';
v_date[i].arr[v_date[i].len] = '\0';
o_CLOB[i].arr[o_CLOB[i].len] = '\0';
printf(" %d %s %s %s\n", v_num[i], v_text[i].arr, v_date[i].arr, o_CLOB[i].arr);
}
printf("================================================================\n");
}
else {
// printf(" Operation Fail ( SQLCODE = %d ) \n\n", sqlca.sqlcode );
}
EXEC SQL CLOSE tmp_cursor;
EXEC SQL COMMIT WORK;
exit(1);
}
- Compile and Run
[tibero7@rocky9.4:T724:/home/tibero/work/source]compile esql_test
#tbpc iname=esql_test include=/home/tibero/tibero7/client/include
tbpc iname=esql_test include=/usr/lib/gcc/x86_64-redhat-linux/11/include/\
include=/home/tibero/tibero7/client/include
tbESQL Precompiler 7
TmaxTibero Corporation Copyright (c) 2020-. All rights reserved.
esql_test.tbc is precompiled successfully!
cc -g -I/home/tibero/tibero7/client/include -c esql_test.c
cc -g -I/home/tibero/tibero7/client/include -o esql_test -L/home/tibero/tibero7/client/lib -ltbxa -ltbertl esql_test.o
rm -f esql_test.o
[tibero7@rocky9.4:T724:/home/tibero/work/source]ll -rlt
total 1796
drwxr-x---. 3 tibero7 tibero 93 Nov 3 14:02 ..
-rw-r-----. 1 tibero7 tibero 1717885 Nov 3 14:06 tibero7-jdbc.jar
-rwxr-x---. 1 tibero7 tibero 5228 Nov 3 14:46 jdbc_test.java
-rw-r-----. 1 tibero7 tibero 4816 Nov 3 15:09 jdbc_test.class
-rwxr-x---. 1 tibero7 tibero 97 Nov 3 15:23 compile
-rwxr-x---. 1 tibero7 tibero 5142 Nov 3 16:13 esql_test.tbc
-rwxr-x---. 1 tibero7 tibero 712 Nov 3 16:59 Makefile.tbc
-rw-r-----. 1 tibero7 tibero 46427 Nov 3 16:59 esql_test.c
-rwxr-x---. 1 tibero7 tibero 36856 Nov 3 16:59 esql_test
drwxr-x---. 2 tibero7 tibero 167 Nov 3 16:59 .
[tibero7@rocky9.4:T724:/home/tibero/work/source]esql_test
SQL DROP query succeeded
SQL CREATE query succeeded
SQL INSERT query succeeded
================== TEST_TAB Result of Insert ===================
Number Text Date Clob
----------------------------------------------------------------
1 James 2025/11/03 CLOB Data for Test
================================================================
SQL UPDATE query succeeded
================== TEST_TAB Result of Update ===================
Number Text Date Clob
----------------------------------------------------------------
1 David 2025/11/03 CLOB Data for Test
================================================================
SQL DELETE query succeeded
================== TEST_TAB Result of Delete ===================
Number Text Date Clob
----------------------------------------------------------------
================================================================
Note
libiodbc Installation
tar -xvzf libiodbc-3.52.7.tar.gz
export CFLAGS=-m64 ./configure --prefix=$HOME/iodbc --disable-gui [tibero7@rocky9.4:T724:/home/tibero/iodbc/libiodbc-3.52.7]./configure --prefix=$HOME/iodbc --disable-gui checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking whether to enable maintainer-specific portions of Makefiles... no checking cached information... ok creating config.nice checking for iODBC installation layout... default checking for gcc... gcc .... config.status: creating drvproxy/Makefile config.status: creating drvproxy/gtk/Makefile config.status: creating samples/Makefile config.status: creating include/config.h config.status: executing depfiles commands config.status: executing libtool commands config.status: executing default commands iODBC Driver Manager 3.52.7 configuration summary ================================================= Installation variables layout default prefix /home/tibero/iodbc exec_prefix ${prefix} Installation paths programs ${exec_prefix}/bin include files ${prefix}/include libraries ${exec_prefix}/lib manual pages ${datarootdir}/man Configuration files odbc.ini /etc/odbc.ini odbcinst.ini /etc/odbcinst.ini default FILEDSN path /etc/ODBCDataSources Extensions ODBC Version 3 GUI Extensions false ThreadSafe true Install libodbc.so true ./make ./make install [tibero7@rocky9.4:T724:/home/tibero/iodbc/bin]file iodbctest iodbctest: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=25c4c0b65ee4446120bdafc3cc502b790458b7c5, for GNU/Linux 3.2.0, not stripped
- Environment File Location and Naming
Can be set as $HOME/.odbc.ini (personal setting) or /etc/odbc.ini (common setting), with $HOME/.odbc.ini having higher priority.