无法从SQLite中删除数据

时间:2018-03-31 11:34:25

标签: java android sqlite android-sqlite

我在尝试清除Android工作室中的Arraylist中的条目时遇到问题,无论我尝试应用该应用程序的代码是做什么,或者与下面的代码崩溃一样。我正在把头发拉出来,因为在我看来它应该有效。

我也尝试过(不包含在代码中):

odb.rawquery(" delete from DATABASE_TABLE") //from memory so may not be 100%

这使应用程序崩溃了,它不会重新加载,我假设它已成功删除表而不重新创建它?

它将在KitKat上运行

我错过了什么吗?

这是我需要做的最后一件事,所以任何帮助或建议都会很棒!

TIA

主要

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;


public class MainActivity extends Activity {

private ListView list_lv;
private EditText col2_ed;
private Button sub_btn;
Button del_btn;
private DBclass db;

private ArrayList<String> collist_2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    collist_2 = new ArrayList<String>();
    items();
    getData();
    DeleteData();
}

private void items() {
    sub_btn = (Button) findViewById(R.id.submit_btn);
    del_btn = (Button) findViewById(R.id.delete_btn);
    col2_ed = (EditText) findViewById(R.id.ed2);
    list_lv = (ListView) findViewById(R.id.dblist);


    sub_btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            submitData();
        }
    });

}

public void DeleteData(){
    del_btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            db.deleteData();
        }
    });
}

protected void submitData() {
    String b = col2_ed.getText().toString();

    db = new DBclass(this);
    long num;
        db.open();
        num = db.insertmaster(b);
        db.close();
        getData();
}

public void getData() {

    collist_2.clear();
    db = new DBclass(this);
    try {
        db.open();
        Cursor cur = db.getAllTitles();
        while (cur.moveToNext()) {
            String valueofcol2 = cur.getString(2);
            collist_2.add(valueofcol2);
        }
    }
    finally {
        db.close();
    }
    printList();
    setDataIntoList();
}

private void printList() {
    for (int i = 0; i < collist_2.size(); i++) {
   }
}

private void setDataIntoList() {
    // create the list item mapping
    String[] from = new String[] { "col_2" };
    int[] to = new int[] {  R.id.col2tv };

    // prepare the list of all records
    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
    for (int i = 0; i < collist_2.size(); i++) {
        HashMap<String, String> map = new HashMap<String, String>();

        map.put("col_2", collist_2.get(i));
        fillMaps.add(map);
    }

    // fill in the grid_item layout
    SimpleAdapter adapter = new SimpleAdapter(this, fillMaps,
            R.layout.custom, from, to);
    list_lv.setAdapter(adapter);
}
}

DBclass

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

public class DBclass {

public  String KEY_ROWID = "_id";
public  String KEY_COL2 = "col2";

private  String DATABASE_NAME = "mydb";
private  String DATABASE_TABLE = "mytable";
private  int DATABASE_VERSION = 1;

private Context ourContext;
private DbHelper dbh;
private SQLiteDatabase odb;

private  String USER_MASTER_CREATE =
        "CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE+ "("
                + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_COL2 + " VARCHAR(15) )";

private class DbHelper extends SQLiteOpenHelper {

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(USER_MASTER_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // if DATABASE VERSION changes
        // Drop old tables and call super.onCreate()999
    }
}

public DBclass(Context c) {
    ourContext = c;
    dbh = new DbHelper(ourContext);
}

public DBclass open() throws SQLException {
    odb = dbh.getWritableDatabase();
    return this;
}

public void close() {
    dbh.close();
}

public long insertmaster(String col2) throws SQLException{

    ContentValues IV = new ContentValues();

    IV.put(KEY_COL2, col2);

    return odb.insert(DATABASE_TABLE, null, IV);
    // returns a number >0 if inserting data is successful
}

public void updateRow(long rowID, String col2) {

    ContentValues values = new ContentValues();
    values.put(KEY_COL2, col2);

        odb.update(DATABASE_TABLE, values, KEY_ROWID + "=" + rowID, null);
}


public void deleteData(){
    odb.delete(DATABASE_TABLE, null,null);
}

public Cursor getAllTitles() {
    // using simple SQL query
    return odb.rawQuery("select * from " + DATABASE_TABLE, null);
}

public Cursor getallCols(String id) throws SQLException {
    Cursor mCursor = odb.query(DATABASE_TABLE, new String[] { KEY_COL2 }, null, null, null, null, null);
    Log.e("getallcols zmv", "opening successfull");
    return mCursor;
}

public Cursor getColsById(String id) throws SQLException {
    Cursor mCursor = odb.query(DATABASE_TABLE, new String[] { KEY_COL2 }, KEY_ROWID + " = " + id, null, null, null, null);
    Log.e("getallcols zmv", "opening successfull");
    return mCursor;
}
}

2 个答案:

答案 0 :(得分:0)

我认为你在尝试删除之前没有打开数据库。

public void DeleteData(){
del_btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //Try adding these lines
        try {
             db = new DBclass(this);
             db.open();  
             db.deleteData();
        }catch(Exception e){
             e.print
        }finally{
             db.close();
        }
    }
});
}

答案 1 :(得分:0)

在DBclass中添加此项将删除特定表中的所有数据

    public void deleteAll(){
            SQLiteDatabase db = this.getWritableDatabase();
            String deleteStmt="DELETE FROM "+TABLE_NAME;
            db.execSQL(deleteStmt);
            db.close();
    }

删除单个行或单个项目(其中item是模型类,或者您可以传递keyId / primarykey)

     // Deleting single Item
    public void deleteItem(Item item) {
            SQLiteDatabase db = this.getWritableDatabase();
            db.delete(TABLE_NAME, KEY_ID + " = ?",
                    new String[] { String.valueOf(item.getKeyId()) });
            db.close();
    }

另请参阅以下链接:

https://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/