트랜잭션 사용
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();
}
}
}
다음 주제: SQLite 데이터베이스 만들기/삭제하기
이전 주제: 코드 샘플: 테이블 데이터 검색