2012-01-19 5 views
1

私のテキストフィールドに何かを入れ、それをデータベースに保存すると、その行のIDはNULL ではなく ここにデータベースを作成するためのコードですデータをデータベースに入れる:私の最初の作成された行の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"); 
} 

、これは私がデータでやっているものです:

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

それは確かに「null1」のIDを持つことはできませんテーブル定義にはIDがINTEGERとして定義されているため、その値を設定しようとするとエラーが発生し、dbはそれを格納しません。

読み込み中または表示中にnull値に追加する可能性があります。null + 1 = "null1"なんらかの文字列キャストhocus pocusですが。 idフィールドをどのように取得して表示しているかを表示できますか?なぜあなたはそれが "null1"だと思いますか?

+0

SQLiteは動的な型指定を使用しています。[よくある質問:SQLiteでできます整数型のデータベース列に文字列を挿入します!](http://www.sqlite.org/faq.html#q3)。 – beerbajay

+0

これは印刷上の問題のように聞こえます。プログラム内のどこからでも 'System.out.print'ステートメントとなります(前に実行されている限り) –

+0

はgetData()で結果が" "に初期化されていますnullで始めるには? – elijah

関連する問題