Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 | 

Writing CCI Application Program

The basic steps used for writing programs are as follows, and a step for binding the data to a variable is added to use the prepared statement. The steps are implemented in example codes 1 and 2. Auto-commit mode is supported only for SELECT statements when the SELECT_AUTO_COMMIT parameter has been set to ON. Otherwise, you must explicitly commit or roll back the transaction by using the cci_end_tran() function. For details about how to configure and use auto-commit mode in CCI, see [Performance Tuning > Broker Configuration > Parameter By Broker > SELECT_AUTO_COMMIT] and cci_end_tran().

Example 1

//Example to execute a simple query

#include <stdio.h>

#include "cas_cci.h"  

#define BUFSIZE  (1024)

 

int

main (void)

{

  int con = 0, req = 0, col_count = 0, i, ind;

  int error;

  char *data;

  T_CCI_ERROR cci_error;

  T_CCI_COL_INFO *col_info;

  T_CCI_SQLX_CMD cmd_type;

  char *query = "select * from code";

 

//getting a connection handle for a connection with a server

  con = cci_connect ("localhost", 44000, "demodb", "dba", "");

  if (con < 0)

    {

      printf ("cannot connect to database\n");

      return 1;

    }

 

//preparing the SQL statement

  req = cci_prepare (con, query, 0, &cci_error);

  if (req < 0)

    {

      printf ("prepare error: %d, %s\n", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//getting column information when the prepared statement is the SELECT query

  col_info = cci_get_result_info (req, &cmd_type, &col_count);

  if (col_info == NULL)

    {

      printf ("get_result_info error: %d, %s\n", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Executing the prepared SQL statement

  error = cci_execute (req, 0, 0, &cci_error);

  if (error < 0)

    {

      printf ("execute error: %d, %s\n", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

  while (1)

    {

 

//Moving the cursor to access a specific tuple of results

      error = cci_cursor (req, 1, CCI_CURSOR_CURRENT, &cci_error);

      if (error == CCI_ER_NO_MORE_DATA)

        {

          break;

        }

      if (error < 0)

        {

          printf ("cursor error: %d, %s\n", cci_error.err_code,

                  cci_error.err_msg);

          goto handle_error;

        }

 

//Fetching the query result into a client buffer

      error = cci_fetch (req, &cci_error);

      if (error < 0)

        {

          printf ("fetch error: %d, %s\n", cci_error.err_code,

                  cci_error.err_msg);

          goto handle_error;

        }

      for (i = 1; i <= col_count; i++)

        {

 

//Getting data from the fetched result

          error = cci_get_data (req, i, CCI_A_TYPE_STR, &data, &ind);

          if (error < 0)

            {

              printf ("get_data error: %d, %d\n", error, i);

              goto handle_error;

            }

          printf ("%s\t|", data);

        }

      printf ("\n");

    }

 

//Closing the request handle

  error = cci_close_req_handle (req);

  if (error < 0)

    {

      printf ("close_req_handle error: %d, %s\n", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Disconnecting with the server

  error = cci_disconnect (con, &cci_error);

  if (error < 0)

    {

      printf ("error: %d, %s\n", cci_error.err_code, cci_error.err_msg);

      goto handle_error;

    }

 

  return 0;

 

handle_error:

  if (req > 0)

    cci_close_req_handle (req);

  if (con > 0)

    cci_disconnect (con, &cci_error);

 

  return 1;

}

Example 2

//Example to execute a query with a bind variable

 

char *query = "select * from nation where name = ?";

  char namebuf[128];

 

//getting a connection handle for a connection with a server

  con = cci_connect ("localhost", 44000, "demodb", "dba", "");

  if (con < 0)

    {

      printf ("cannot connect to database ");

      return 1;

    }

 

//preparing the SQL statement

  req = cci_prepare (con, query, 0, &cci_error);

  if (req < 0)

    {

      printf ("prepare error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Binding date into a value

  strcpy (namebuf, "Korea");

  error =

    cci_bind_param (req, 1, CCI_A_TYPE_STR, &namebuf, CCI_U_TYPE_STRING,

                    CCI_BIND_PTR);

  if (error < 0)

    {

      printf ("bind_param error: %d ", error);

      goto handle_error;

    }