SQLite、Cursor简单使用

本文完成数据库创建,查询,增加,删除操作。理论就不这么说了,就是那几步,先看效果:
这里写图片描述

添加权限
SD读写权限:android.permission.WRITE_EXTERNAL_STORAGE
继承SQLiteOpenHelper

/**
 * @project DBDemo
 * @ClassName DBOpenHelper.java
 * @Description 这里表名是写死的,实际使用中不要这样
 * @author xugang
 * @date 2015-12-21 下午1:18:12
 */
public class DBOpenHelper extends SQLiteOpenHelper {

    private final static String dbName = "mydb.db";
    public final static String tableName = "student";
    // 数据库版本
    private static final int VERSION = 1;
    //建学生表,主键自增长
    String sql = "Create Table " + tableName + "(userId INTEGER Primary Key AUTOINCREMENT,userName varchar(32),age int(32),time varchar(32))";

    public DBOpenHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public DBOpenHelper(Context context, String name, int version) {
        this(context, name, null, version);
    }

    public DBOpenHelper(Context context) {
        this(context, dbName, VERSION);
    }

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

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    //数据库更新,简单点可以直接删除表
    //但是推荐将旧表数据导入到新表后再删除
    }
}

获取SQLiteDatabase,进行增删改查操作

package com.example.dbdemo;

import java.util.Random;

import com.example.dbdemo.db.core.DBOpenHelper;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener {

    private DBOpenHelper dbOpenHelper;
    //操作数据库
    private SQLiteDatabase db;
    private Button btnAdd;
    private Button btnSelect;
    private Button btnDel;
    private ListView lv;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnDel = (Button) findViewById(R.id.btnDel);
        btnSelect = (Button) findViewById(R.id.btnSelect);
        lv = (ListView) findViewById(R.id.lv);

        btnDel.setEnabled(false);

        btnAdd.setOnClickListener(this);
        btnSelect.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        lv.setOnItemClickListener(this);

        dbOpenHelper = new DBOpenHelper(this);
        db = dbOpenHelper.getWritableDatabase();
    }

    private int[] ages = { 12, 18, 21, 43, 12, 43, 65, 67 };
    private String[] names = { "Jack", "Tom", "Linar", "Bann", "Ajax", "Rain", "Sun" };
    private Student student;
    private Cursor cursor = null;

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnAdd:
        //增加一条数据到表中
            ContentValues contentValues = new ContentValues();
            contentValues.put("userName", names[new Random().nextInt(7)]);
            contentValues.put("age", ages[new Random().nextInt(8)]);
            contentValues.put("time", String.valueOf(System.currentTimeMillis()));
            db.insertOrThrow(DBOpenHelper.tableName, null, contentValues);
            break;
        case R.id.btnSelect:
        //查询表,展现在Adapter中
            cursor = db.rawQuery("select * from student", null);
            myAdapter = new MyAdapter(this, cursor);
            lv.setAdapter(myAdapter);

            break;

        case R.id.btnDel:
        //删除一条数据
            if (student != null) {
                db.delete(DBOpenHelper.tableName, " time = ?", new String[] { student.getTime() });
                btnDel.setEnabled(false);
            }
            break;

        default:
            break;
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        btnDel.setEnabled(true);
        student = (Student) parent.getItemAtPosition(position);
    }
}

Adapter

package com.example.dbdemo;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * @project DBDemo
 * @ClassName MyAdapter.java
 * @Description 填充ListView Adapter
 * @author xugang
 * @date 2015-12-21 下午4:14:00
 */
public class MyAdapter extends BaseAdapter {

    private Cursor cursor;
    private LayoutInflater inflater;

    public MyAdapter(Context context, Cursor cursor) {
        inflater = LayoutInflater.from(context);
        this.cursor = cursor;
    }

    @Override
    public int getCount() {
        return cursor.getCount();
    }

    @Override
    public Object getItem(int position) {
        if (cursor.moveToPosition(position)) {
            Student student = new Student(cursor.getString(cursor.getColumnIndexOrThrow("userName")), cursor.getInt(cursor.getColumnIndexOrThrow("age")), cursor.getString(cursor.getColumnIndexOrThrow("time")));
            return student;
        }
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.item, parent, false);
            holder.tvTime = (TextView) view.findViewById(R.id.tvTime);
            holder.tvUserAge = (TextView) view.findViewById(R.id.tvUserAge);
            holder.tvUserName = (TextView) view.findViewById(R.id.tvUserName);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        Student student = (Student) getItem(position);
        if (student != null) {
            holder.tvUserName.setText("用户名:" + student.getUserName());
            holder.tvUserAge.setText("年龄:" + student.getAge());
            holder.tvTime.setText("添加时间:" + student.getTime());
        }
        return view;
    }

    private class ViewHolder {
        TextView tvUserName;
        TextView tvUserAge;
        TextView tvTime;
    }

}

实体类Student

package com.example.dbdemo;

/**
 * @project DBDemo
 * @ClassName Student.java
 * @Description 实体类
 * @author xugang
 * @date 2015-12-21 下午2:55:06
 */
public class Student {

    private String userName;
    private int age;
    private String time;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    @Override
    public String toString() {
        return "Student [userName=" + userName + ", age=" + age + ", time=" + time + "]";
    }

    public Student() {
        super();
    }

    public Student(String userName, int age, String time) {
        super();
        this.userName = userName;
        this.age = age;
        this.time = time;
    }

}

这里的增加和删除数据都要再次查询才可以刷新,在Android 3.0引入了Loaders机制,就不用这么麻烦了,这个下次在研究吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQLite 是一种轻量级的关系型数据库,常用于在移动应用程序中存储和管理结构化数据。在 Android 开发中,SQLite 是默认提供的一种数据库。 以下是在 Android 中使用 SQLite 数据库的一般步骤: 1. 定义数据库模式:定义您的数据库表结构和表之间的关系。您可以使用 SQLiteOpenHelper 类来管理数据库模式。 2. 创建数据库:使用 SQLiteOpenHelper 类中的 onCreate() 方法创建数据库。 3. 升级数据库:使用 SQLiteOpenHelper 类中的 onUpgrade() 方法升级数据库。 4. 执行数据库操作:使用 SQLiteDatabase 类中的方法执行 SQL 查询和更新。 以下是一个简单的示例,演示如何创建 SQLite 数据库和表,以及如何插入和查询数据: 1. 定义数据库模式 ```java public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "mydatabase.db"; private static final int DB_VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // Create tables db.execSQL("CREATE TABLE contacts (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Upgrade logic } } ``` 2. 创建数据库 ```java MyDatabaseHelper helper = new MyDatabaseHelper(context); SQLiteDatabase db = helper.getWritableDatabase(); ``` 3. 插入数据 ```java ContentValues values = new ContentValues(); values.put("name", "John"); values.put("phone", "1234567890"); long rowId = db.insert("contacts", null, values); ``` 4. 查询数据 ```java Cursor cursor = db.query("contacts", null, null, null, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); Log.d(TAG, "Name: " + name + ", Phone: " + phone); } cursor.close(); ``` 以上是一个简单的示例,演示了如何创建和使用 SQLite 数据库。在实际开发中,您可能需要根据具体的需求进行更复杂的操作,例如使用 JOIN 查询多个表之间的数据关系等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值