id로 select 하는 것이 아니고 선택한 날짜로 select 하는 것이라서 db 쪽에 date로 select 하는 메소드를 만들었는데 안되는 것인가요??
실행 시켜보니깐 애러가 뜨던데... (id로 select 하는 구분도 따로 있습니다..)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ DB.class ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
public Cursor onSelectDate(String date) throws SQLException{
Cursor cursor = db.query(true, DATABASE_TABLE,
new String[] { KEY_TITLE, KEY_POINT, KEY_DATE, KEY_START_TIME,
KEY_END_TIME, KEY_MEMO, KEY_MESSAGE }, KEY_DATE + "="
+ date, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 실행.class ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.today);
Intent intent = getIntent();
today = intent.getStringExtra("Param1");
TextView title_text = (TextView) findViewById(R.id.texttoday);
title_text.setText(today);
mDBHelper = new MyDBHelper(this);
mDBHelper.open();
cursor = mDBHelper.onSelectDate(today);
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1, });
// , "start_time" android.R.id.text2
ListView list = (ListView) findViewById(R.id.list1);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
mDBHelper.close();
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
흠...혹시 선택한 날짜를 먼저 DB에 저장을 해야 되는 것인가요??
jelly 님께서 말씀 하신 것 같이 해봤는데 애러가 또 뜨더라구요...calendar 쪽에서 선택한 날짜를 먼저 해야 되는 것인가 싶은... logcat error 좀
봐 주시면 안될까요??
11-06 13:19:45.922: E/AndroidRuntime(1470): FATAL EXCEPTION: main
11-06 13:19:45.922: E/AndroidRuntime(1470): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.calednar/com.android.calednar.TodayActivity}: android.database.sqlite.SQLiteException: near "년11월1일": syntax error: , while compiling: SELECT DISTINCT title, point, date, startTime, endTime, memo, m_message FROM today WHERE date=?2012년11월1일
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.os.Looper.loop(Looper.java:137)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread.main(ActivityThread.java:4424)
11-06 13:19:45.922: E/AndroidRuntime(1470): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 13:19:45.922: E/AndroidRuntime(1470): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 13:19:45.922: E/AndroidRuntime(1470): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-06 13:19:45.922: E/AndroidRuntime(1470): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-06 13:19:45.922: E/AndroidRuntime(1470): at dalvik.system.NativeStart.main(Native Method)
11-06 13:19:45.922: E/AndroidRuntime(1470): Caused by: android.database.sqlite.SQLiteException: near "년11월1일": syntax error: , while compiling: SELECT DISTINCT title, point, date, startTime, endTime, memo, m_message FROM today WHERE date=?2012년11월1일
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405)
11-06 13:19:45.922: E/AndroidRuntime(1470): at com.android.DB.MyDBHelper.onSelectDate(MyDBHelper.java:147)
11-06 13:19:45.922: E/AndroidRuntime(1470): at com.android.calednar.TodayActivity.onCreate(TodayActivity.java:50)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.Activity.performCreate(Activity.java:4465)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-06 13:19:45.922: E/AndroidRuntime(1470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
이렇게 해보시겠어요 만약 이것도 안되면 디비 생성시 구문 오류 있을거 같기도 하구요
logcat에 invalid table 이라는 애러가 뜨네요... 오픈소스를 사용한 것이라서 이상이 없을 텐데....
제가 지금 졸작을 여기저기 오픈 소스를 찾아서 하고 있어서 다른 클래스에서
cursor = db.rawQuery( "SELECT * FROM today WHERE date = '" + today + "'", null);
이렇게 되어 잇는 것을
cursor = mDBHelper.onSelectDate(today); 이렇게 한 것입니다... 이게 틀린 것인가...
public class MyDBHelper {
private static final String DATABASE_NAME = "Today.db"; // DB 이름
private static final String DATABASE_TABLE = "today"; // DB 테이블 이름
private static final int DATABASE_VERSION = 1; // DB 버전
public static final String KEY_TITLE = "title";
public static final String KEY_POINT = "point";
public static final String KEY_DATE = "date";
public static final String KEY_START_TIME = "startTime";
public static final String KEY_END_TIME = "endTime";
public static final String KEY_MEMO = "memo";
public static final String KEY_MESSAGE = "m_message";
public static final String KEY_ROWID = "_id";
public static final int FIND_BY_TITLE = 1;
public static final int FIND_BY_POINT = 2;
public static final int FIND_BY_DATE = 3;
public static final int FIND_BY_MEMO = 4;
public static final int FIND_BY_START_TIME = 5;
public static final int FIND_BY_END_TIME = 6;
public static final int FIND_BY_MESSAGE = 7;
private final Context mCtx;
private DatabaseHelper mDbHelper;
private static final String TAG = "DateDB";
private SQLiteDatabase db; // 데이터 베이스 인스턴스, insert(),update(), query(),
// delete()등 메소드 호출
//새로운 테이블을 만드는 sql문
private static final String DATABASE_CREATE = "CREATE TABLE today(_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "title TEXT, "
+ "point TEXT, "
+ "date TEXT, "
+ "memo TEXT, "
+ "startTime TEXT, " + "endTime TEXT, " + "m_message TEXT);";
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override //새로운 데이터 테이블을 만듦
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading db from version" + oldVersion + " to"
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE); //old 테이블은 버림
onCreate(db); //새로운 테이블을 만듦
}
}
public MyDBHelper(Context ctx) {
this.mCtx = ctx;
}
public MyDBHelper open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
db = mDbHelper.getWritableDatabase();
return this;
}
// public SQLiteDatabase getMyWritableDatabase() {
// if ((db == null) || (!db.isOpen())) {
// db = this.getMyWritableDatabase();
// }
// return db;
// }
public void close() {
mDbHelper.close();
}
public long onInsert(String title, String point, String date, String memo,
String startTime, String endTime, String m_message) { // 레코드
// 생성
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_POINT, point);
initialValues.put(KEY_DATE, date);
initialValues.put(KEY_START_TIME, startTime);
initialValues.put(KEY_END_TIME, endTime);
initialValues.put(KEY_MEMO, memo);
initialValues.put(KEY_MESSAGE, m_message);
return db.insert(DATABASE_TABLE, null, initialValues);
}
public boolean onDelete(long rowID) { // 레코드 삭제
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowID, null) > 0;
}
public Cursor onSelectAll() { // 모든 레코드 반환
return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
KEY_POINT, KEY_DATE, KEY_MEMO, KEY_START_TIME, KEY_END_TIME,
KEY_MESSAGE }, null, null, null, null, null, null);
}
public Cursor onSelect(long rowID) throws SQLException { // 특정 레코드 반환
Cursor mCursor =
db.query(true, DATABASE_TABLE,
new String[] { KEY_TITLE, KEY_POINT, KEY_DATE, KEY_START_TIME,
KEY_END_TIME, KEY_MEMO, KEY_MESSAGE }, KEY_ROWID + "="
+ rowID, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public Cursor onSelectDate(String date) throws SQLException{
Cursor cursor = db.query(true, null, null, KEY_DATE + "=?", new String[]{date}, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
public boolean onUpdate(long rowID, String title, String point,
String date, String memo, String startTime, String endTime,
String m_message) { // 레코드 수정
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_POINT, point);
args.put(KEY_DATE, date);
args.put(KEY_MEMO, memo);
args.put(KEY_START_TIME, startTime);
args.put(KEY_END_TIME, endTime);
args.put(KEY_MESSAGE, m_message);
return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowID, null) > 0;
}
}
이걸로 해보시겠어요