2014-11-04 8 views
0

Я создал класс под названием SQliteAdapter и вот кодЯ не могу вставить данные в свою базу данных

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  

Так где же главная проблема.?

ответ

2

Первое, попробуйте изменить эту строку:

long id=db.insert(SQliteHelper.NAME, null, contentValues); 

с:

long id=db.insert(SQliteHelper.TABLE_NAME, null, contentValues); 
+0

проблема все еще там !!!! @jucas –

+0

хорошо, а потом ....? –

+0

Вы по-прежнему получаете ту же ошибку, сообщение ?, пожалуйста, разместите ее здесь –

0

Я вижу несколько проблем, хотя основной является тот указывал jucas.

  • Для everyupdate (onUpgrade вызова) вы используете, вы всегда удалить полную базу данных и создать новую базу данных. Это может быть опасно. Я рекомендую вам создать некоторую защиту здесь и отслеживать версию базы данных.

  • Я вижу, что вы называете свой экземпляр SQliteAdapter как SQliteHelper. Я думаю, что это очень опасно. Попробуйте создать простое имя, которое не является другим типом, например mSqadapter. Я не настолько эксперт, чтобы сказать, может ли это быть источником ошибок, но звучит странно для меня.

  • Применяя предложение от jucas (заменив SQliteHelper.NAME на SQliteHelper.TABLE_NAME), вы должны предоставить вам другую ошибку. Не могли бы вы показать новую ошибку в своем отчете? Это может помочь найти ошибку.

Anycase, предлагаю также попробовать второе предложение, которое я включил.

Надеюсь, это поможет.