2014-02-06 28 views
1

我將通過以下方式的一些數據到我的SQLite數據庫:無法插入記錄的SQLite在android系統

    Contact contactData = new Contact(); 
        contactData.setContact_id("1111");//String.valueOf(id) 
       //contactData.setNickName(name); 
       // contactData.setPrimaryContact(primary); 

        HashMap<String, Contact> map = new HashMap<String, Contact>(); 
        map.put("data", contactData); 

        long newId = datasource.createContact(map);      
        Log.e("insert Contact id :", String.valueOf(newId)); 

public long createContact(HashMap<String, Contact> queryValues) { 
ContentValues values = new ContentValues(); 

Contact val = (Contact) queryValues.get("data"); 

values.put( MySQLiteHelper.COLUMN_CONTACT_ID, val.getContact_id()); 
values.put( MySQLiteHelper.COLUMN_FIRST_NAME, val.getFirstName()); 
values.put( MySQLiteHelper.COLUMN_LAST_NAME, val.getLastName()); 
values.put( MySQLiteHelper.COLUMN_NICK_NAME, val.getNickName()); 
values.put( MySQLiteHelper.COLUMN_BIRTHDATE, val.getBirthDate()); 
values.put( MySQLiteHelper.COLUMN_PRIMARY_CONTACT, val.getPrimaryContact()); 
values.put( MySQLiteHelper.COLUMN_SECONDARY_CONTACT, val.getSecondaryContact()); 
values.put( MySQLiteHelper.COLUMN_EMAIL_ID, val.getEmailId()); 
values.put( MySQLiteHelper.COLUMN_STREET, val.getStreet()); 
values.put( MySQLiteHelper.COLUMN_CITY, val.getCity()); 
values.put( MySQLiteHelper.COLUMN_ZIP_CODE, val.getZipCode()); 
values.put( MySQLiteHelper.COLUMN_COMPANY, val.getCompany()); 
values.put( MySQLiteHelper.COLUMN_DESIGNATION, val.getDesignation()); 
values.put( MySQLiteHelper.COLUMN_IS_FAVORITE, val.getIsFavorite()); 
values.put( MySQLiteHelper.COLUMN_IS_BLOCKED, val.getIsBloacked());  
values.put( MySQLiteHelper.COLUMN_IS_CREATED, new Date().toString());  
values.put( MySQLiteHelper.COLUMN_IS_BLOCKED, AESCryptography.getMd5(val.getFirstName()+" "+val.getLastName()+":"+val.getPrimaryContact()+":"+val.getEmailId())); 

long insertId = database.insert(MySQLiteHelper.CONTACT_TABLE_NAME, null, values); 
return insertId; 
} 

,但我得到以下錯誤:

02-06 17:13:18.539: E/SQLiteDatabase(8112): Error inserting lastName= contact_id=1111 primaryContact= street= designation= compnay= city= isCreated=Thu Feb 06 17:13:18 IST 2014 emailId= scondaryContact= nickName= isFavorite=0 zipCode= birthDate= firstName= isBloacked=�d�t�fVv�� �� 
02-06 17:13:18.539: E/SQLiteDatabase(8112): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at com.ecosmob.contactpro.model.ContactDataSource.createContact(ContactDataSource.java:72) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at com.ecosmob.contactpro.service.ContactManagerService.onHandleIntent(ContactManagerService.java:88) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.os.Looper.loop(Looper.java:137) 
02-06 17:13:18.539: E/SQLiteDatabase(8112):  at android.os.HandlerThread.run(HandlerThread.java:60) 
02-06 17:13:18.539: E/insert Contact id :(8112): -1 

我在做什麼錯?

我的表模式:

private static final String CONTACT_TABLE = "create table " 
    + CONTACT_TABLE_NAME + "(" 
    + COLUMN_ID     + " integer primary key autoincrement, " 
    + COLUMN_CONTACT_ID   + " text not null, " 
    + COLUMN_FIRST_NAME   + " text not null," 
    + COLUMN_LAST_NAME   + " text not null," 
    + COLUMN_NICK_NAME   + " text not null," 
    + COLUMN_BIRTHDATE   + " text not null," 
    + COLUMN_PRIMARY_CONTACT  + " text not null," 
    + COLUMN_SECONDARY_CONTACT + " text not null," 
    + COLUMN_EMAIL_ID    + " text not null," 
    + COLUMN_STREET    + " text not null," 
    + COLUMN_CITY     + " text not null," 
    + COLUMN_ZIP_CODE    + " text not null," 
    + COLUMN_COMPANY    + " text not null," 
    + COLUMN_DESIGNATION   + " text not null," 
    + COLUMN_IS_FAVORITE   + " integer not null," 
    + COLUMN_IS_BLOCKED   + " integer not null," 
    + COLUMN_IS_CREATED   + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP," 
    + COLUMN_CHECK_MD5   + " text not null" 
    + ");"; 
+0

檢查更新。 – astuter

回答

2

你已經把一大堆not null聲明。這意味着你需要在那裏放置一些東西,否則數據庫會拒絕一個新的條目。我注意到你的插入語句中沒有COLUMN_CHECK_MD5,並且這在你的模式中是必需的。看看是否有其他人,並把東西放在那裏。

+0

在這個構造函數'contact contactData = new Contact();',我將空字符串分配給所有字段。所以我可能不需要這個。 – astuter

+0

構造函數與sql無關。創建表本質上是表構造函數。 – PearsonArtPhoto

+0

我想說的是,我沒有在'ContentValues'中插入'null'。這些值是空字符串,應該允許。 – astuter

2

你列具有NOT NULL約束和18列,你想插入值只有15列如下所示:

Error inserting lastName= contact_id=1111 primaryContact= street= designation= compnay= city= emailId= scondaryContact= nickName=Bal Inquiry isFavorite=0 zipCode= birthDate= firstName= isBloacked=0 

一個值從列添加到每一列或刪除NOT NULL限制事實上可能是空的。

+0

'_id'字段是自動增量,所以我沒有包括它。儘管我已經試過在其中包括所有其他領域。我仍然得到同樣的錯誤。 – astuter

+0

我統計了18列,其中16個是'NOT NULL'(隱含地是id列)。插入內容值有15個值。 'COLUMN_CHECK_MD5'似乎缺失。 – laalto

+0

我的意思是我已經嘗試過這樣做後你的文章。儘管我也一樣。讓我在我的問題中更新這個。 – astuter