在创建的 sqlite 数据库中更新整行(包含多列)

Updating an entire row (containing multiple columns) within a sqlite database created

我想创建一个更新函数,它会根据行的整数主键 - 如果可能的话。

我有一个查找功能,可以查找数据库的详细信息并将其加载到 editing/updating 的 EditText 字段中。

查找按钮(调用查找处理程序)将内容加载到可以是 altered/edited 的 EditText 字段中,但是当按下按钮更新编辑的条目时,整个数据库会被更改的内容覆盖EditText 条目。

澄清一下,我想更改数据库中包含端口、名称和 IP 地址的一行,更新该条目并将其放回数据库而不覆盖我所有的数据库条目——正如目前正在发生的那样.

我无法在 data/data/{package name}... 文件夹中看到未经编辑的原始数据库,因为我使用的是旧三星 phone(其中由于某些未知原因不包含 database.db - 声明 "run as: Could not set capabilities..." 消息)对于 debugging/running 我正在使用的应用程序和 PC 没有足够的 RAM 来支持虚拟设备。

任何帮助、建议或示例将不胜感激。我是 Android 应用程序开发和 java 的新手,所以如果问题很明显或微不足道,请原谅我。

这就是 Table 的创建方式:

 public static final String TABLE_USER = "User";
 public static final String COL_ID = "_id";
 public static final String COLUMN_ID = "UserIP";
 public static final String COLUMN_NAME = "UserName";
 public static final String COLUMN_PORT = "UserPort";

    public void onCreate(SQLiteDatabase db)
     {
            String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " +
            TABLE_USER + "(" + COL_ID + " INTEGER PRIMARY KEY, " + 
                           COLUMN_PORT + " INTEGER, " + COLUMN_NAME
            + " TEXT, " + COLUMN_ID + " TEXT " + ")";

    try
    {
        db.execSQL(CREATE_USER_TABLE);

    }catch (SQLException e)
    {
      e.printStackTrace();
    }

    }

查找函数如下:

public User findHandler(String username, String IP)
{
    String query = "Select * FROM " + TABLE_USER + " WHERE " +
            COLUMN_NAME + " = '" + username + "'" + " and " + COLUMN_ID + " = 
          '" +  String.valueOf(IP) + "'";

    SQLiteDatabase db = this.getWritableDatabase();

    Cursor cursor = db.rawQuery(query, null);

    User user = new User();

    if (cursor.moveToFirst())
    {
        cursor.moveToFirst();

        user.setUserPort(Integer.parseInt(cursor.getString(1)));

        user.setUserName(cursor.getString(2));

        user.setID(cursor.getString(3));

        cursor.close();

       //Log.d("Message1", msg);

    }

    else
    {
        user = null;
    }

    db.close();

    return user;
}

在MainActivity中find按钮按下(onClick)如下:

 btnfind.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {
            MyDBHandler dbHandler = new MyDBHandler(getApplicationContext());

            User user = dbHandler.findHandler(username.getText().toString(), 
              userid.getText().toString());


            if (user != null)
            {
                lst.setText(user.getID() + " " + user.getUserName()
                        + " " + String.valueOf(user.getUserPort()));

                //found_id =(user.getWhere());

    // Load into the EditText for editing

                userid.setText(user.getID());                            
                username.setText(user.getUserName());                    
                userport.setText(String.valueOf(user.getUserPort()));    
            }

            else
            {
                 lst.setText("No User Found");
            }
        }
    });

update函数如下:

 public boolean updateHandler(int Port, String username, String IP)
{
    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues args = new ContentValues();

    args.put(COLUMN_ID, IP);
    args.put(COLUMN_NAME, username);
    args.put(COLUMN_PORT, Port);


    return db.update(TABLE_USER, args, COL_ID + " = _id " , null) >0;

}

在MainActivity中更新按钮按下(onClick)如下:

       btnupdate.setOnClickListener(new View.OnClickListener()
       {
          public void onClick(View view)
          {
             MyDBHandler dbHandler = new             
              MyDBHandler(getApplicationContext());

            if (userport.length() >= 1 && userid.length() >= 1 && 
                                  username.length() >= 1)
            {
                userid.getText();
                username.getText();
                userport.getText();

            boolean result = 

     dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()), 
                 username.getText().toString(), userid.getText().toString());

                if (result)
                {

     dbHandler.updateHandler(Integer.parseInt(userport.getText().toString()), 
                 username.getText().toString(), userid.getText().toString());

                    lst.setText("Record Updated.");

                }else
                {
                    lst.setText("No Match.");
                }

            }else
            {
                Toast.makeText(MainActivity.this, "Please enter a valid 
                                     user." , Toast.LENGTH_LONG).show();
            }

        }
    });

COL_ID + " = _id "更改为COLUMN_ID + " = ?"并将null参数更改为值为IP的数组。