0

11 個のデータベース テーブルにデータを入力し、データをフェッチして LogCat に表示するアプリケーションがあります。主キーを Autoincrement に変更するまで、私のアプリケーションは機能していました。変更はすべてのテーブルで正常に機能しましたが、1 つのテーブルで問題が発生しました。

ここに私の DBAdapter と、ユーザー データベースを生成する部分 (問題を引き起こしている部分) があります。

//Variables for the User table
public static final String TABLE_USER = "User";
public static final String USER_ID = "_id";
public static final String USERNAME = "username";
public static final String PASSWORD = "password";
public static final String L_NAME = "L_Name";
public static final String M_NAME = "M_Name";
public static final String F_NAME = "F_Name";
public static final String OFFICE = "Office";
public static final String CELLPHONENUMBER = "Cellphone_Number";
public static final String LANDLINE = "Landline";
public static final String ADDRESS = "Address";
public static final String EMAIL = "Email";

private static final String DATABASE_CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER 
        + "(" + USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 
        + USERNAME + " TEXT not null, "
        + PASSWORD + " TEXT not null, "
        + L_NAME + " TEXT not null, "
        + M_NAME + " TEXT not null, "
        + F_NAME + " TEXT not null, "
        + OFFICE + " TEXT not null, "
        + CELLPHONENUMBER + " TEXT not null, "
        + LANDLINE + " TEXT not null, "
        + ADDRESS + " TEXT not null, "
        + EMAIL + " TEXT not null);" ;

もちろん、数行下の DBAdapter のonCreateメソッドには、次のようなものがあります。

        database.execSQL(DATABASE_CREATE_AUTHORIZED_PERSONNEL_TABLE);

以下に示すように、userClassもあります。

public class UserClass {

private String _id;
private String username;
private String password;
private String l_name;
private String m_name;
private String f_name;
private String office;
private String Cellphone_Number;
private String Landline;
private String Address;
private String Email;


//constructor - empty
public UserClass(){

}

//constructor
public UserClass(String userName, String passWord, String LastName, String MiddleName, String FirstName, 
                    String Office, String cpNumber, String landLine, String Address, String Email){
    this.username = userName;
    this.password = passWord;
    this.l_name = LastName;
    this.m_name = MiddleName;
    this.f_name = FirstName;
    this.office = Office;
    this.Cellphone_Number = cpNumber;
    this.Landline = landLine;
    this.Address = Address;
    this.Email = Email;

}

これらのコンストラクターの後にセッターとゲッターがあります。

データベースクエリとデータフェッチを処理する UserDBAdapter クラスもあります。これがデータアクセスオブジェクトです。これはaddUser(UserClass user)方法です:

//add one user
public long addUser(UserClass user){

    ContentValues values = new ContentValues();

    values.put(USERNAME, user.getUsername());
    values.put(PASSWORD, user.getPassword());
    values.put(L_NAME, user.getL_name());
    values.put(M_NAME, user.getM_name());
    values.put(F_NAME, user.getF_name());
    values.put(OFFICE, user.getOffice());
    values.put(CELLPHONENUMBER, user.getCellphone_Number());
    values.put(LANDLINE, user.getLandline());
    values.put(ADDRESS, user.getAddress());
    values.put(EMAIL, user.getEmail());

    return this.mDB.insert(TABLE_USER, null, values);
}

これは、すべてのユーザーとその詳細を取得するメソッドです。 //すべてのユーザーを取得 public List getAllUsers() { List contactList = new ArrayList(); // すべてのクエリ文字列を選択 selectQuery = "SELECT * FROM " + TABLE_USER;

    Cursor cursor = mDB.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            UserClass user = new UserClass();

            user.set_id(cursor.getString(cursor.getColumnIndex(USER_ID) ) );
            user.setUsername(cursor.getString(cursor.getColumnIndex(USERNAME) ) );
            user.setPassword(cursor.getString(cursor.getColumnIndex(PASSWORD) ) );
            user.setL_name(cursor.getString(cursor.getColumnIndex(L_NAME) ) );
            user.setM_name(cursor.getString(cursor.getColumnIndex(M_NAME) ) );
            user.setF_name(cursor.getString(cursor.getColumnIndex(F_NAME) ) );
            user.setOffice(cursor.getString(cursor.getColumnIndex(OFFICE) ) );
            user.setCellphone_Number(cursor.getString(cursor.getColumnIndex(CELLPHONENUMBER) ) );
            user.setLandline(cursor.getString(cursor.getColumnIndex(LANDLINE) ) );
            user.setAddress(cursor.getString(cursor.getColumnIndex(ADDRESS) ) );
            user.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL) ) );


            // Adding contact to list
            contactList.add(user);
        } while (cursor.moveToNext());
    }

    // return contact list
    return contactList;
}

私の活動では、データベースにデータを入力し、データを取得しています。

public void initializeUserDB(){
    Log.d("Users", "Inserting . . .");

    userDB.open();
    userDB.addUser(new UserClass("user1", "1234", "Doe", "Smith", "John", "Makati", 
                                    "09123456789", "1234567", "Lorem Ipsum Dolor", "LoremIpsum@Dolor.com"));
    userDB.addUser(new UserClass("user2", "1234", "Smith", "Doe", "John", "Makati", 
                                    "cpNumber", "Landline", "address", "electronic Mail Address"));


    //Check if they were inputted properly
    Log.d("Reading: ", "Reading all users . . ."); 
    List<UserClass> users = userDB.getAllUsers();       

    for (UserClass user : users) {
        String log = "Id: " + user.get_id() + "\n" +
                        "Username: " + user.getUsername() + "\n" +
                        "Password: " + user.getPassword() + "\n" +
                        "Last Name: " + user.getL_name() + "\n" +
                        "Middle Name: " + user.getM_name() + "\n" +
                        "First Name: " + user.getF_name() + "\n" +
                        "Office: " + user.getOffice() + "\n" +
                        "Cellphone Number: " + user.getCellphone_Number() + "\n" +
                        "Landline: " + user.getLandline() + "\n" +
                        "Address: " + user.getAddress() +"\n" +
                        "Email: " + user.getEmail();
            // Writing Contacts to log
        Log.d("Details: ", log);
    }
    userDB.close();
}

user.setEmail(cursor.getString(cursor.getColumnIndex(EMAIL) ) );データは正しく挿入されていますが、データの取得に関しては、LogCatから、userDBAdapter クラスの行に問題があることがわかります。

メール列を適切に初期化できたと思います。そうしないと、データ挿入シーケンスでエラーが発生します。その行をコメントアウトするとuser.getEmail();、アクティビティのメソッドで null が返されます。

この問題について混乱しています。テーブルを正しく初期化し、値を適切に挿入しましたが、値を適切に取得できない理由がわかりません。

4

1 に答える 1