마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

db에서 컬럼이 생성되지를 않았다고 오류를 뿜네요

0 추천

Date 컬럼이 왜 생성이 안되는지 모르겠습니다.

06-10 07:15:17.222: E/AndroidRuntime(2541): FATAL EXCEPTION: main
06-10 07:15:17.222: E/AndroidRuntime(2541): java.lang.IllegalStateException: Could not execute method of the activity
06-10 07:15:17.222: E/AndroidRuntime(2541):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at dalvik.system.NativeStart.main(Native Method)
06-10 07:15:17.222: E/AndroidRuntime(2541): Caused by: java.lang.reflect.InvocationTargetException
06-10 07:15:17.222: E/AndroidRuntime(2541):  at java.lang.reflect.Method.invokeNative(Native Method)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at java.lang.reflect.Method.invoke(Method.java:511)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.view.View$1.onClick(View.java:3039)
06-10 07:15:17.222: E/AndroidRuntime(2541):  ... 11 more
06-10 07:15:17.222: E/AndroidRuntime(2541): Caused by: android.database.sqlite.SQLiteException: table ksj has no column named Date: , while compiling: INSERT INTO ksj(Date, Address) VALUES('13.06.10 16:15:13', 'Where are you, now?');
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
06-10 07:15:17.222: E/AndroidRuntime(2541):  at com.example.gps0610.MainActivity.mOnClick(MainActivity.java:194)
06-10 07:15:17.222: E/AndroidRuntime(2541):  ... 14 more

 

 

 

public void mOnClick(View v) {
  SQLiteDatabase db;
  String sql;
  switch(v.getId()) {
   case R.id.gps :
    
    Log.d("location", "button pressed");
    TimeZone timezone = TimeZone.getTimeZone("Etc/GMT-9");
    TimeZone.setDefault(timezone);
       
    SimpleDateFormat formater = new SimpleDateFormat("yy.MM.dd HH:mm:ss", Locale.KOREA);
    Date current = new Date();
       
    String mtime = formater.format(current);
    System.out.println(mtime);
    getTime = (TextView)findViewById(R.id.getTime);
    getTime.setText(mtime);
    
    //gps source
    getLocation();
    
    break;
    
   case R.id.save :
    
    String Date = getTime.getText().toString();
    String Address = juso.getText().toString();
    
    dbHelper = new DBHelper(this, dbName, null, dbVersion);
    db = dbHelper.getWritableDatabase();
    sql = String.format("INSERT INTO ksj(Date, Address) VALUES('%s', '%s');", Date, Address);
    Log.d("tag", sql);
    db.execSQL(sql);
    Toast.makeText(this, "저장되었습니다.", Toast.LENGTH_SHORT).show();
    
    break;
    
   case R.id.data :
   
    setContentView(R.layout.activity2nd);
    ArrayList<String> item = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, item);
        ListView list = (ListView)findViewById(R.id.list);
        list.setAdapter(adapter);
        adapter.notifyDataSetChanged();
       
        Log.d("DATA", "Search data");
        db = dbHelper.getReadableDatabase();
        sql = "SELECT*FROM ksj;";
        Cursor cursor = db.rawQuery(sql, null);
       
        if(cursor.getCount() > 0) {
         
           while(cursor.moveToNext()){
                 String time1 = cursor.getString(1);
                 Log.d("tag", "cursor.getString1 = "+time1);
                 String juso1 = cursor.getString(2);
                 Log.d("tag", "cursor.getString2 =" +juso1);
                
                 item.add(time1+juso1);
                 adapter.notifyDataSetChanged();
                }
           cursor.close();
          
        }
        dbHelper.close();
        break;
       
   case R.id.back :
    
    setContentView(R.layout.activity_main);
    
    break;
    } 
  }
 
 }
package com.example.gps0610;

public class DBHelper extends SQLiteOpenHelper {
  
//생성자
public DBHelper(Context context, String name, CursorFactory factory, int version) {
 super(context, name, factory, version);
}
//최초 DB를 만들때 한번만 호출된다.
@Override  
public void onCreate(SQLiteDatabase db) {
 // TODO Auto-generated method stub
 db.execSQL("CREATE TABLE ksj(_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ "Date String not null, Address String not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 // TODO Auto-generated method stub
 db.execSQL("DROP TABLE IF EXISTS ksj");
 onCreate(db);
} 
}

 


 

앤드류이드 (6,190 포인트) 님이 2013년 6월 10일 질문
앤드류이드님이 2013년 6월 10일 수정

1개의 답변

0 추천
 
채택된 답변

table ksj has no column named Date: , while compiling: INSERT INTO ksj(Date, Address) 

에러 내용을 보시면 아시겠지만 ksj라는 테이블에 Date 라는 컬럼이 없다는 에러 입니다.

테이블 만드실때 코드를 보니

CREATE TABLE ksj(_id INTEGER PRIMARY KEY AUTOINCREMENT,"

"Date String not null, Address String not null);");

이렇게 작성하셨는데 Sqlite 에서 data type을 String 으로 넣으면 되는게

맞는지는 모르겠군요 제가 알기로는 text 로 넣어야 하는걸로 알고 있는데..

그리고 컬럼명도 다르게 바꾸셔야 할겁니다 Date 는 예약어이기 때문에

아마 컬럼으로 생성하면 에러가 날거에요

Gradler (109,780 포인트) 님이 2013년 6월 10일 답변
앤드류이드님이 2013년 6월 10일 채택됨
네. 해볼께요 감사합니다. 많은 도움이 될것 같아요
본문을 복붙하다보니 조금 이상하게 답변이 달리네요
다시 잘리지 않게 수정해놓았습니다.
...