package com.hannam.project.sqlite;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ActivityAndroidSQLite extends Activity {
private EditText code = null;
private EditText name = null;
private EditText ooo = null;
private EditText name2 = null;
private EditText number = null;
private EditText add = null;
private EditText eadd = null;
private EditText query_print = null;
private Button infoRead = null;
private Button infoWrite = null;
private Button infoDelete = null;
private final String db_file_name = "data.db";
private final int db_version = 1;
private DBHelper dbHelper = null;
private SQLiteDatabase sqliteDB = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.code = (EditText) findViewById(R.id.code);
this.name = (EditText) findViewById(R.id.name);
this.ooo = (EditText) findViewById(R.id.ooo);
this.name2 = (EditText) findViewById(R.id.name2);
this.number = (EditText) findViewById(R.id.number);
this.add = (EditText) findViewById(R.id.add);
this.eadd = (EditText) findViewById(R.id.eadd);
this.query_print = (EditText) findViewById(R.id.et_queryprint);
this.infoRead = (Button) findViewById(R.id.Button_read);
this.infoWrite = (Button) findViewById(R.id.Button_write);
this.infoDelete = (Button) findViewById(R.id.Button_delete);
this.infoRead.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String str = "";
Cursor cursor = null;
System.out.println("읽기버튼클릭");
try {
cursor = readDB(code.getText().toString(), name
.getText().toString());
cursor.moveToFirst();
System.out
.println("커서의 현재 포커스위치 : " + cursor.getPosition());
System.out.println("컬럼의 수 : " + cursor.getColumnCount());
System.out.println("레코드 수 : " + cursor.getCount());
while (true) {
for (int i = 0; i < cursor.getColumnCount(); i++) {
str += cursor.getColumnName(i) + " : "
+ cursor.getString(i) + " ";
}
break;
}
query_print.setText(str);
} catch (Exception e) {
System.out.println("읽기 에러발생 : " + e.getMessage());
} finally {
cursor.close();
}
}
});
this.infoWrite.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("쓰기 버튼 클릭");
try {
writeDB(code.getText().toString(), name.getText()
.toString());
} catch (Exception e) {
System.out.println("쓰기에러발생 : " + e.getMessage());
}
}
});
this.infoDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("삭제 버튼 클릭");
try {
deleteDB(code.getText().toString(), name
.getText().toString());
} catch (Exception e) {
System.out.println("삭제 에러발생 : " + e.getMessage());
}
}
});
this.dbHelper = new DBHelper(this);
this.sqliteDB = this.dbHelper.getWritableDatabase();
}
private void writeDB(String code, String name) throws Exception {
ContentValues cv = new ContentValues();
cv.put("code", code);
cv.put("name", name);
long colNum = this.sqliteDB.insert("CODENAME", "", cv);
this.showToast("쓰기 완료 : " + colNum);
}
private Cursor readDB(String code, String name) throws Exception {
Cursor cursor = this.sqliteDB.query("codename", new String[] { "code",
"name" }, "code = ? and name = ?",
new String[] { code, name }, null, null, null, null);
this.showToast("읽기완료");
return cursor;
}
private void deleteDB(String code, String name) throws Exception {
int colNum = this.sqliteDB.delete("codename", "code = ? and name = ?", new String[]{code,name});
this.showToast("삭제 완료 : " + colNum);
}
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context,db_file_name,null, db_version);
}
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("데이터베이스가 생성되었습니다.");
}
@Override
public synchronized void close() {
super.close();
System.out.println("데이터베이스가 닫혔습니다.");
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
System.out.println("데이터베이스가 오픈되었습니다.");
db.execSQL("create table if not exists codename" + "(code VARCHAR(20) primary key," + "name CARCHAR(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists codename");
onCreate(db);
}
}
private void showToast(String msg) {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
this.sqliteDB.close();
}
}
--
쓰기완료는 뜨는데 읽기누르면 에러창이 떠요...;;; 왜그러는지 알려주셔요 ㅠㅠ 고수분들!!
Logcat 추가입니다 ㅋㅋ;;
11-11 01:36:08.341: ERROR/Database(243): Error inserting code=q name=r
11-11 01:36:08.341: ERROR/Database(243): android.database.sqlite.SQLiteException: table CODENAME has no column named code: , while compiling: INSERT INTO CODENAME(code, name) VALUES(?, ?);
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1026)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1412)
11-11 01:36:08.341: ERROR/Database(243): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1285)
11-11 01:36:08.341: ERROR/Database(243): at com.hannam.project.sqlite.ActivityAndroidSQLite.writeDB(ActivityAndroidSQLite.java:128)
11-11 01:36:08.341: ERROR/Database(243): at com.hannam.project.sqlite.ActivityAndroidSQLite.access$4(ActivityAndroidSQLite.java:123)
11-11 01:36:08.341: ERROR/Database(243): at com.hannam.project.sqlite.ActivityAndroidSQLite$2.onClick(ActivityAndroidSQLite.java:95)
11-11 01:36:08.341: ERROR/Database(243): at android.view.View.performClick(View.java:2364)
11-11 01:36:08.341: ERROR/Database(243): at android.view.View.onTouchEvent(View.java:4179)
11-11 01:36:08.341: ERROR/Database(243): at android.widget.TextView.onTouchEvent(TextView.java:6540)
11-11 01:36:08.341: ERROR/Database(243): at android.view.View.dispatchTouchEvent(View.java:3709)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:08.341: ERROR/Database(243): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
11-11 01:36:08.341: ERROR/Database(243): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
11-11 01:36:08.341: ERROR/Database(243): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
11-11 01:36:08.341: ERROR/Database(243): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
11-11 01:36:08.341: ERROR/Database(243): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
11-11 01:36:08.341: ERROR/Database(243): at android.os.Handler.dispatchMessage(Handler.java:99)
11-11 01:36:08.341: ERROR/Database(243): at android.os.Looper.loop(Looper.java:123)
11-11 01:36:08.341: ERROR/Database(243): at android.app.ActivityThread.main(ActivityThread.java:4363)
11-11 01:36:08.341: ERROR/Database(243): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 01:36:08.341: ERROR/Database(243): at java.lang.reflect.Method.invoke(Method.java:521)
11-11 01:36:08.341: ERROR/Database(243): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-11 01:36:08.341: ERROR/Database(243): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-11 01:36:08.341: ERROR/Database(243): at dalvik.system.NativeStart.main(Native Method)
11-11 01:36:08.511: INFO/NotificationService(54): enqueueToast pkg=com.hannam.project.sqlite callback=android.app.ITransientNotification$Stub$Proxy@43d41dc8 duration=0
11-11 01:36:08.890: INFO/ARMAssembler(54): generated scanline__00000177:03515104_00001A01_00000000 [ 73 ipp] (98 ins) at [0x47df18:0x47e0a0] in 1248964 ns
11-11 01:36:09.641: INFO/System.out(243): ì½ê¸°ë²í¼í´ë¦
11-11 01:36:09.651: INFO/System.out(243): ì½ê¸° ìë¬ë°ì : no such column: code: , while compiling: SELECT code, name FROM codename WHERE code = ? and name = ?
11-11 01:36:09.661: DEBUG/AndroidRuntime(243): Shutting down VM
11-11 01:36:09.661: WARN/dalvikvm(243): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
11-11 01:36:09.661: ERROR/AndroidRuntime(243): Uncaught handler: thread main exiting due to uncaught exception
11-11 01:36:09.731: ERROR/AndroidRuntime(243): java.lang.NullPointerException
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.hannam.project.sqlite.ActivityAndroidSQLite$1.onClick(ActivityAndroidSQLite.java:82)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.View.performClick(View.java:2364)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.View.onTouchEvent(View.java:4179)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.widget.TextView.onTouchEvent(TextView.java:6540)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.View.dispatchTouchEvent(View.java:3709)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.os.Handler.dispatchMessage(Handler.java:99)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.os.Looper.loop(Looper.java:123)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at android.app.ActivityThread.main(ActivityThread.java:4363)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at java.lang.reflect.Method.invoke(Method.java:521)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
11-11 01:36:09.731: ERROR/AndroidRuntime(243): at dalvik.system.NativeStart.main(Native Method)
11-11 01:36:09.802: INFO/Process(54): Sending signal. PID: 243 SIG: 3
11-11 01:36:09.811: INFO/dalvikvm(243): threadid=7: reacting to signal 3
11-11 01:36:09.931: INFO/dalvikvm(243): Wrote stack trace to '/data/anr/traces.txt'
11-11 01:36:12.862: INFO/Process(243): Sending signal. PID: 243 SIG: 9
11-11 01:36:12.921: INFO/ActivityManager(54): Process com.hannam.project.sqlite (pid 243) has died.
11-11 01:36:12.972: INFO/WindowManager(54): WIN DEATH: Window{43d767f0 com.hannam.project.sqlite/com.hannam.project.sqlite.ActivityAndroidSQLite paused=false}
11-11 01:36:12.972: INFO/WindowManager(54): WIN DEATH: Window{43c7eea8 Toast paused=false}
11-11 01:36:13.282: INFO/UsageStats(54): Unexpected resume of com.android.launcher while already resumed in com.hannam.project.sqlite
11-11 01:36:13.552: WARN/InputConnectionWrapper.ICC(251): Timed out waiting on IInputContextCallback
11-11 01:36:13.722: WARN/InputManagerService(54): Got RemoteException sending setActive(false) notification to pid 243 uid 10026
11-11 01:59:27.361: DEBUG/dalvikvm(54): threadid=15: bogus mon 1+0>0; adjusting
미약한 실력이지만,,
INSERT INTO CODENAME(code, name) VALUES(?, ?);
쿼리문이 이렇게 되어있는데요.
쿼리문 변환이 잘못 되신듯 합니다.
Codename 테이블에 code라는 컬럼이 없다고 하네요...
컬럼명 확인하세요...
근데 테이블 이름 대소문자 가리던가.... 햇갈리는데요... 다른데는 소문자로 쓰시고 저 부분만 대문자네요...
컬럼 얘기 나오는거 봐서는 관계가 없어보이긴 하는데....
이런 말 하면.. 테클일지 모르겠지만,
SQLlite는 대소문자 구분 안하는 걸로 알겠습니다.
분명 저기 물음표에 원래 값이 들어가야 하는데.. 널값 이거나 순서가 잘못 된듯 합니다.
쿼리문 변환 해주는 부분을 확인해보세요.
Cursor cursor = this.sqliteDB.query("codename", new String[] { "code",
"name" }, "code = ? and name = ?",
new String[] { code, name }, null, null, null, null);
아마도 이부분이..