2016-06-19 2 views
0

私は、MySQLデータベースとのWAMPサーバーを持っている: Databaseアンドロイド更新行の表の

私がログインし、登録システムを持っています。そして私は、ユーザーがいつでも自分のユーザー名を変更できるようにしたい。

上記の画像には、1人のユーザーが表示されます。私の目標は、このユーザーの名前を変更することです。

public class SQLiteHandler extends SQLiteOpenHelper { 

private static final String TAG = SQLiteHandler.class.getSimpleName(); 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "android_api"; 

// Login table name 
private static final String TABLE_USER = "user"; 

// Login Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_EMAIL = "email"; 
private static final String KEY_UID = "uid"; 
private static final String KEY_CREATED_AT = "created_at"; 

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

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_EMAIL + " TEXT UNIQUE," + KEY_UID + " TEXT," 
      + KEY_CREATED_AT + " TEXT" + ")"; 
    db.execSQL(CREATE_LOGIN_TABLE); 

    Log.d(TAG, "Database tables created"); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* Storing user details in database 
* */ 
public void addUser(String name, String email, String uid, String created_at) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, name); // Name 
    values.put(KEY_EMAIL, email); // Email 
    values.put(KEY_UID, uid); // Email 
    values.put(KEY_CREATED_AT, created_at); // Created At 

    // Inserting Row 

    long id = db.insert(TABLE_USER, null, values); 
    db.close(); // Closing database connection 

    Log.d(TAG, "New user inserted into sqlite: " + id); 
} 

/** 
* Getting user data from database 
* */ 
public HashMap<String, String> getUserDetails() { 
    HashMap<String, String> user = new HashMap<String, String>(); 
    String selectQuery = "SELECT * FROM " + TABLE_USER; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // Move to first row 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 
     user.put("name", cursor.getString(1)); 
     user.put("email", cursor.getString(2)); 
     user.put("uid", cursor.getString(3)); 
     user.put("created_at", cursor.getString(4)); 
    } 
    cursor.close(); 
    db.close(); 
    // return user 
    Log.d(TAG, "Fetching user from Sqlite: " + user.toString()); 

    return user; 
} 

/** 
* Re crate database Delete all tables and create them again 
* */ 
public void deleteUsers() { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    // Delete All Rows 
    db.delete(TABLE_USER, null, null); 
    db.close(); 


    Log.d(TAG, "Deleted all user info from sqlite"); 
} 

} 

は、すべてのこれらのクラスのほかに、私は更新のためにこのクラスを追加しました::

public void updateUsername(String uid, String name) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    //Values i want to upgrade 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, name); // Name 

    String whereQuery = "unique_id= " + uid; 

    // Update Row 
    db.update(TABLE_USER, values, whereQuery, null); 
    db.close(); // Closing database connection 

    Log.d(TAG, "Username updated into sqlite: "); 
} 

そしてProfileChangeFragmentで

は、私は私のデータベースクラスを持っています。私はそれを使用する:

public class ProfileChangeFragment extends Fragment { 
Button btn; 
EditText editText; 
private SQLiteHandler db; 


public static final ProfileChangeFragment newInstance() 
{ 
    ProfileChangeFragment mf = new ProfileChangeFragment(); 
    Bundle bd = new Bundle(1); 
    mf.setArguments(bd); 
    return mf; 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View v = inflater.inflate(R.layout.fragment_profilechange, container, false); 

    btn = (Button) v.findViewById(R.id.button); 
    editText = (EditText) v.findViewById(R.id.editText); 
    db = new SQLiteHandler(getActivity().getApplicationContext()); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     // Get text which i want to set in table 
     String name = editText.getText().toString().trim(); 

     // Get uid with getUserDetails method 
     HashMap<String, String> user = db.getUserDetails(); 
     String uid = user.get("uid"); 

     // Now update  
     db.updateUsername(uid,name); 

     } 
    }); 
    return v; 
} 

と私はボタンアプリケーションのクラッシュをクリックしてください。 OnClickメソッドはそのデータベースのすべてを扱うことができないためでしょうか?

+0

mysqlデータベースはどこですか?また、最初のSQL文でLIMIT 0を使用しています。何も返されません。 – Ozgur

+0

私はそれを投稿します待機 –

+0

あなたはlogcatエラーを投稿できますか?そして 'String uid = user.get(" uid ");'の後にこの行を追加します。 'Log.d(" ID "、uid)'印刷される値を確認してください。 –

答えて

0

ですので、結果は返されません。 LIMIT 1

+0

Okey私は今すぐチェックします –

+0

Doenst変更のユーザー名どちらでも –

+0

私はあなたのアルゴリズムを理解していませんが、テーブルに列がない場合、その列を更新することはできません。 – user6123827

関連する問題