2012-01-19 1 views
1

내 텍스트 필드에 값을 입력하고 데이터베이스에 저장하면 해당 행의 ID가 null입니다. 대신 1 여기 데이터베이스를 작성하기위한 코드입니다. 데이터를 데이터베이스에 저장하는 것 :데이터베이스에서 처음 만든 행의 ID가 null1

private HelperDb myHelper; 
    private final Context myContext; 
    private SQLiteDatabase myDatabase; 
    private static class HelperDb extends SQLiteOpenHelper { 

    public HelperDb(Context context) { 
     super(context, DATABASE_NAME, null, 1); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     KEY_NAME + " STRING, " + 
     KEY_TEKST + " TEXT, " + 
     KEY_DATUM + " STRING, " + 
     KEY_VREME + " STRING);" 
       ); 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     this.onCreate(db); 

    } 

} 

public Baza(Context c){ 
    myContext = c; 
} 

public Baza open() throws SQLException { 
    myHelper = new HelperDb(myContext); 
    myDatabase = myHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    myHelper.close(); 
} 

// this is how I put data in database 
public long unesiPodatkeBaza(String ime, String napisaniTekst, String uneseniDatum, String unesenoVreme) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, ime); 
    cv.put(KEY_TEKST, napisaniTekst); 
    cv.put(KEY_DATUM, uneseniDatum); 
    cv.put(KEY_VREME, unesenoVreme); 

    return myDatabase.insert(DATABASE_TABLE, null, cv); 

} 

나중에 응용 프로그램에 문제가 있습니다.

내가 데이터베이스에서 데이터를 수집하는 방법입니다

public String[] getData() { 

    String[] kolone = new String[]{KEY_ROWID, KEY_NAME, KEY_TEKST, KEY_DATUM, KEY_VREME}; 

    Cursor c = myDatabase.query(DATABASE_TABLE, kolone, null, null, null, null, null); 

    iRed = c.getColumnIndex(KEY_ROWID); 
    iIme = c.getColumnIndex(KEY_NAME); 
    iTekst = c.getColumnIndex(KEY_TEKST); 
    iDatum = c.getColumnIndex(KEY_DATUM); 
    iVreme = c.getColumnIndex(KEY_VREME); 

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
     result = result + c.getString(iRed) + " " + c.getString(iIme) + " " + c.getString(iTekst) + " " + c.getString(iDatum) + " " + c.getString(iVreme) + "\n"; 
    } 

    return result.split("\n"); 
} 

를이 내가 데이터 뭘하는지 : 그것은 확실히 "null1"등의 ID를 가질 수 없습니다

public class SQLPregled extends Activity{ 

    public String[] data; 
    private ListView lv; 
    private int idSend; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.pregledbaze); 

     lv = (ListView) findViewById(R.id.lvListaBaza); 

     final Baza izlistavanje = new Baza(this); 
     izlistavanje.open(); 
     data = izlistavanje.getData(); 
     izlistavanje.close(); 


     lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data)); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 

       String tmplv = lv.getItemAtPosition(position).toString(); 
       String[] odvojeni = tmplv.split(" "); 

       idSend = Integer.parseInt(odvojeni[0]); 

       AlertDialog.Builder adb = new AlertDialog.Builder(SQLPregled.this); 
       adb.setTitle("Dali zelite da obrisete izabranu poruku?"); 
       adb.setMessage("Id je : " + odvojeni[0]); 
       adb.setPositiveButton("Obrisi", new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         izlistavanje.open(); 
         izlistavanje.deleteData(idSend); 
         izlistavanje.close(); 
         onCreate(null); 

        } 
       }); 

       adb.setNegativeButton("Odustani", new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         dialog.cancel(); 
        } 
       }); 

       adb.show(); 
      } 

     }); 

    } // onCreate 

} 
+0

유용한 정보는 다음과 같습니다. http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks –

답변

1

테이블 정의는 INTEGER로 정의 된 ID를 가지므로 해당 값을 설정할 때 오류가 발생하고 db는 그런 식으로 저장하지 않습니다.

읽을 때/표시 할 때 null 값에 추가하기 때문에 null + 1 = "null1"일종의 문자열 캐스팅 hocus pocus. ID 필드를 가져와 표시하는 방법을 보여줄 수 있습니까? 왜 그것이 "null1"이라고 생각합니까?

+0

SQLite는 동적 입력을 사용합니다. [FAQ : SQLite lets me integer [!] 형식의 데이터베이스 열에 문자열을 삽입하십시오 (http://www.sqlite.org/faq.html#q3). – beerbajay

+0

인쇄 문제처럼 들리지만, 프로그램 내의 다른 곳에서 (시스템에서 실행되는 동안) get System()에서 –

+0

의 'System.out.print'문이 될 수도 있고, 결과가 ""로 초기화되거나 null로 시작하려면? – elijah

관련 문제