粘贴逗号将列表分为eDittext,并在多行上存储在sqlite表中



我想知道如何在EditText字段中粘贴逗号分隔列表(test1,test2,test3,test4),然后单击按钮将其存储在我的sqlite数据库表中,一个在自己的行上。这将是理想的选择,以便拥有大列表(50-100)的人可以大规模插入数据。现在,我有一个名字将单个名称插入我的桌子。

databasehelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String TAG = "DatabaseHelper";
    private static final String TABLE_NAME = "hashtag_table";
    private static final String COL1 = "ID";
    private static final String COL2 = "name";
    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " + COL2 +" TEXT)";
        db.execSQL(createTable);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public DatabaseHelper(Context context) {
        super(context, TABLE_NAME, null, 1);
    }
    /**
     * Add data to the table
     * @param item
     * @return
     */
    public boolean addData(String item) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, item);
        Log.d(TAG, "addData: Adding " + item + " to " + TABLE_NAME);
        long result = db.insert(TABLE_NAME, null, contentValues);
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }
    /**
     * Gets the data from the table
     * @return
     */
    public Cursor getData() {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME;
        Cursor data = db.rawQuery(query, null);
        return data;
    }
    /**
     * Gets the ID from the table
     * @param name
     * @return
     */
    public Cursor getItemID(String name) {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT " + COL1 + " FROM " + TABLE_NAME + " WHERE " + COL2 + " = '" + name + "'";
        Cursor data = db.rawQuery(query,null);
        return data;
    }
    /**
     * Updates the name from the table
     * @param newName
     * @param id
     * @param oldName
     */
    public void updateName(String newName, int id, String oldName) {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "UPDATE " + TABLE_NAME + " SET " + COL2 + " = '" + newName + "' WHERE " + COL1 + " = '" + id + "'" + " AND " + COL2 + " = '" + oldName + "'";
        Log.d(TAG, "updateName: query: " + query);
        Log.d(TAG, "updateName: setting name to " + newName);
        db.execSQL(query);
    }
    /**
     * Deletes the name from the table
     * @param id
     * @param name
     */
    public void deleteName(int id, String name) {
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "DELETE FROM " + TABLE_NAME + " WHERE " + COL1 + " = '" + id + "'" + " AND " + COL2 + " = '" + name + "'";
        Log.d(TAG, "deleteName: query: " + query);
        Log.d(TAG, "deleteName: Deleting " + name + " from database.");
        db.execSQL(query);
        db.execSQL("UPDATE SQLITE_SEQUENCE SET seq = 0 WHERE NAME = '"+TABLE_NAME+"'");
    }
}

listView.java(现在的EditText和按钮现在为现在)

//Adds new hashtag to list and prompts if nothing is entered
    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String newEntry = editText.getText().toString();
            if (editText.length() != 0) {
                addData(newEntry);
                editText.setText("");
            } else {
                toastMessage("you must put something in the text field");
            }
        }
    });
    populateListView();
}
/**
 * Adds new data into the Database
 * @param newEntry
 */
public void addData(String newEntry) {
    boolean insertData = mDatabaseHelper.addData(newEntry);
    if (insertData) {
        toastMessage("Successfully inserted");
        recreate();
    } else {
        toastMessage("Whoops, something went wrong");
    }
}

以下是使用字符串的 split 方法将字符串分解为逗号分隔的值和分离值和插入它们: -

/**
 * Add data to the table
 *
 * @param item
 * @return
 */
public boolean addData(String item) {
    String[] splitdata = item.split(","); //<<<<<<<<<< split the input string
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    boolean result = true;
    db.beginTransaction(); //<<<<<<<<<< prepare to do in a single transaction
    // Loop through each string inserting an entry into the database
    for (String s : splitdata) {
        contentValues.clear(); //<<<<<<<<<< clear any existing values to be safe
        contentValues.put(COL2, s);
        if (db.insert(TABLE_NAME, null, contentValues) < 1) {
            result = false;
        }
    }
    if (result) {
        db.setTransactionSuccessful(); //<<<<<<<<<< only set the transaction successful if all inserts worked
    }
    db.endTransaction();
    return result;
}

请注意,如果有任何失败的插入物,并且还会返回false。

  • 上面的代码是原则上的代码,尚未进行测试或运行,因此可能包含一些错误。

最新更新