При вставке записей в SQLite возвращается -1 - PullRequest
0 голосов
/ 20 августа 2010

Это мой класс SimpleDBAdapter, который инкапсулирует все сложности доступа к базе данных, а внутренний класс SimpleDBHelper заботится о операциях CRUD. Теперь проблема, с которой я сталкиваюсь, заключается в том, что при развертывании кода таблицы создаются, но я не могу вставить значения tht в таблицу, идентификатор возвращает -1, что показывает, что при вставке значений произошла ошибка.

id = db.insert(TABLE_SIMPLETABLE_CLIENT1,null,contentvalues);

SimpleDBAdapter.java

import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.view.ViewGroup.MarginLayoutParams;</p>

<p>public class SimpleDBAdapter {
    // Define all the constants that are to used in the Program
    private static final String DATABASE_NAME = "SimpleDB.db";
    private static final String TABLE_SIMPLETABLE_CLIENT1 = "SimpleTable1";
    private static final int DATABASE_VERSION = 1;</p>

<pre><code>private static final String KEY_EMPLOYEE_ID = "Employee_id";
private static final String KEY_EMPLOYEE_NAME = "Name";
private static final String KEY_EMPLOYEE_DESIGNATION = "Designation";
private static final String KEY_EMPLOYEE_MARITUALSTATUS = "Maritual Status";
private static final String KEY_EMPLOYEE_DOJ = "Date of Joining";

private static final String TAG = "SimpleDBAdapter";

String CREATE_TABLE_SIMPLETABLE = "CREATE TABLE IF NOT EXISTS "
    + TABLE_SIMPLETABLE_CLIENT1
    + " (Employee_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
    + "  Employee_Name VARCHAR(20)," + "  JoinedDateTime DATETIME,"
    + "  Designation VARCHAR(20),"
    + "  Maritual_Status BOOLEAN DEFAULT 'FALSE');";

private final Context ctx;
private SQLiteDatabase db;
private SimpleDBHelper simpledbhelper;

public SimpleDBAdapter(Context context) {
Log.i(TAG,"SimpleDBAdapter Constructor");
 ctx = context;
 simpledbhelper = new SimpleDBHelper(ctx);
}

  class SimpleDBHelper extends SQLiteOpenHelper {
    private static final String TAG = "SimpleDBHelper";
    public SimpleDBHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.i(TAG,"Calling.. super(context, DATABASE_NAME, null, DATABASE_VERSION)");
    }   

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i(TAG,"Creating Table named CREATE_TABLE_SIMPLETABLE");
        db.execSQL(CREATE_TABLE_SIMPLETABLE);
           }



    @Override
    public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
        Log.w(TAG, "Upgarding from" + oldversion + "to" + newversion
                + "could remove all the old data");
        db.execSQL("DROP TABLE IF EXISTS TABLE_SIMPLETABLE_CLIENT1");
        onCreate(db);
    }
}

//Opens the DB
public void open() throws SQLException {
    Log.i(TAG,"Open() Called...");
    db = simpledbhelper.getWritableDatabase();
    simpledbhelper.onCreate(db);

}

//closes the DB
public void close() {
    Log.i(TAG,"Close() Called...");
    simpledbhelper.close();
}

//inserting the values in to Table
public long insertEntry(String Name,String Designation,Boolean MaritualStatus,String date){
    Log.i(TAG,"Insert Entry ()");
    long id = 0;
    try{
    ContentValues contentvalues = new ContentValues();
    contentvalues.put(KEY_EMPLOYEE_NAME, Name);
    contentvalues.put(KEY_EMPLOYEE_DOJ,date);
    contentvalues.put(KEY_EMPLOYEE_DESIGNATION, Designation);
    contentvalues.put(KEY_EMPLOYEE_MARITUALSTATUS, MaritualStatus);
    id = db.insert(TABLE_SIMPLETABLE_CLIENT1,null,contentvalues);
    }
    catch(Exception err){
        Log.i(TAG,"Error Encountered...");
        Log.e(TAG,String.valueOf(err).toString());
    }
    return id;
}
</code>

}

В файле MainClass (DBHandler.java) я создаю экземпляр кода и вызываю метод вставки этого класса следующим образом:

DBHandler.java

импорт android.app.Activity; импорт android.os.Bundle; импорт android.util.Log; открытый класс SimpleDBApplication расширяет Activity { приватная статическая конечная строка TAG = "SimpleDBApplication"; / ** Вызывается при первом создании действия. * / @Override public void onCreate (BundlevedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.main); SimpleDBAdapter DBAdapter = новый SimpleDBAdapter (это); Log.i (TAG, «Называется SimpleDBAdapter»); // вызов для открытия БД DBAdapter.open (); длинный идентификатор; // добавить запись id = DBAdapter.insertEntry ("Vinayaka", "CEO", false, "17-7-2010"); Log.w (TAG, "Tuple Inserted"); Log.w (TAG, «Значение идентификатора:» + String.valueOf (id) .toString ()); // вызов для закрытия БД DBAdapter.close (); } }

Заранее спасибо ...

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Вы можете получить конкретную причину, если вместо insert() вы используете insertOrThrow() и поймаете исключение, то сообщение об ошибке должно помочь вам быстро выяснить причину.

1 голос
/ 20 августа 2010

Как я могу видеть, ваши ключи ContentValues ​​не совпадают с именами столбцов, которые, как я помню, должны быть.

Итак, ваши константы должны были стать;

private static final String KEY_EMPLOYEE_ID = "Employee_ID";
private static final String KEY_EMPLOYEE_NAME = "Employee_Name";
private static final String KEY_EMPLOYEE_DESIGNATION = "Designation";
private static final String KEY_EMPLOYEE_MARITUALSTATUS = "Maritual_Status";
private static final String KEY_EMPLOYEE_DOJ = "JoinedDateTime";

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...