

안드로이드를 공부하는 초보인데요. 테이블 생성과정에서 _id구문이 자동증가키로 설정이 되어 있기때문에 이 구문을 제가 원하는 형태
로 바꿔서 사용하고 싶어서 변환해서 사용했더니 에뮬레이터 실행에는 문제가 없지만 다른 조회나, 수정, 삭제 구문에서 불러올때 에러가
생기는듯 싶습니다. ㅜㅜ
데이터 조회구문
private void selectData() {
// TODO Auto-generated method stub
String sql = "SELECT _id, name, addr FROM ";
sql += T_NAME;
sql += " WHERE _id = ";
sql += et1.getText().toString();
Log.e("selectData(): ",sql);
try{
Cursor cur = db.rawQuery(sql, null);
cur.moveToFirst();
if(cur.getCount() > 0){
et2.setText(cur.getString(1));
et3.setText(cur.getString(cur.getColumnIndex("addr")));
}else{
showToast("조회 데이타가 없습니다.");
}
}catch (SQLException se) {
// TODO: handle exception
Log.e("selectData()Error! : ",se.toString());
}
}
데이터 삭제구문
private void deleteData() {
// TODO Auto-generated method stub
String sql = "DELETE FROM ";
sql += T_NAME;
sql += " WHERE _id = ";
sql += et1.getText().toString();
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")delete Error!");
}else{
showToast("Data("+T_NAME+")delete OK!");
}
}
데이터 수정구문
private void updateData() {
// TODO Auto-generated method stub
String sql = "UPDATE ";
sql += T_NAME;
sql += " SET ";
sql += " name = '";
sql += et2.getText().toString();
sql += "', addr = '";
sql += et3.getText().toString();
sql += "' WHERE _id = ";
sql += et1.getText().toString();
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")update Error!");
}else{
showToast("Data("+T_NAME+")update OK!");
}
}
데이터 입력구문
private void insertData() {
// TODO Auto-generated method stub
String sql = "INSERT INTO ";
sql += T_NAME;
sql += "(name,addr,ddate) VALUES ( '";
sql += et2.getText().toString();
sql += "', '";
sql += et3.getText().toString();
sql += "', ";
sql += "date('now') )";
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")insert Error!");
}else{
showToast("Data("+T_NAME+")insert OK!");
}
}
테이블 생성구문
private void createTable() {
// TODO Auto-generated method stub
String sql = "create table ";
sql += T_NAME;
sql += "(_id integer primary key autoincrement, name text not null, "; >>>>._id입니다. name과 똑같이 text not null을 넣고 구동했습니다.
sql += "addr text default 'seoul', ddate date)";
try{
db.execSQL(sql);
showToast("Table("+T_NAME+")생성 완료!");
}catch (SQLException se) {
// TODO: handle exception
//Log.e("createTable()시오류 : ",se.toString());
}
}
to LifeClue
예 _id가 지금 integer로 필드형태가 되어있더라구요. 제가 sqlitedatabase browser로 외부에서도 데이터를 받아오게 하고 싶거든요.ㅜ
근데 _id형태때문에 조금 문제입니다.ㅠ 도움부탁드려요^^
하지만 소스로 보아 _id 필드를 수정하시고 싶으신 건 아닌 것 같네요^^
지금 각 레코드를 구분할 수 있는 _id가 순차증가값으로, 겹치지 않는 숫자 형태로 레코드를 식별하는데, 질문자는 문자열 등으로 관리하고 싶으신거잖아요?
그렇다면 테이블에 필드를 하나 더 추가해서 그걸로 사용하심 될 것 같네요~
_id필드명 정도는 수정이 가능하니까 이걸 _no 정도로 바꾸시고
_id를 문자열을 받을 수 있는 필드로 생성해서 사용하시면 될 것 같은데요?
데이터 형태가 문제가 된다면 변환함수를 쓰세요..sqlite에서도 있는가는 모르겠지만..다른 DB들 보면 데이터 형태를 변환해주는 함수들을 제공해줍니다..to_integer,to_char 요런 함수들요..
지금 있는 자동증가 필드는 그냥 증가되게 냅두고 식별자를 저장할 필드를 추가해서 그걸로 사용하시면 될 것 같아요~
음 입력구문을
private void insertData() {
// TODO Auto-generated method stub
String sql = "INSERT INTO ";
sql += T_NAME;
sql += "(_no,name,addr,ddate) VALUES ( '";
sql += et1.getText().toString();
sql += "', '";
sql += et2.getText().toString();
sql += "', '";
sql += et3.getText().toString();
sql += "', ";
sql += "date('now') )";
if(!this.execSQL(sql)){
showToast("Data("+T_NAME+")insert Error!");
}else{
showToast("Data("+T_NAME+")insert OK!");
}
}
바꿔서 했는데요 음.. 입력은 잘되구요. 조회가..
private void selectData() {
// TODO Auto-generated method stub
String sql = "SELECT _no, name, addr FROM ";
sql += T_NAME;
sql += " WHERE _no = ";
sql += et1.getText().toString();
Log.e("selectData(): ",sql);
try{
Cursor cur = db.rawQuery(sql, null);
cur.moveToFirst();
if(cur.getCount() > 0){
et2.setText(cur.getString(1));
et3.setText(cur.getString(cur.getColumnIndex("addr")));
}else{
showToast("조회 데이타가 없습니다.");
}
}catch (SQLException se) {
// TODO: handle exception
Log.e("selectData()Error! : ",se.toString());
}
}
ㅜㅜ
음 원래 _id가 자동증가값이구요, name하고 addr하고 ddat(이거는 시간이요)이렇게 있었구요 지금 _id는
테이블 생성구문에 _id integer primary key autoincrement 그대로 두었구요 생성구문에서 _no를 추가하고
입력이나 조회 삭제 수정 구문에서 _id를 _no로 바꾸었습니다. ㅜ
그냥 의심가는 것 뿐이지만...
<meta charset="utf-8">
String sql = "SELECT _no, name, addr FROM ";
sql += T_NAME;
sql += " WHERE _no = ";
sql += et1.getText().toString();
여기를
<meta charset="utf-8">
String sql = "SELECT _no, name, addr FROM ";
sql += T_NAME;
sql += " WHERE _no = \"";
sql += et1.getText().toString();
sql += "\"";
이렇게 해보세요 =_=;;;;
to LifeClue
감사합니다. ㅜ 입력과 조회구문은 이상없이 돌아가네요 수정하고 삭제구문에서 에러가 발생합니다.
보기 편하시도록 로그캣도 첨부해서 올립니다. ㅜ
06-10 09:15:50.009: ERROR/Zygote(32): setreuid() failed. errno: 2
06-10 09:15:57.911: ERROR/Zygote(32): setreuid() failed. errno: 17
06-10 09:15:59.239: ERROR/BatteryService(58): usbOnlinePath not found
06-10 09:15:59.239: ERROR/BatteryService(58): batteryVoltagePath not found
06-10 09:15:59.239: ERROR/BatteryService(58): batteryTemperaturePath not found
06-10 09:15:59.270: ERROR/SurfaceFlinger(58): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
06-10 09:16:05.440: ERROR/EventHub(58): could not get driver version for /dev/input/mouse0, Not a typewriter
06-10 09:16:05.440: ERROR/EventHub(58): could not get driver version for /dev/input/mice, Not a typewriter
06-10 09:16:05.720: ERROR/System(58): Failure starting core service
06-10 09:16:05.720: ERROR/System(58): java.lang.SecurityException
06-10 09:16:05.720: ERROR/System(58): at android.os.BinderProxy.transact(Native Method)
06-10 09:16:05.720: ERROR/System(58): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
06-10 09:16:05.720: ERROR/System(58): at android.os.ServiceManager.addService(ServiceManager.java:72)
06-10 09:16:05.720: ERROR/System(58): at com.android.server.ServerThread.run(SystemServer.java:184)
06-10 09:16:06.760: ERROR/SoundPool(58): error loading /system/media/audio/ui/Effect_Tick.ogg
06-10 09:16:06.769: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressStandard.ogg
06-10 09:16:06.769: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressSpacebar.ogg
06-10 09:16:06.769: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressDelete.ogg
06-10 09:16:06.769: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressReturn.ogg
06-10 09:16:08.829: ERROR/ThrottleService(58): Could not open GPS configuration file /etc/gps.conf
06-10 09:16:09.749: ERROR/logwrapper(130): executing /system/bin/tc failed: No such file or directory
06-10 09:16:09.829: ERROR/logwrapper(131): executing /system/bin/tc failed: No such file or directory
06-10 09:16:09.970: ERROR/logwrapper(133): executing /system/bin/tc failed: No such file or directory
06-10 09:16:25.328: ERROR/HierarchicalStateMachine(58): TetherMaster - unhandledMessage: msg.what=3
06-10 09:16:54.835: ERROR/Database(290): Failure 1 (table material already exists) on 0x22dec8 when preparing 'create table material(_id integer primary key autoincrement, _no text not null, name text not null, addr text default 'seoul', ddate date)'.
06-10 09:16:54.914: ERROR/Database(290): Failure 1 (table material already exists) on 0x22dec8 when preparing 'create table material(_id integer primary key autoincrement, _no text not null, name text not null, addr text default 'seoul', ddate date)'.
06-10 09:16:55.894: ERROR/Database(290): Failure 1 (no such table: material) on 0x22dec8 when preparing 'drop table material'.
06-10 09:16:55.894: ERROR/dropTable()Error! :(290): android.database.sqlite.SQLiteException: no such table: material: drop table material
06-10 09:16:56.734: ERROR/Database(290): Failure 1 (table material already exists) on 0x22dec8 when preparing 'create table material(_id integer primary key autoincrement, _no text not null, name text not null, addr text default 'seoul', ddate date)'.
06-10 09:17:14.495: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:14.665: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:16.024: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:16.135: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:16.697: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:16.886: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:17.377: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:17.565: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:17.855: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:17.975: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:18.344: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"
06-10 09:17:18.456: ERROR/selectData():(290): SELECT _no, name, addr FROM material WHERE _no = "a1"




말씀하셨듯히 자동증가키이므로 digit값만 받을 수 있습니다~ 제가 제대로 이해했나요 =_=?