2016-11-04 27 views
-3

createRecordsメソッドを呼び出すと、データ型が一致せず、行の挿入が(name、_id)でなく(_id、name)でないのはなぜですか?AndroidデータベースSQLiteデータ型の不一致

package com.caldroidsample; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import static android.R.attr.text; 
import static android.R.id.primary; 
import static com.caldroidsample.R.id.email; 



public class MyDatabaseHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "DBName"; 

    private static final int DATABASE_VERSION = 2; 

// Database creation sql statement 
    private static final String DATABASE_CREATE = "create table MyEmployees(_id integer primary key, name varchar(255) not null);"; 

    public MyDatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Method is called during creation of the database 
    @Override 
    public void onCreate(SQLiteDatabase database) { 
     database.execSQL(DATABASE_CREATE); 
    } 

// Method is called during an upgrade of the database, 
@Override 
public void onUpgrade(SQLiteDatabase database,int oldVersion,int newVersion){ 
    Log.w(MyDatabaseHelper.class.getName(), 
      "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
    database.execSQL("DROP TABLE IF EXISTS MyEmployees"); 
    onCreate(database); 
} 
} 

これは、クラスMyDB.java

package com.caldroidsample; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 



public class MyDB{ 

private MyDatabaseHelper dbHelper; 

public SQLiteDatabase database; 

public final static String EMP_TABLE="MyEmployees"; // name of table 

public final static String EMP_ID="_id"; // id value for employee 
public final static String EMP_NAME="name"; // name of employee 
public final static String EMP_EMAIL="email"; // email of employee 
public final static String EMP_ADDRESS="address"; 
public final static String EMP_GENDER="gender"; 
/** 
* 
* @param context 
*/ 
public MyDB(Context context){ 
    dbHelper = new MyDatabaseHelper(context); 
    database = dbHelper.getWritableDatabase(); 
} 


public long createRecords(String id, String name){ 
    ContentValues values = new ContentValues(); 

    values.put(EMP_NAME, name); 
    values.put(EMP_ID, id); 



    return database.insert(EMP_TABLE, EMP_ID, values); 
} 

public Cursor selectRecords() { 
    String[] cols = new String[] {EMP_ID, EMP_NAME}; 
    Cursor mCursor = database.query(true, EMP_TABLE,cols,null 
      , null, null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; // iterate to get each value. 
} 
} 

EDITです:私は(255)varchar型に_idの整数型を変更しますが、私はまだ同じエラーを取得しています。

+0

'_idの整数型を変更しましたが、同じエラーが発生しています.' dbスキーマを変更するときは、アプリケーションをアンインストールして再インストールする必要があります。または、DATABASE_VERSIONを変更します。 –

答えて

0

私はあなたがintegerとして列_idを作成しましたので、あなたがデータ型不一致エラーを取得していて、その列の文字列を挿入しようとしていると信じています。

私は(_id, name)(name, _id)についてのあなたの質問の最後の部分を理解していなかったが、あなたが内部に保持されていないために言及されている場合values.put(EMP_ID, Integer.parseInt(id));を試してみてくださいまたはちょうどcreateRecords方法

にパラメータとして整数を渡しますvalues、これはハッシュマップなのでです。

さらにdatabase.insert(EMP_TABLE, EMP_ID, values);を呼び出すときは、valuesが空でないことがわかっている場合は、nullColumnHackパラメータに何も渡す必要はありません。

関連する問題