이리도 해보고 저리도 해보고 있습니다. ㅠㅠ
소스.1
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;
public class NotesDbAdapter { public static final String KEY_TITLE = "title";
public static final String KEY_BODY = "body";
public static final String KEY_BODY2 = "body2"; public static final String KEY_ROWID = "_id";
private static final String TAG = "NotesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
/**
* Database creation sql statement
*/
private static final String DATABASE_CREATE =
"create table notes (_id integer primary key autoincrement, "
+ "title text not null, body text not null, body2 text not null);";
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "notes";
private static final int DATABASE_VERSION = 2;
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS notes"); onCreate(db);
}
}
public NotesDbAdapter(Context ctx) { this.mCtx = ctx;
}
public NotesDbAdapter open() throws SQLException { mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() { mDbHelper.close();
}
public long createNote(String title, String body, String body2) { ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_BODY, body);
initialValues.put(KEY_BODY2, body2); return mDb.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteNote(long rowId) { Log.i("Delete called", "value__" + rowId); return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllNotes() { return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_BODY2 }, null, null, null, null, null);
}
public Cursor fetchNote(long rowId) throws SQLException { Cursor mCursor =
mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_BODY2 }, KEY_ROWID + "=" + rowId, null, null, null, null,
null);
if (mCursor != null) { mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateNote(long rowId, String title, String body, String body2) { ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_BODY, body);
args.put(KEY_BODY2, body2); return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
}
소스.2
import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;
public class DatabaseTestActivity extends Activity { private NotesDbAdapter dbAdapter;
private static final String TAG = "NotesDbAdapter";
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, "DatabaseTest :: onCreate()");
dbAdapter = new NotesDbAdapter(this);
dbAdapter.open();
Button bt = (Button)findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { dbAdapter.createNote("title", "body", "body2"); TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText("데이터베이스에 넣었습니다."); TextView tv1 = (TextView)findViewById(R.id.textView2);
TextView tv2 = (TextView)findViewById(R.id.textView3);
tv1.setText("Title과 Body를 데이터베이스에 저장하였습니다.");
tv2.setText("얄라숑얄라리얄라"); Log.d(TAG, "First Button Click");
}
});
Button bt1 = (Button)findViewById(R.id.button2);
bt1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Cursor result = dbAdapter.fetchAllNotes();
result.moveToFirst();
while(!result.isAfterLast()){ String title = result.getString(1);
String body = result.getString(2);
String body2 = result.getString(3); TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(title);
TextView tv1 = (TextView)findViewById(R.id.textView2);
tv1.setText(body);
TextView tv2 = (TextView)findViewById(R.id.textView3); tv2.setText(body2);
result.moveToNext();
}
Log.d(TAG, "Second Button Click");
result.close();
}
});
}
}
body2를 추가한 상황인데요.
내용을 추가하는데는 에러가 없지만..
디비에서 출력해올때.. 에러창과 함께 팅깁니다.
정말 디피컬트하게 공부해야하는데...... 이같은 예제들을 설명해주는 곳은 없어서 하드하게.. 하나하나 추가해보면서
공부를 해보려합니다 도와주세요 ㅠㅠ
String title = result.getString(1); << result.getString(0) 가 되어야하지않을까요?
필드가 3개인데 지금보니 필드0은 지나치고 필드1,필드2,필드3 을 받고계시네요.
DDMS에서 빨간줄표시난데만 올려주시면 확실히알수있을듯한데 코드만 봐서는 확실하지는않구요.
이.. 사이트도 다른 사이트..(안드로이드 사이드 등등)과 다를 바가 없네요. 알면서 귀찮아서 답변 안달아주시는 사람들이 무지 많은듯..
3일동안 뒤져서.... 짬짬히..요. 알아냇는데요. 너무 허무하더라구요.
어댑터에서 디비 버전을.. 2에서 1로만 바꾸시면 되요. ㅡㅡ;;
정말.. 다들 알면서 이상한 답변에... 질문자에게 질문을 해주시는.. 분까지.. 너무들 하셔요.
전.. 아는건 무조건 다 대답해줄거에요. 이기적인 세상에 반기를 들겠습니다.
디비 알아보기 좋은 사이트 :
커니님의.. 상세한 설명이 독보적이에요!!
디비의 원형으로 쓸만한 곳이에요. 하지만 역시.. 추가하시려면 버전을 1로 바꾸세요.
저와 같은 문제를 가지고 계시는 어떤분;;; 안습. 아무도 안도와줘여;;
http://purepleya.blogspot.com/2011_08_01_archive.html
큰 도움이 된.. 블로그에요. 참 정리를 잘해두셨어요. 각종 에러에 대한 답변이 시원스레 있어요.
해결을 하게 된.. 버전 1로 바꾸는 시도는... 그냥 여기저기 돌아댕ㄱ다가... 설마하고 바꿔본거 뿐이에요. 어디서 답을 알려주진않았어요.
버전 2로도... 그전에 원본은 잘 돌아가서... 정말 의심할 여지가 없었죠. 2를 3으로도 바꿔도 안됐었거든요. 근데 1로 바꾸니.. 헐.ㅋㅋㅋ
아무튼 도움이 되시길 바래요. 같은 문제에 봉착하신다면요.
글구 검색하러 다닌 구글 검색 키워드 :
android Database
갑갑하게 이렇게 검색하지마세요.
android NotesDbAdapter
이걸로 검색을 해보다가....
android.database.sqlite.sqliteexception table has no column named
이건.. ddms로 오류난 부분을 적은거에요. 이게.. 아마 제 해결의 실마리였던 것 같아요.
뭐든.. 검색하려면 세세한 특징을 검색해야되요^^ 영어도 원문을 번역해보는 것도 중요해요




그냥 궁금해서 그러는데요... 쿼리문에서 테이블 만들때 테이블 이름 띄어쓰기해도 되나요?
sqlite jdbc로 db만드는 예제에서 할때는 오류나길래 그냥 궁금해서요..