01-05 11:22:44.698: E/AndroidRuntime(11417): FATAL EXCEPTION: main
01-05 11:22:44.698: E/AndroidRuntime(11417): java.lang.RuntimeException: Unable to resume activity {com.pyo.sqlite.girl/com.pyo.sqlite.girl.GirlsGroupEntryPoint}: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/com.pyo.sqlite.girl/databases/girlsGroupDB.db
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.os.Looper.loop(Looper.java:130)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.main(ActivityThread.java:3683)
01-05 11:22:44.698: E/AndroidRuntime(11417): at java.lang.reflect.Method.invokeNative(Native Method)
01-05 11:22:44.698: E/AndroidRuntime(11417): at java.lang.reflect.Method.invoke(Method.java:507)
01-05 11:22:44.698: E/AndroidRuntime(11417): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-05 11:22:44.698: E/AndroidRuntime(11417): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-05 11:22:44.698: E/AndroidRuntime(11417): at dalvik.system.NativeStart.main(Native Method)
01-05 11:22:44.698: E/AndroidRuntime(11417): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1: /data/data/com.pyo.sqlite.girl/databases/girlsGroupDB.db
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:199)
01-05 11:22:44.698: E/AndroidRuntime(11417): at com.pyo.sqlite.girl.GirlsGroupEntryPoint.applyAutoCompleteFromTBLGirlsGroupInfo(GirlsGroupEntryPoint.java:48)
01-05 11:22:44.698: E/AndroidRuntime(11417): at com.pyo.sqlite.girl.GirlsGroupEntryPoint.onResume(GirlsGroupEntryPoint.java:45)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.Activity.performResume(Activity.java:3832)
01-05 11:22:44.698: E/AndroidRuntime(11417): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110)
01-05 11:22:44.698: E/AndroidRuntime(11417): ... 12 more
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteQueryBuilder;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.pyo.sqlite.girl.GirlsGroupDB.GirlsGroupInfo;
import com.pyo.sqlite.girl.GirlsGroupDB.GirlsGroupMusic;
public class GirlsGroupEntryPoint extends GirlsGroupBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.girls_group_layout);
Button saveBtn = (Button)findViewById(R.id.girlsGroupInsert);
saveBtn.setOnClickListener(girlsSaveListener);
Button displayBtn = (Button)findViewById(R.id.girlGroupDisplayBtn);
displayBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),GirlsGroupBaseActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onResume() {
super.onResume();
applyAutoCompleteFromTBLGirlsGroupInfo();
}
private void applyAutoCompleteFromTBLGirlsGroupInfo(){
SQLiteDatabase dbHandler = girlsDB.getReadableDatabase();
Cursor resultSet = dbHandler.query(
GirlsGroupInfo.TABLE_NAME,
new String[]{GirlsGroupInfo.TEAM_NAME},
null,null,null,null,
GirlsGroupInfo.SORT_ORDER);
int numberOfGroupNames = resultSet.getCount();
String numberOfAutoText [] = new String[numberOfGroupNames];
if(numberOfGroupNames > 0){
resultSet.moveToFirst();
for(int i = 0; i<numberOfGroupNames; i++){
numberOfAutoText[i] = resultSet.getString(
resultSet.getColumnIndex(GirlsGroupInfo.TEAM_NAME));
resultSet.moveToNext();
}
ArrayAdapter<String>autoTextAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line,
numberOfAutoText);
AutoCompleteTextView autoText = (AutoCompleteTextView)findViewById(R.id.autoTextGirlsGroupFinder);
autoText.setAdapter(autoTextAdapter);
}
resultSet.close();
dbHandler.close();
}
private OnClickListener girlsSaveListener = new OnClickListener() {
public void onClick(View v) {
final EditText girlsGroupMusicName = (EditText)findViewById(R.id.musicNameEdit);
final EditText girlsGroupName = (EditText)findViewById(R.id.autoTextGirlsGroupFinder);
SQLiteDatabase dbHandler = girlsDB.getWritableDatabase();
dbHandler.beginTransaction();
long girlGroupID = 0;
try{
String groupName = girlsGroupName.getText().toString();
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(GirlsGroupInfo.TABLE_NAME);
queryBuilder.appendWhere(GirlsGroupInfo.TEAM_NAME + "=" + groupName + "");
Cursor resultExist = queryBuilder.query(dbHandler,null,null,null,null,null,null);
if(resultExist.getCount() == 0){
ContentValues groupNameValues = new ContentValues();
groupNameValues.put(GirlsGroupInfo.TEAM_NAME,groupName);
girlGroupID = dbHandler.insert(GirlsGroupInfo.TABLE_NAME, "NODATA", groupNameValues);
}else{
resultExist.moveToFirst();
girlGroupID = resultExist.getLong(resultExist.getColumnIndex(GirlsGroupInfo._ID));
ContentValues musicRowValues = new ContentValues();
musicRowValues.put(GirlsGroupMusic.MUSIC_TITLE,girlsGroupMusicName.getText().toString());
musicRowValues.put(GirlsGroupMusic.GIRLS_GROUP_ID,girlGroupID);
dbHandler.insert(GirlsGroupMusic.TABLE_NAME,"NODATA",musicRowValues);
dbHandler.setTransactionSuccessful();
resultExist.close();
Toast.makeText(GirlsGroupEntryPoint.this, "정상 처리 되었습니다!", Toast.LENGTH_SHORT).show();
}
}catch(SQLiteException sqle){
Log.e("걸그룹세이브리스너에러",sqle.toString());
Toast.makeText(GirlsGroupEntryPoint.this, "심각한 에러 발생!LogCat 확인 바람!", Toast.LENGTH_SHORT).show();
}finally{
dbHandler.endTransaction();
dbHandler.close();
}
girlsGroupMusicName.setText("");
girlsGroupName.setText("");
}
};
}
applyAutoCompleteFromTBLGirlsGroupInfo();
}
private void applyAutoCompleteFromTBLGirlsGroupInfo(){
SQLiteDatabase dbHandler = girlsDB.getReadableDatabase();
이부분이 오류던대 ...
왜오류가나는건가요 ? ㅠㅠㅠ




표인수 강사님 자료군요
ㅎㅎㅎ
로그캣 읽어보면 읽기전용 디비에 쓰기를 하려고 하니 안된다는군요
디비 관련 예제 찾아서 쓰기 용 디비 여는 법을 찾아보시면 될거 같네요
디비 수정 하는 예제요