Android SQLite: should I use beginTransaction and endTransaction only at insert or both insert and read...
up vote
2
down vote
favorite
ATM when I write to the SQLite in my android app, I do it this way:
try {
for (User user: users) {
ContentValues values = new ContentValues();
databaseManager.database.beginTransaction();
values.put("user_name", user.getName());
values.put("user_email", user.getEmail());
databaseManager.database.insert("users", null, values);
}
databaseManager.database.setTransactionSuccessful();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
databaseManager.database.endTransaction();
}
But when I read from the DB, I dont use begin, setsuccessful and end:
Cursor cursor = databaseManager.database.rawQuery(SQLQueries.getUsers(), null);
if (cursor.moveToFirst()) {
if (cursor!=null) {
do {
User user = new User();
try {
user.setName(cursor.getString(cursor.getColumnIndexOrThrow("user_name")));
user.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("user_email")));
} catch (Exception ex) {
ex.printStackTrace();
}
users.add(user);
} while (cursor.moveToNext());
}
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
cursor = null;
}
Should I add beginTransaction, setTransactionSuccessful and endTransaction to the read operations as well? Im pretty sure I shouldnt, but I need to be 100% on this one.
android sqlite
add a comment |
up vote
2
down vote
favorite
ATM when I write to the SQLite in my android app, I do it this way:
try {
for (User user: users) {
ContentValues values = new ContentValues();
databaseManager.database.beginTransaction();
values.put("user_name", user.getName());
values.put("user_email", user.getEmail());
databaseManager.database.insert("users", null, values);
}
databaseManager.database.setTransactionSuccessful();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
databaseManager.database.endTransaction();
}
But when I read from the DB, I dont use begin, setsuccessful and end:
Cursor cursor = databaseManager.database.rawQuery(SQLQueries.getUsers(), null);
if (cursor.moveToFirst()) {
if (cursor!=null) {
do {
User user = new User();
try {
user.setName(cursor.getString(cursor.getColumnIndexOrThrow("user_name")));
user.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("user_email")));
} catch (Exception ex) {
ex.printStackTrace();
}
users.add(user);
} while (cursor.moveToNext());
}
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
cursor = null;
}
Should I add beginTransaction, setTransactionSuccessful and endTransaction to the read operations as well? Im pretty sure I shouldnt, but I need to be 100% on this one.
android sqlite
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
ATM when I write to the SQLite in my android app, I do it this way:
try {
for (User user: users) {
ContentValues values = new ContentValues();
databaseManager.database.beginTransaction();
values.put("user_name", user.getName());
values.put("user_email", user.getEmail());
databaseManager.database.insert("users", null, values);
}
databaseManager.database.setTransactionSuccessful();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
databaseManager.database.endTransaction();
}
But when I read from the DB, I dont use begin, setsuccessful and end:
Cursor cursor = databaseManager.database.rawQuery(SQLQueries.getUsers(), null);
if (cursor.moveToFirst()) {
if (cursor!=null) {
do {
User user = new User();
try {
user.setName(cursor.getString(cursor.getColumnIndexOrThrow("user_name")));
user.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("user_email")));
} catch (Exception ex) {
ex.printStackTrace();
}
users.add(user);
} while (cursor.moveToNext());
}
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
cursor = null;
}
Should I add beginTransaction, setTransactionSuccessful and endTransaction to the read operations as well? Im pretty sure I shouldnt, but I need to be 100% on this one.
android sqlite
ATM when I write to the SQLite in my android app, I do it this way:
try {
for (User user: users) {
ContentValues values = new ContentValues();
databaseManager.database.beginTransaction();
values.put("user_name", user.getName());
values.put("user_email", user.getEmail());
databaseManager.database.insert("users", null, values);
}
databaseManager.database.setTransactionSuccessful();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
databaseManager.database.endTransaction();
}
But when I read from the DB, I dont use begin, setsuccessful and end:
Cursor cursor = databaseManager.database.rawQuery(SQLQueries.getUsers(), null);
if (cursor.moveToFirst()) {
if (cursor!=null) {
do {
User user = new User();
try {
user.setName(cursor.getString(cursor.getColumnIndexOrThrow("user_name")));
user.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("user_email")));
} catch (Exception ex) {
ex.printStackTrace();
}
users.add(user);
} while (cursor.moveToNext());
}
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
cursor = null;
}
Should I add beginTransaction, setTransactionSuccessful and endTransaction to the read operations as well? Im pretty sure I shouldnt, but I need to be 100% on this one.
android sqlite
android sqlite
edited Nov 10 at 22:57
Vergiliy
308
308
asked Jul 14 '14 at 7:29
J. K.
6,0001461133
6,0001461133
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
5
down vote
accepted
When you are not using explicit transactions, SQLite will automatically wrap a transaction around every statement.
When you write to the database, every insert
/update
/delete
call is a single statement.
If you are doing multiple such operations, you use transactions to avoid paying the transaction overhead for each of them.
A query (query
or rawQuery
) is a single statement, even if it returns multiple rows.
Therefore, using a transaction around a single query does not make any difference.
(If you have multiple queries, you could use a transaction to ensure that their results are consistent with each other even if another thread attempts to change the database between them.)
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
accepted
When you are not using explicit transactions, SQLite will automatically wrap a transaction around every statement.
When you write to the database, every insert
/update
/delete
call is a single statement.
If you are doing multiple such operations, you use transactions to avoid paying the transaction overhead for each of them.
A query (query
or rawQuery
) is a single statement, even if it returns multiple rows.
Therefore, using a transaction around a single query does not make any difference.
(If you have multiple queries, you could use a transaction to ensure that their results are consistent with each other even if another thread attempts to change the database between them.)
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
add a comment |
up vote
5
down vote
accepted
When you are not using explicit transactions, SQLite will automatically wrap a transaction around every statement.
When you write to the database, every insert
/update
/delete
call is a single statement.
If you are doing multiple such operations, you use transactions to avoid paying the transaction overhead for each of them.
A query (query
or rawQuery
) is a single statement, even if it returns multiple rows.
Therefore, using a transaction around a single query does not make any difference.
(If you have multiple queries, you could use a transaction to ensure that their results are consistent with each other even if another thread attempts to change the database between them.)
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
add a comment |
up vote
5
down vote
accepted
up vote
5
down vote
accepted
When you are not using explicit transactions, SQLite will automatically wrap a transaction around every statement.
When you write to the database, every insert
/update
/delete
call is a single statement.
If you are doing multiple such operations, you use transactions to avoid paying the transaction overhead for each of them.
A query (query
or rawQuery
) is a single statement, even if it returns multiple rows.
Therefore, using a transaction around a single query does not make any difference.
(If you have multiple queries, you could use a transaction to ensure that their results are consistent with each other even if another thread attempts to change the database between them.)
When you are not using explicit transactions, SQLite will automatically wrap a transaction around every statement.
When you write to the database, every insert
/update
/delete
call is a single statement.
If you are doing multiple such operations, you use transactions to avoid paying the transaction overhead for each of them.
A query (query
or rawQuery
) is a single statement, even if it returns multiple rows.
Therefore, using a transaction around a single query does not make any difference.
(If you have multiple queries, you could use a transaction to ensure that their results are consistent with each other even if another thread attempts to change the database between them.)
answered Jul 14 '14 at 7:57
CL.
133k12116151
133k12116151
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
add a comment |
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
so If I have multiple reads, I should wrap them all in a begin/set/end transaction?
– J. K.
Jul 14 '14 at 8:04
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
That depends on whether you need them to be atomic.
– CL.
Jul 14 '14 at 8:13
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
I see, thanks :)
– J. K.
Jul 14 '14 at 8:22
1
1
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
More, since a query doesn't modify the database contents, including it in a transaction would be meaningless. So use transactions for commands, multiple ones: should they succeed or fail all together.
– Kling Klang
Jul 14 '14 at 15:26
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f24731561%2fandroid-sqlite-should-i-use-begintransaction-and-endtransaction-only-at-insert%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown