개발 가이드

Local Navigation

트랜잭션 사용

SQLite 문은 항상 트랜잭션에서 실행됩니다. 문이 성공적으로 실행되면 트랜잭션이 자동으로 커밋됩니다. 문이 실패하면 트랜잭션이 롤백됩니다.

기본으로 각 SQLite 문에 대해 별도의 트랜잭션이 만들어집니다. 그러나 이 방식은 한 트랜잭션에서 여러 문을 실행하는 것보다는 효율이 떨어집니다. 보통은 문 그룹에 대해 명시적으로 트랜잭션을 지정하여 성능을 개선시킬 수 있습니다. 문 그룹에 대해 Database.beginTransaction() Database.commitTransaction()을 사용하여 한 트랜잭션에서 여러 문을 실행할 수 있습니다.

중첩된 트랜잭션은 지원되지 않습니다.

코드 샘플: 트랜잭션 사용

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.database.*;
import net.rim.device.api.io.*;
public class UsingTransactions extends UiApplication
{
    public static void main(String[] args)
    {
        UsingTransactions theApp = new UsingTransactions();
        theApp.enterEventDispatcher();
    }
    public UsingTransactions()
    {
    }
}
class UsingTransactionsScreen extends MainScreen
{
    Database d;
    public UsingTransactionsScreen()
    {
       LabelField title = new LabelField("SQLite Using Transactions Sample",
       LabelField.ELLIPSIS |
       LabelField.USE_ALL_WIDTH);
       setTitle(title);
       add(new RichTextField(
              "Updating data in one transaction in MyTestDatabase.db."));
       try
       {
          URI myURI = URI.create("file:///SDCard/Databases/SQLite_Guide/" +
              "MyTestDatabase.db");
          d = DatabaseFactory.open(myURI);
          d.beginTransaction();
          Statement st = d.createStatement("UPDATE People SET Age=7 " +
              "WHERE Name='Sophie'");
          st.prepare();
          st.execute();
          st.close();
          st = d.createStatement("UPDATE People SET Age=4 " +
              "WHERE Name='Karen'");
          st.prepare();
          st.execute();
          st.close();
          d.commitTransaction();
          d.close();
     }
     catch ( Exception e )
     {
          System.out.println( e.getMessage() );
          e.printStackTrace();
     }
  }
}

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.