2013-06-04 6 views
0

Я сделал простые классы для базы данных, но когда я тестирую ее на реальном устройстве, приложение закрывается!База данных Sqlite не может быть создана

public class MySQLiteHelper extends SQLiteOpenHelper 
{ 
    public static final String TABLE_NAME = "caffe"; 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_ARTIKAL = "artikal"; 
    public static final String COLUMN_PRICE = "price"; 
    public static final String COLUMN_AMOUNT = "amount"; 
    //public static final String COLUMN_TIME = "date&time"; 


    private static final String DATABASE_NAME = "caffe.db"; 
    private static final int DATABASE_VERSION = 1; 


    private static final String DATABASE_CREATE = "create table " + TABLE_NAME + "(" + COLUMN_ID+ " integer primary key autoincrement," +COLUMN_ARTIKAL + " text not null"+ COLUMN_PRICE + " real not null"+ COLUMN_AMOUNT+" integer not null);"; 

    public MySQLiteHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) 
    { 
     database.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     Log.w(MySQLiteHelper.class.getName(), 
     "Upgrading database from version " + oldVersion + " to " 
      + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 

класс DataAccessObject:

public class BD_DAO 
{ 
    private SQLiteDatabase database; 
    private MySQLiteHelper dbHelper; 
    private String[] allColumns = {MySQLiteHelper.COLUMN_ARTIKAL,MySQLiteHelper.COLUMN_PRICE, MySQLiteHelper.COLUMN_AMOUNT}; 

    public BD_DAO(Context context) 
    { 
     dbHelper = new MySQLiteHelper(context); 
    } 

    public void open() throws SQLException 
    { 
     database = dbHelper.getWritableDatabase(); 
    } 

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

    public void createItem(Item item) 
    { 
     ContentValues values = new ContentValues(); 
     values.put(MySQLiteHelper.COLUMN_ARTIKAL, item.getArtikal().toString()); 
     values.put(MySQLiteHelper.COLUMN_PRICE, Double.toString(item.getPrice()).toString()); 
     values.put(MySQLiteHelper.COLUMN_AMOUNT, Integer.toString(item.getAmount()).toString()); 
     database.insert(MySQLiteHelper.TABLE_NAME, null,values); 
    } 

    public List<Item> getAllItems() 
    { 
     List<Item> items = new ArrayList<Item>(); 
     Cursor cursor = database.query(MySQLiteHelper.TABLE_NAME, allColumns, null, null, null, null, null); 
     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) 
     { 
      Item cursorItem = cursorToItem(cursor); 
      items.add(cursorItem); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     return items; 
    } 

    private Item cursorToItem(Cursor cursor) 
    { 
     Item item = new Item(); 
     item.setArtikal(cursor.getString(1)); 
     item.setPrice(cursor.getDouble(2)); 
     item.setAmount(cursor.getInt(3)); 
     return item; 
    } 
} 

И главный класс:

......listview, some buttons...... 
Button DB=(Button)findViewById(R.id.DB); 
DB.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     databasesource.open(); 
     /*for (Item s:tableList) 
     { 
      databasesource.createItem(s);}*/ 
      databasesource.close(); 
      adapter.clear(); 
    } 
}); 

Приложение работает отлично, пока я нажать кнопку, а затем просто перекричать. Сначала я попытался отправить некоторые данные в db, приложение закрылось, затем я попытался создать db, но снова выключился! Должен ли я внести некоторые изменения, это манифест android или какой-нибудь другой .xml?

Спасибо заранее!

Как разместить логарифм?

+2

Не могли бы вы показать свою LogCat? – koesie10

+0

положить свой логарифм .. – Riser

+0

Почему бы вам не поместить «,» после этого «+ COLUMN_ARTIKAL +» текст не имеет значения «» должен быть «+ COLUMN_ARTIKAL +» текст не пустым »,« –

ответ

1

Я сделал несколько незначительных изменений с вашим кодом. Вы можете использовать их для справки.

Измените ниже соответствии с вашими требованиями. У меня был подобный образец, и я изменил его код. Я не уверен, что это лучший способ. Но вы можете использовать ниже и изменить то же самое в соответствии с вашими требованиями.

В вашем MainActivity добавить

Button DB=(Button)findViewById(R.id.DB); 
DB.setOnClickListener(new View.OnClickListener() 
{ 
@Override 
public void onClick(View v) 
{ 
    Double price = Double.parseDouble(et2.getText().toString()); 
    int amount = Integer.parseInt(et3.getText().toString()); 
    MySQLiteHelper db = new MySQLiteHelper (MainActivity.this); 
    db.createItem(new Item(et1.getText().toString(),price,amount)); 
    db.close(); 
} 
}); 

MySQLiteHelper

public class MySQLiteHelper extends SQLiteOpenHelper { 

public static final String TABLE_NAME = "caffe"; 
// private SQLiteDatabase database; 
// private MySQLiteHelper dbHelper; 
private String[] allColumns = {MySQLiteHelper.COLUMN_ARTIKAL,MySQLiteHelper.COLUMN_PRICE, MySQLiteHelper.COLUMN_AMOUNT}; 

public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_ARTIKAL = "artikal"; 
public static final String COLUMN_PRICE = "price"; 
public static final String COLUMN_AMOUNT = "amount"; 
// public static final String COLUMN_TIME = "date&time"; 
Context context; 

private static final String DATABASE_NAME = "caffe.db"; 
private static final int DATABASE_VERSION = 1; 

// changed the below  
private static final String DATABASE_CREATE = "create table " + 
     TABLE_NAME + "(" + COLUMN_ID + 
     " integer primary key autoincrement," + COLUMN_ARTIKAL + 
     " text not null," + COLUMN_PRICE + " real not null," + 
     COLUMN_AMOUNT + " integer not null)"; 

public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    context= context; 
} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    database.execSQL(DATABASE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(MySQLiteHelper.class.getName(), 
     "Upgrading database from version " + oldVersion + " to " 
      + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(db); 
} 


    public void createItem(Item item) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(MySQLiteHelper.COLUMN_ARTIKAL, item.getArticle().toString()); 
     values.put(MySQLiteHelper.COLUMN_PRICE, Double.toString(item.getPrice()).toString()); 
     values.put(MySQLiteHelper.COLUMN_AMOUNT, Integer.toString(item.getAmount()).toString()); 
     //Toast.makeText(context, "Inserted", 1000).show(); 
     db.insert(MySQLiteHelper.TABLE_NAME, null,values); 

    } 

    public List<Item> getAllItems() { 

     List<Item> items = new ArrayList<Item>(); 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.query(MySQLiteHelper.TABLE_NAME, 
      allColumns, null, null, null, null, null); 

     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) { 
      Item cursorItem = cursorToItem(cursor); 
      items.add(cursorItem); 
      cursor.moveToNext(); 
     } 

     cursor.close(); 
     return items; 
    } 

    private Item cursorToItem(Cursor cursor) { 
     Item item = new Item(); 
     item.setArticle(cursor.getString(0)); 
     item.setPrice(cursor.getDouble(1)); 
     item.setAmount(cursor.getInt(2)); 

     return item; 
    } 
} 

товара класс

public class Item { 

String article; 
Double price; 
int amount; 

public Item() 
{ 

} 
public Item(String article,Double price, int amount) 
{ 
    this.article=article; 
    this.price=price; 
    this.amount= amount; 
} 
public String getArticle() { 
    return article; 
} 

public void setArticle(String article) { 
    this.article = article; 
} 

public Double getPrice() { 
    return price; 
} 

public void setPrice(Double price) { 
    this.price = price; 
} 

public int getAmount() { 
    return amount; 
} 

public void setAmount(int amount) { 
    this.amount = amount; 
} 

}

ФОТОГРАФИЯ

enter image description here

Показать на дисплее нажмите кнопку. Тост отображает только название статьи.

 MySQLiteHelper db = new MySQLiteHelper (MainActivity.this); 
List<Item> contacts = db.getAllItems();  
StringBuilder sb = new StringBuilder(); 
for (Item cn : contacts) 
    { 
    sb.append(cn.getArticle()); 
    sb.append("\n");    
} 
Toast.makeText(MainActivity.this,sb, 1000).show(); 

enter image description here

+0

Спасибо! Спасибо! Спасибо!!!! – Mikky

2

попробуйте этот способ.

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

     BD_DAO db = new BD_DAO(getApplicationContext()); 
     //make your CRUD operation and then close database object 
     db.close(); 

    } 
}); 

Повторите этот код с помощью существующего кода.

private static final String DATABASE_CREATE = "create table " + 
      TABLE_NAME + "(" + COLUMN_ID + 
      " integer primary key autoincrement," + COLUMN_ARTIKAL + 
      " text not null ," + COLUMN_PRICE + " real not null ," + 
      COLUMN_AMOUNT + " integer not null)"; 

если у вас возникли проблемы, тогда поставьте комментарий.

+0

Нет, снова выключитесь! – Mikky

+0

положите свой логарифм !! – Harshid

+0

Вы правы! Ошибка logcat, только когда я пытаюсь протестировать эмулятор? – Mikky

1

Вы забыли поставить запятую заменить этот код вашего

private static final String DATABASE_CREATE = "create table " + 
     TABLE_NAME + "(" + COLUMN_ID + 
     " integer primary key autoincrement," + COLUMN_ARTIKAL + 
     " text not null" + COLUMN_PRICE + " real not null" + 
     COLUMN_AMOUNT + " integer not null);"; 

в

private static final String DATABASE_CREATE = "create table " + 
     TABLE_NAME + "(" + COLUMN_ID + 
     " integer primary key autoincrement," + COLUMN_ARTIKAL + 
     " text not null," + COLUMN_PRICE + " real not null," + 
     COLUMN_AMOUNT + " integer not null)"; 
+0

Вы правы! Ошибка logcat, только когда я пытаюсь протестировать эмулятор? – Mikky

+0

Да ............ – Saad

Смежные вопросы