2014-04-29 45 views
0

我想創建一個簡單的應用程序,通過點擊一個按鈕,在數據庫中添加由傳感器聽者返回當前值允許的用戶, 於是我開始創建一個SQLite數據庫(我第一次使用sqlite)。 我創建的所有必要的類(根據標準)。的Android源碼插入返回錯誤

這裏是我的代碼:

*類SSnsor.java:

public class SSensor { 

private int id; 
private String Accx; 
private String Accy; 
private String Accz; 
private String Gyrox; 
private String Gyroy; 
private String Gyroz; 

public SSensor() {}; 

public SSensor(String Accx, String Accy,String Accz, String Gyrox,String Gyroy, String Gyroz){ 
    this.Accx = Accx; 
    this.Accy = Accy; 
    this.Accz = Accz; 
    this.Gyrox = Gyrox; 
    this.Gyroy = Gyroy; 
    this.Gyroz = Gyroz; 
} 

public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 


public String getAccx() { 
    return Accx; 
} 
public String getAccy() { 
    return Accy; 
} 
public String getAccz() { 
    return Accz; 
} 
public String getGyrox() { 
    return Gyrox; 
} 
public String getGyroy() { 
    return Gyroy; 
} 
public String getGyroz() { 
    return Gyrox; 
} 


public void setGyrox(String Gyrox) { 
    this.Gyrox = Gyrox; 
} 
public void setGyroy(String Gyroy) { 
    this.Gyroy = Gyroz; 
} 
public void setGyroz(String Gyroz) { 
    this.Gyroz = Gyroz; 
} 
public void setAccx(String Accx) { 
    this.Accx = Accx; 
} 
public void setAccy(String Accy) { 
    this.Accy = Accy; 
} 
public void setAccz(String Accz) { 
    this.Accz = Accz; 
} 
} 

*類MaBaseSQLite它允許創建和表的升級:

public class MaBaseSQLite extends SQLiteOpenHelper { 

private static final String TABLE_SENSORS = "table_sensors"; 
private static final String COL_ID = "ID"; 
private static final String COL_AX = "AX"; 
private static final String COL_AY = "AY"; 
private static final String COL_AZ = "AZ"; 
private static final String COL_GX = "GX"; 
private static final String COL_GY = "GY"; 
private static final String COL_GZ = "GZ"; 

private static final String CREATE_BDD = "CREATE TABLE " + TABLE_SENSORS + " (" 
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_AX + " TEXT NOT NULL, " 
+ COL_AY + " TEXT NOT NULL, " + COL_AZ + " TEXT NOT NULL, " + COL_GX + " TEXT NOT 
    NULL, " + COL_GY + " TEXT NOT NULL, "+ COL_GZ + " TEXT NOT NULL);"; 

public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) { 
    super(context, name, factory, version); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_BDD); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_SENSORS + ";"); 
    onCreate(db); 
} 
} 

*所述SensorsBDD類(DAO類):

public class SensorsBDD { 

private static final int VERSION_BDD = 1; 
private static final String NOM_BDD = "senssor.db"; 

private static final String TABLE_SENSORS = "table_sensors"; 
private static final String COL_ID = "ID"; 
private static final int NUM_COL_ID = 0; 
private static final String COL_AX = "AX"; 
private static final int NUM_COL_AX = 1; 
private static final String COL_AY = "AY"; 
private static final int NUM_COL_AY = 2; 
private static final String COL_AZ = "AZ"; 
private static final int NUM_COL_AZ = 3; 
private static final String COL_GX = "GX"; 
private static final int NUM_COL_GX = 4; 
private static final String COL_GY = "GY"; 
private static final int NUM_COL_GY = 5; 
private static final String COL_GZ = "GZ"; 
private static final int NUM_COL_GZ = 6; 


private SQLiteDatabase bdd; 

private MaBaseSQLite maBaseSQLite; 

public SensorsBDD(Context context){ 
    maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD); 
} 

public void open(){ 
    bdd = maBaseSQLite.getWritableDatabase(); 
} 

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

public SQLiteDatabase getBDD(){ 
    return bdd; 
} 

public long insertSensor(SSensor sensor){ 

    ContentValues values = new ContentValues(); 

    values.put(COL_ID, sensor.getId()); 
    values.put(COL_AX, sensor.getAccx()); 
    values.put(COL_AY, sensor.getAccy()); 
    values.put(COL_AZ, sensor.getAccz()); 
    values.put(COL_GX, sensor.getGyrox()); 
    values.put(COL_GY, sensor.getGyroy()); 
    values.put(COL_GZ, sensor.getGyroz()); 

    return bdd.insert(TABLE_SENSORS, null, values); 
} 
     } 

*在我的活動課,我所做的就是這樣的:

public class MainActivity extends ActionBarActivity { 

SensorsBDD sensorBdd ; 
SSensor s; 
Button save=null; 
long i; 
String str; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    s = new SSensor ("a","b","c","d","e","f");//silly i know 
    sensorBdd = new SensorsBDD(this); 

     save = (Button) findViewById(R.id.bouton); 

     save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      i= sensorBdd.insertSensor(s);  
      str = String.valueOf(i); 

      Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show(); 

      } 
     }); 
     } 

@Override 
    protected void onResume() { 
    sensorBdd.open(); 
    super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
    sensorBdd.close(); 
    super.onPause(); 
    } 
} 

我第一次單擊該按鈕敬酒顯示0(新插入的行的行ID),然後每當我按一下按鈕敬酒顯示-1表示發生錯誤。

如果我發出一個平庸的錯誤(是一個機器人新手),請提前幫助,並提前抱歉。

回答

0

你一遍又一遍插入相同的價值觀。由於ID列是INTEGER PRIMARY KEY AUTOINCREMENT,試圖插入行具有相同的ID將失敗。

刪除

values.put(COL_ID, sensor.getId()); 

讓數據庫遞增機制選擇一個新的ID給你。

+0

非常感謝@laalto,你讓我很快樂 – user3510821