我不能插入数据到我的数据库
问题描述:
我创建类的代码我不能插入数据到我的数据库
package com.project.ElectronicBloodBank;
import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SQliteAdapter {
SQliteHelper helper;
public SQliteAdapter(Context context) {
// TODO Auto-generated constructor stub
helper=new SQliteHelper(context);
}
public long inertData(String name, String age, String address, String phone, String bloodtype)
{
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(SQliteHelper.NAME, name);
contentValues.put(SQliteHelper.AGE, age);
contentValues.put(SQliteHelper.ADDRESS, address);
contentValues.put(SQliteHelper.PHONE, phone);
contentValues.put(SQliteHelper.BLOODTYPE, bloodtype);
long id=db.insert(SQliteHelper.NAME, null, contentValues);
return id;
}
static class SQliteHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME="Ebbdb";
private static final String TABLE_NAME="Donor";
private static final int DATABASE_VERSION=1;
private static final String UID="_id";
private static final String NAME="Name";
private static final String AGE="Age";
private static final String ADDRESS="Address";
private static final String PHONE="Phone";
private static final String BLOODTYPE="Bloodtype";
private static final String CREAT_TABLE="CREATE TABLE"+TABLE_NAME+"("+UID+" integer PRIMARY KEY autoincrement, "+NAME+" VARCHAR(200), "+AGE+" TEXT, "+ADDRESS+" TEXT, "+PHONE+" TEXT, "+BLOODTYPE+" TEXT);";
private static final String DROP_TABLE="DROP TABLE IF EXISTS"+TABLE_NAME;
private Context context;
public SQliteHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.context=context;
Message.message(context, "constructor called");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREAT_TABLE);
Message.message(context, "onCreate called");
} catch (SQLException e) {
// TODO Auto-generated catch block
Message.message(context, ""+e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
try {
Message.message(context, "onUpgrade called");
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e) {
// TODO Auto-generated catch block
Message.message(context, ""+e);
}
}
}
}
,我也创建了一个插入此代码,以我的ActivityTwo
package com.project.ElectronicBloodBank;
import android.support.v7.app.ActionBarActivity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class ActivityTwo extends ActionBarActivity {
EditText etname, etage, etaddress, etphone, etbloodtype;
SQliteAdapter SQliteHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
etname=(EditText) findViewById(R.id.etname);
etage=(EditText) findViewById(R.id.etage);
etaddress=(EditText) findViewById(R.id.etaddress);
etphone=(EditText) findViewById(R.id.etphone);
etbloodtype=(EditText) findViewById(R.id.etbloodtype);
SQliteHelper=new SQliteAdapter(this);
}
public void btnsave(View view)
{
String nam=etname.getText().toString();
String age=etage.getText().toString();
String addrs=etaddress.getText().toString();
String phn=etphone.getText().toString();
String btyp=etbloodtype.getText().toString();
long id=SQliteHelper.inertData(nam, age, addrs, phn, btyp);
if(id<0)
{
Message.message(this, "Unsuccessful");
}
else
{
Message.message(this, "Successfuly Inserted Donor");
}
}
}
的问题是: 数据库已创建,但没有表! 我填补它在logcat的
11-05 01:00:55.927: I/SqliteDatabaseCpp(650): sqlite returned: error
code = 1, msg = no such table: Name,
db=/data/data/com.project.ElectronicBloodBank/databases/Ebbdb
,并显示该信息娄
11-05 01:00:55.947: E/SQLiteDatabase(650): Error inserting Name=omar
Bloodtype=+AB Phone=733310906 Age=23 Address=Sana'a
那么,是主要的问题。?
答
第一件事,尝试改变这一行:
long id=db.insert(SQliteHelper.NAME, null, contentValues);
有:
long id=db.insert(SQliteHelper.TABLE_NAME, null, contentValues);
答
我看到一些问题,但最主要的是通过jucas一指出。
对于您正在使用的每个更新(onUpgrade调用),您总是删除完整的数据库并创建一个新的数据库。这可能是危险的。我建议你在这里创建一些保护并对数据库版本进行一些跟踪。
我可以看到,您将SQliteAdapter的实例称为SQliteHelper。我认为这是非常危险的。尝试创建一个不是其他类型的简单名称,例如mSqadapter。如果这可能是错误的根源,我并不是很专业,但我听起来很奇怪。
应用jucas的建议(将SQliteHelper.NAME替换为SQliteHelper.TABLE_NAME)应该会为您提供另一个错误。您能否在报告中显示新错误?这可能有助于寻找错误。
任何情况下,我建议也尝试我包括的第二个建议。
希望它有帮助。
问题仍然存在!!!! @jucas – 2014-11-04 22:57:40
好吧,然后....? – 2014-11-04 23:03:15
你仍然收到同样的错误消息吗?请在这里发帖 – 2014-11-05 14:36:10