SQLite数据库之数据添加与删除

--------------------------------------
SQLite数据库--------------------------------------
Android自带SQLite工具类SQLiteOpenHelper
  1. 先自定义一个类继承自SQLiteOpenHelper
  2. 创建一个构造方法
  3. 重写两个创建数据库的方法onCreate()和onUpgrade(),分别是创建和更新数据库。
    
    
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
 
@Override
//数据库生成
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
 
@Override
//数据库升级
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
 
}
}
  •         构造方法第二个参数是数据库的名称。第三个是游标工厂,数据库查询结果的对象,Cursor相当于一个指针,每读取一个游标下移。一般游标设置为null。Version数据库版本。
  •         在onCreate()方法中创建表。 sqLiteDatabase。execSQL(""); SQLite官网SQLite.org其中有SQL操作语句
  • 在MainActivity中的onCreate中创建DBOpenHelper对象,并且传入参数。 
           
           
    DBOpenHelper helper=new DBOpenerHelper(this,"数据库名称.db",null,1);

  • 调用可写的方法。返回对象是SQLite数据库 
     
     
SQLiteDatabase databaseWriter=helper.getWritableDatabase(); 
  • 然后创建一个ContentValues对象,它是Android封装的一条数据 
       
       
    ContentValues cv=new ContentValues();
    cv.put("name","小张");
    cv.put("sex","男");
  • 向可写的数据库中插入数据,调用insert("表名","空列的填充用null",values);方法 //values就是上述的对象
         
         
    databaseWriter.insert("user",null,cv);
    databaseWriter.close();
  • 创建可读的方法。
    • 调用query("表名",”返回哪几列的数据“,”查询的条件“,”查询的条件的参数“,”“,”“,"")方法查询数据。
      • 返回哪几列的数据返回的是一个数组,如查询name列,可写为new String[]{"name"},null默认返回所有列数据。
      • 查询的条件的参数返回的是一个字符串数组。 返回Cursor(游标)类型对象
         
         
Cursor c=dbRead.query("user",new String[]{"name","sex"},"name=?",new String[]{"小张" },null,null);
  • 利用循环移到下一个数据,读值
           
           
    while(c.moveToNext()){
          String name = c.getString(c.getColumnIndex("name"));  //利用列的索引获取用户名
          String sex=c.getString(c.getColumnIndex("sex"));
}
将数据呈现在ListView中
  1. 主类需要继承ListActivity
  2. layout中添加ListView
  • 利用Curson对象创建一个SimpleCursonAdapter对象
    • private  SimpleCursonAdapter  adapter;
    • adapter=newSimpleCursonAdapter(context,layout,Cursor,from,to);
    • 创建两个显示文本,显示用户名和性别
     
     
    adapter=new SimpleCursonAdapter(this,layout,c,new String[]{"name","sex"},new int[]{R.id.tvName,R.id.tvSex});
  • 使用setListAdapter呈现
       
       
    setListAdapter(adapter);
  • 如果使用Android中的SimpleCursonAdapter,必须要求数据库中有一列名为”_id"。
  • 因此要回到工具类SQLiteOpenHelper中的onCreate方法中,在执行创建table语句中添加一列"_id integer primary key autoincrement"
         
         
    sqliteDatabase.execSQL("create table user(_id integer primary key autoincrement,name text default null,sex text default null)");
    在layout中创建两个文本框和一个添加按钮,用于添加用户名和性别数据。
    分别在主类中声明,添加按钮创建监听。
   
   
    //全局中定义
private DBOpenHelper helper;
private SQLiteDatabase databaseWriter,databaseRead;
    private Onclick btnAddListener=new OnClickListener(){
            public void onClick(View v){
ContentValues cv = new ContentValues();
cv.put("name",et_name.getText().toString());
cv.put("sex",et_sex.getText().toString());
databaseWriter.insert("user",null,cv);
refreshListView();
        }        
    };
        btn_add.setOnClickListener(btnAddListener);
将Cursor的数据库查询方法放到一个新的方法refreshListView()中,可以保持 ListView 的刷新状态。
      
  
  
     private void refreshListView(){ //两次调用该方法 类中调用一次。
             Cursor c = databaseRead.query("user",null,null,null,null,null,null);
             adapter.changeCursor(c);
     }
设置弹出对话框,将某一条数据删除
  • 设置列表项的长按监听事件
  
  
   getListView().setOnItemLongCilckListener(new OnItemLongCilckListener(
        public boolean onItemLongClick(AdapterView<?> parent,View view,final int position,long id){
new AlertDialog.Builder(MainActivity.this).setTitle("提醒").setMessage("您确定要删除该项吗").setNegativeButton("取消",null).setPositiveButton("确定",new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
 
Cursor c = adapeter.getCursor();
c.moveToPosition(position);
int itemId=c.getInt(c.getColunmIndex("_id"):
databaseWriter.delete("user","_id=?",new String[]{itemId+""});
refreshListView();
                   }
 
}).show();//创建一个弹出对话框
             return true; //是否执行长按
       }
  ));
------------------完整代码------------------
DBOpenHelper
   
   
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
/**
* Created by 59666 on 2016/10/20.
*/
 
public class DBOpenHelper extends SQLiteOpenHelper {
 
public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
 
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table user(_id integer primary key autoincrement,name text default null,sex text default null)");
}
 
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
 
}
}

主类
   
   
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
 
public class MainActivity extends AppCompatActivity {
private DBOpenHelper dbOpenHelper;
private SimpleCursorAdapter adapter;
private SQLiteDatabase sqliteWrite, sqliteRead;
private EditText et_name, et_sex;
private Button btn_add;
private ListView list;
 
@Override
 
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbOpenHelper = new DBOpenHelper(this, "users", null, 1);
sqliteWrite = dbOpenHelper.getReadableDatabase();
sqliteRead = dbOpenHelper.getReadableDatabase();
list = (ListView) findViewById(R.id.list_item);
et_name = (EditText) findViewById(R.id.et_name);
et_sex = (EditText) findViewById(R.id.et_sex);
btn_add = (Button) findViewById(R.id.btn_add);
refreshListView();
list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long id) {
new AlertDialog.Builder(MainActivity.this).setTitle("提示消息").setMessage("您确定要删除该条数据吗").setNegativeButton("取消", null).setPositiveButton("废话", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Cursor c = adapter.getCursor();
c.moveToPosition(position);
int itemId = c.getInt(c.getColumnIndex("_id"));
sqliteWrite.delete("user", "_id=?", new String[]{itemId + ""});
refreshListView();
}
}).show();
return true;
}
});
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues cv = new ContentValues();
cv.put("name", et_name.getText().toString().trim());
cv.put("sex", et_sex.getText().toString().trim());
sqliteWrite.insert("user", null, cv);
refreshListView();
}
});
}
 
private void refreshListView() {
Cursor c = sqliteRead.query("user", null, null, null, null, null, null);
adapter = new SimpleCursorAdapter(this, R.layout.user_layout, c, new String[]{"name", "sex"}, new int[]{R.id.tv_name, R.id.tv_sex});
list.setAdapter(adapter);
adapter.changeCursor(c);
 
}
}

主XML
   
   
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.user.MainActivity">
 
 
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true">
 
<EditText
android:id="@+id/et_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="用户名" />
 
<EditText
android:id="@+id/et_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentBottom="true"
android:layout_toEndOf="@+id/tv_sex"
android:hint="性别" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:id="@+id/btn_add"
android:text="添加数据"/>
</LinearLayout>
 
<ListView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
 
</ListView>
</RelativeLayout>

次XML
   
   
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="39dp"
android:layout_marginTop="17dp"
android:text="用户名" />
 
<TextView
android:id="@+id/tv_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/tv_name"
android:layout_below="@+id/tv_name"
android:layout_marginTop="13dp"
android:text="性别" />
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值