Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - M-Business Anywhere 编程 » 了解 UltraLite for M-Business Anywhere 开发 » 使用 Table API 处理数据

 

插入、更新和删除行

UltraLite 每次向应用程序提供表中的一行。ULTable 对象有一个当前位置,它可能在表中的某一行上、第一行前面或最后一行后面。

当您的应用程序改变位置时,UltraLite 会在缓冲区中制作一个该行的副本。获取或设置值的任何操作都只影响该缓冲区中的数据副本,而不会影响数据库中的数据。

示例

以下语句将缓冲区中第一列的值更改为 3。

tCustomer.setInt( 1 , 3 );
使用 UltraLite 模式

UltraLite 模式确定缓冲区中的值将用于何种用途。除缺省模式外,UltraLite 还具有以下四种操作模式。

  • 插入模式   当调用 ULTable.insert 方法时,缓冲区中的数据将作为新行添加到表中。

  • 更新模式   当调用 ULTable.update 方法时,缓冲区中的数据将替换当前行。

  • 查找模式   在调用某一种 ULTable.find 方法时,用于定位其值与缓冲区中的数据完全匹配的行。

  • 查寻模式   在调用某一种 ULTable.lookup 方法时,用于定位其值匹配或大于缓冲区中的数据的行。

♦  更新一行
  1. 移动到想要更新的行。

    您可以通过滚动浏览表来移动到某一行,也可以使用 Find 方法和 Lookup 方法通过搜索来移动到该行。

  2. 进入更新模式。

    例如,以下指令进入表 tCustomer 的更新模式。

    tCustomer.updateBegin();
  3. 为要更新的行设置新值。

    例如,以下指令将新值设置为 Elizabeth。

    tCustomer.setString( 2, "Elizabeth" );
  4. 执行更新。

    tCustomer.update();

完成更新操作后,当前行就是刚才更新过的行。如果您更改了在打开 ULTable 对象时指定的索引中的列的值,则当前位置不确定。

缺省情况下,UltraLite 在 autoCommit 模式中运行,所以更新会被立即应用于永久存储中的行。如果已经禁用了 autoCommit 模式,那么只有在执行提交操作后才会应用更新。有关 autoCommit 模式的详细信息,请参见管理事务

小心

不要更新行的主键:而是删除该行并添加新行。

插入行

插入行的步骤与更新行的步骤类似,区别在于不需要在执行插入操作前定位到表中的任何特定行。行会按打开表时指定的索引自动排序。

♦  插入一行
  1. 进入插入模式。

    例如,以下指令进入表 CustomerTable 的插入模式。

    tCustomer.insertBegin();
  2. 设置新行的值。

    如果没有设置其中一列的值,并且该列有缺省值,则使用该缺省值。如果该列没有缺省值,则使用 NULL。如果该列不允许 NULL 值,则使用以下缺省值:

    • 对于数字列,添加零。

    • 对于字符列,添加空字符串。

    若要显式设置值为 NULL,请使用 setNull 方法。

    colID = tCustomer.schema.getColumnID( "id" );
    colFirstName = tCustomer.schema.getColumnID( "fname" );
    colLastName = tCustomer.schema.getColumnID( "lname" );
    tCustomer.setInt( colID, 42 );
    tCustomer.setString( colFirstName, "Mitch" );
    tCustomer.setString( colLastName, "McLeod" );
  3. 执行该插入。

    执行 Commit 后,插入的行就会永久保存到数据库中。在 autoCommit 模式中,执行 Insert 方法本身就包含了 Commit 操作。

    tCustomer.insert();
删除行

没有与插入或更新模式对应的删除模式。

以下过程删除一行。

♦  删除一行
  1. 移到想要删除的行。

  2. 执行删除:

    tCustomer.deleteRow();