动态指针SQL,读取数据

REPORT  z_barry_test                            .

TYPE-POOLS : abap.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,
               <dyn_field>.
DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data,
      xfc TYPE lvc_s_fcat,
      ifc TYPE lvc_t_fcat.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
  PERFORM get_structure.
  PERFORM create_dynamic_itab.
  PERFORM get_data.
  PERFORM write_out.
*---------------------------------------------------------------------*
*       FORM get_structure                                            *
*---------------------------------------------------------------------*
FORM get_structure.
  DATA : idetails TYPE abap_compdescr_tab,
         xdetails TYPE abap_compdescr.
  DATA : ref_table_des TYPE REF TO cl_abap_structdescr.

  ref_table_des ?=
        cl_abap_typedescr=>describe_by_name( p_table ).
  idetails[] = ref_table_des->components[].
  LOOP AT idetails INTO xdetails.
    CLEAR xfc.
    xfc-fieldname = xdetails-name .
*    xfc-datatype = xdetails-type_kind.
    xfc-inttype = xdetails-type_kind.
    xfc-intlen = xdetails-length + xdetails-decimals.
    xfc-decimals = xdetails-decimals.
    APPEND xfc TO ifc.
  ENDLOOP.
ENDFORM.                    "get_structure
*---------------------------------------------------------------------*
*       FORM create_dynamic_itab                                      *
*---------------------------------------------------------------------*
FORM create_dynamic_itab.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dy_table.
  ASSIGN dy_table->* TO <dyn_table>.

  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.                    "create_dynamic_itab

*---------------------------------------------------------------------*
*       FORM get_data                                                 *
*---------------------------------------------------------------------*
FORM get_data.
  DATA: BEGIN OF itab OCCURS 0 .
          INCLUDE STRUCTURE spfli.
  DATA: END OF itab.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table>
             FROM (p_table).
ENDFORM.                    "get_data
*---------------------------------------------------------------------*
*       FORM write_out                                                *
*---------------------------------------------------------------------*
FORM  write_out.
  LOOP AT <dyn_table> INTO <dyn_wa>.
    DO.
      ASSIGN COMPONENT  sy-index
         OF STRUCTURE <dyn_wa> TO <dyn_field>.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ <dyn_field>.
      ELSE.
        WRITE: <dyn_field>.
      ENDIF.
    ENDDO.
  ENDLOOP.
ENDFORM.                    "write_out

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要选择一个 C++ 的数据库访问库,比如 MySQL Connector/C++ 或者 SQLiteCpp。这些库提供了 C++ API 用于连接和操作数据库。 在连接数据库后,你可以编写 SQL 查询语句进行数据检索。查询结果可以通过库提供的接口读取到内存中。以下是一个简单的示例使用 MySQL Connector/C++ 连接 MySQL 数据库,并读取一个表中的数据到指针数组中: ```c++ #include <iostream> #include <mysql_connection.h> #include <mysql_driver.h> #include <mysql_error.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; int main() { try { // 连接数据库 sql::Driver *driver; sql::Connection *con; driver = get_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "root", "password"); // 选择数据库 con->setSchema("test"); // 执行 SQL 查询 sql::Statement *stmt; sql::ResultSet *res; stmt = con->createStatement(); res = stmt->executeQuery("SELECT * FROM mytable"); // 读取结果到指针数组中 int n = res->rowsCount(); int *data = new int[n]; int i = 0; while (res->next()) { data[i++] = res->getInt("column1"); } // 打印数据 for (int j = 0; j < n; ++j) { cout << data[j] << " "; } cout << endl; delete[] data; delete res; delete stmt; delete con; } catch (sql::SQLException &e) { cout << "SQLException: " << e.what() << endl; } return 0; } ``` 这个示例中,我们使用 `sql::ResultSet` 类来读取查询结果,使用 `getInt()` 方法读取每一行的 `column1` 字段数据,并将其存储到指针数组 `data` 中。最后打印数据并释放内存。 需要注意的是,指针数组需要手动释放,否则可能会导致内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值