2011-12-28 3 views
1

메모장 자습서를 작성했으며 SQL Server는 수정 된 버전입니다. 어떤 이유로 내 애플 리케이션이 올바르게 그것에 쓰고 있지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 코드의 어떤 부분이 잘못된 것인지 이해하지 못한다.SQL 서버가 제대로 작동하지 않는 이유는 무엇입니까 (android SDK)?

package com.drawing; 

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_ROWID = "_id"; 
public static final String KEY_X = "x"; 
public static final String KEY_Y = "y"; 
public static final String KEY_Size = "size"; 
private static final String TAG = "NotesDbAdapter"; 
private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 
private static final String DATABASE_NAME = "data"; 
private static final String DATABASE_TABLE = "notes"; 
private static final int DATABASE_VERSION = 2; 
private static final String DATABASE_CREATE = 
      " create table " + DATABASE_TABLE + " (" 
     + KEY_ROWID + " integer primary key autoincrement, " 
     + KEY_X + " text not null, " 
     + KEY_Y + " text not null, " 
     + KEY_Size + " text not null);"; 

    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) { 
       try { 
        db.execSQL(DATABASE_CREATE); 
       } catch (Exception e) { 
        Log.e("dbAdapter", e.getMessage().toString()); 
       } 
      } 

     @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(float f, float g, int size) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_X, f); 
     initialValues.put(KEY_Y, g); 
     initialValues.put(KEY_Size, size); 
     return mDb.insert(DATABASE_TABLE, null, initialValues); 
    } 

    public boolean deleteNote(long rowId) { 

     return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 


    public Cursor fetchAllNotes() { 

     return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_X,KEY_Y,KEY_Size}, null, null, null, null, null); 
    } 

    public Cursor fetchNote(long rowId) throws SQLException { 

     Cursor mCursor = 

      mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_X,KEY_Y,KEY_Size}, KEY_ROWID + "=" + rowId, null, 
        null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 

    } 

    public boolean updateNote(long rowId, int x, int y, int size) { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_X, x); 
     args.put(KEY_Y, y); 
     args.put(KEY_Size, size); 
     return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
    } 
} 
+0

오류 메시지가 나타나거나 코드가 실패합니까? 아니면 ...? –

+0

"테이블 '메모'에 삽입하는 중 오류가 발생했습니다. 봐 주셔서 감사합니다. – jersam515

+0

생성 된 INSERT를 볼 수 있습니까? 당신은 테이블이 만들어 졌는지 확신합니까? 다른 통화 중 하나를 수행합니까? 선택 작업? –

답변

3

나는 당신의 문제는 여기에서 시작된다 생각 :

public static final String KEY_ROWID = "_id";  
public static final String KEY_X = "_id";  
public static final String KEY_Y = "_id";  
public static final String KEY_Size = "_id"; 

내가 더 내가 링크 질문처럼해야 거라 생각 :

public static final String KEY_BOOK = "book"; 
public static final String KEY_AUTHOR = "author"; 
public static final String KEY_ISBN = "isbn"; 
public static final String KEY_RATING = "rating"; 
public static final String KEY_ROWID = "_id"; 

둘째, 테이블 생성을도 잘못된 것 같습니다 :

private static final String DATABASE_CREATE = 
      " create table " + DATABASE_TABLE + " (" 
        + KEY_ROWID + " integer primary key autoincrement, " 
        + KEY_X + " integer primary key autoincrement, " 
        + KEY_Y + " integer primary key autoincrement, " 
        + KEY_Size + " integer primary key autoincrement, "; 

기본 키 및 자동 증가로 모든 필드를 만들었습니다. 실제로 의미가 없습니다. 다시 다른 질문을보십시오 :

private static final String DATABASE_CREATE = 
     " create table " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " integer primary key autoincrement, " 
    + KEY_AUTHOR + " text not null, " 
    + KEY_BOOK + " text not null, " 
    + KEY_ISBN + " text not null, " 
    + KEY_RATING + " text not null);"; 

이것은 훨씬 더 합리적입니다.

아래 질문에 대해 자세히 살펴보고 시작한 자습서를 다시 읽어보십시오.

I keep getting the SQLException error with this

여기서 문제는 문제가 있지만, (당신이 문제를 갖고있는 것 같다 곳입니다) 제대로 열을 식별하는 것처럼 보일 수 있습니다. 대답은 몇 가지 다른 단계를 거칩니다. 여기에 자신의 질문의 오른쪽에있는 '관련'제안을 살펴 보는 것이 좋습니다. 올바른 방향으로 인도 할 수있는 더 많은 지침을 찾을 수 있습니다.

+0

모든 도움을 주셔서 감사합니다. 나는 그 중 몇 가지로 보았습니다. 그러나 여전히 동일한 오류가 발생하고 있습니다. OP – jersam515

+0

의 새 코드 질문에 코드를 삽입하고 더 적절하다고 판단되면 이전 코드를 덮어 씁니다. –

+0

거기에, 처음에는 문제가 생겨서 미안해, Ctrl-k를 강조 표시해야한다는 걸 잊어 버렸습니다. – jersam515

0

같은 문제가있는 사람 : 위의 Anders와 같은 열을 다시 초기화하고 데이터베이스 버전을 변경해야 onUpgrade가 실행되므로 감사합니다.

+0

다행 이니 다행입니다. 멀리 있었고 지금까지 답변 할 수 없었습니다. –

+0

주신 모든 도움에 감사드립니다. – jersam515

관련 문제