我为数据库制作了简单的类,但是当我在真实设备上测试时,应用程序关闭了!
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);
}
class 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?
提前致谢!!
如何放入logcat?
答案 0 :(得分: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)";
如果您发现任何问题,请发表评论。
答案 1 :(得分: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)";
答案 2 :(得分: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;
}
}
快照
在显示按钮上单击显示。吐司只显示文章名称。
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();