黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查

1、我们首先来看下整个项目

项目也是采用mvc的框架

package dB;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class DbOpenHelper extends SQLiteOpenHelper
{

    public DbOpenHelper(Context context) {

        super(context, "wy.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
     db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

操作表的接口类:

package service;

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

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

import dB.DbOpenHelper;
import domain.Person;

public class PersonService {
private DbOpenHelper dbOpenHelper;

    public PersonService(Context context) {
        this.dbOpenHelper = new DbOpenHelper(context);
    }
    public void save(Person person){
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        db.execSQL("insert into person(name, phone) values(?,?)",
                new Object[]{person.getName(), person.getPhone()});
    }
    /**
     * 删除记录
     * @param name 记录ID
     */
    public void delete(String name,String phone){
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        db.execSQL("delete from person where name=? and phone=?", new Object[]{name,phone});
    }
    /**
     * 更新记录
     * @param person
     */
    public void update(Person person,String name,String phone){
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        db.execSQL("update person set name=?,phone=? where name=? and phone=?",
                new Object[]{person.getName(), person.getPhone(),name,phone});
    }
    /**
     * 查询记录
     * @param name 记录ID
     * @return
     */
    public Person find(String name,String phone){
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person where name=? and phone = ?", new String[]{name,phone});
        if(cursor.moveToNext()){
            int personid = cursor.getInt(cursor.getColumnIndex("personid"));
            String name1 = cursor.getString(cursor.getColumnIndex("name"));
            String phone1 = cursor.getString(cursor.getColumnIndex("phone"));
            return new Person( name1, phone1);
        }
        cursor.close();
        return null;
    }
    /**
     * 分页获取记录
     * @param offset 跳过前面多少条记录
     * @param maxResult 每页获取多少条记录
     * @return
     */
    public List<Person> getScrollData(int offset, int maxResult){
        List<Person> persons = new ArrayList<Person>();
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?",
                new String[]{String.valueOf(offset), String.valueOf(maxResult)});
        while(cursor.moveToNext()){
            int personid = cursor.getInt(cursor.getColumnIndex("personid"));

            /*这里也可以写成
            *   String name = cursor.getString(1);
            String phone = cursor.getString(2);
             默认的表自带的id字段为0 ,name为第一个字段所有为1 ,phone为第二个字段为2*/
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            persons.add(new Person( name, phone));
        }
        cursor.close();
        return persons;
    }

    /**
     * 获取记录总数
     * @return
     */
    public long getCount(){
        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select count(*) from person", null);
        cursor.moveToFirst();
        long result = cursor.getLong(0);//统计之后只有一个默认的字段,所以为0
        cursor.close();
        return result;
    }
}

Person类对象是:

/**
 * 文件名:Person.java
 * 版权:版权所有 (C) 中国电科30所三部
 * 描述:
 * 修改人: wei.yuan
 * 修改时间:2015/1/9
 * 修改内容:新增
 */
package domain;

/**
 * 项目名称:SQLLite1
 * 类描述:
 * 创建人:wei.yuan
 * 创建时间:2015/1/9 11:07
 * 修改人:wei.yuan
 * 修改时间:2015/1/9 11:07
 * 修改备注:
 * 版权:版权所有 (C) 中国电科30所三部
 */
public class Person
{

    private String name;
    private String phone;

    @Override
    public String toString() {
        return "Person{" +
                "name=‘" + name + ‘\‘‘ +
                ", phone=‘" + phone + ‘\‘‘ +
                ‘}‘;
    }

    public Person(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

我们可以编写一个测试工具类来对上面的功能进行测试:

Android的测试类必须继承AndroidTestCase,该类的方法必须以test开头

package testSQLLite;

import android.test.AndroidTestCase;
import android.util.Log;
import android.widget.Toast;

import java.util.List;

import dB.DbOpenHelper;
import domain.Person;
import service.PersonService;

public class TestSQLLite extends AndroidTestCase {
      final  static String  TAG ="weiyuan";
    public  void testCreateDb()
    {
        DbOpenHelper dbOpenHelper = new DbOpenHelper(getContext());
        dbOpenHelper.getWritableDatabase();
        Log.i(TAG,"数据库创建成功");
    }
    public void testSave() throws Exception{
        PersonService service = new PersonService(this.getContext());
        for(int i = 0;i<20;i++)
        {
            service.save(new Person("weiyuan"+i,"12345"+i));
        }
        Log.i(TAG,"数据保存成功");
    }

      /*主要查找的是姓名和电话一起查找,只要满足了姓名和电话,才正确*/
    public void testFind() throws Exception{
        PersonService service = new PersonService(this.getContext());
        Person person = service.find("chendong","456789");
        Log.i(TAG, person.toString());
        Log.i(TAG,"数据查找成功");

    }

    /*删除某个记录*/
    public void testdelete() throws Exception{
        PersonService service = new PersonService(this.getContext());
        service.delete("weiyuan1","123451");
        Log.i(TAG,"数据删除成功");

    }
    /*给新某个记录*/
    public void testupdate() throws Exception{
        PersonService service = new PersonService(this.getContext());
        service.update(new Person("chendong","456789"),"weiyuan2","123452");
        Log.i(TAG, "数据修改成功");

    }
        /*获得分页的数据*/
    public void testScrollData() throws Exception{
        PersonService service = new PersonService(this.getContext());
        List<Person> persons = service.getScrollData(0, 5);
        for(Person person : persons){
            Log.i(TAG, person.toString());
        }

    }

    public void testCount() throws Exception{
        PersonService service = new PersonService(this.getContext());
        long result = service.getCount();
        Log.i(TAG, result+"");
    }

}
时间: 2024-12-13 16:31:59

黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查的相关文章

黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据

1.内容提供者是让当前的app的数据可以让其他应用访问,其他应该可以通过内容提供者访问当前app的数据库 contentProvider的主要目的是提供一个开发的接口,让其他的应该能够访问当前应用的数据 2.建立的操作类必须继承自定义的内容提供者必须继承ContentProvider 3.创建的创建的PersonProvider必须在应用的主包名和主包名的子目录下,现在应用的主包名是 package="test.weiyuan.sqllite1" 4.内容提供者编写好之后需要在清单文件

黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器

1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr

Android中使用Sqlite数据库 (二) 增删改查

定义接口 package com.example.android_db.service; import java.util.List; import java.util.Map; public interface PersonService { public boolean addPerson(Object[] params); public boolean deletePerson(Object[] params); public boolean updatePerson(Object[] p

Android 利用xUtils框架实现对sqllite的增删改查

首先下载xUtils,下载地址:https://github.com/wyouflf/xUtils  把下载好的文件压缩,把里面的jar包拷进项目中如图所示: 这里新建一个User类进行测试增删改查 package com.example.xutilsdemo; public class User { private int id; private String name; private String email; public int getId() { return id; } publi

黎活明给程序员的忠告

展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们. 01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好. 由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期

黎活明给程序员的忠告 收藏

http://www.cnblogs.com/Ivan-j2ee/p/4286020.html 展望未来,总结过去10年的程序员生涯,给程序员小:走过的路,回忆起来是那么曲折,把自己的一些心得体:01.自己的户口档案.养老保险.医疗保险.住房公:由于程序员行业每年跳槽一次,我不隐瞒大家,我至少:特别是买房子时,你要商业贷款与公积金贷款的利率差:02.不要轻易换笔记本电脑,不要跟潮流,不要买过:这方面我的经验教训也是惨痛的:03.这年代外语.学历.职称. 展望未来,总结过去10年的程序员生涯,给程

求代码:android listview checkbox 从数据库里读取数据后怎么设置相应的checkbox为选中状态

============问题描述============ 现在有一个android listview 带checkbox,从数据库里调取相应数据后,绑定到listview 上. 那么怎么将listview 里的checkbox的选择状态与在数据库中记录一一对应? 求给出代码. 我在自定义BaseAdapter类中,getView方法中无法实现. ============解决方案1============ 这样 你点击的时候 是不是 会获取一个view  通过这个view 获取你那个 checkb

Android 根据sql文件创建数据库并插入数据

因为在开发客户端的时候,服务器端的有写数据是重复的,不需要再去访问服务器的,然后服务器端提供的是一个sql文件,里面包含了数据库和数据,我们这些开发客户端的不可能一行一行的进行手动入库吧?所以我就想到了直接读取sql文件进行创建数据并插入数据好了. 创建DBHelp并继承SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelper { private Context mContext; public DBHelper(Contex

android 数据库的增删改查

主java package com.itheima.crud; import android.app.Activity; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import com.ithei