SQLite的详解及案例

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,
1、SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
2、SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
3、但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。
4、另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段的类型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from 表名 where 条件子句 group by 分组字句 having … order by 排序子句
如:select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person where id=10

使用SQLiteDatabase操作SQLite数据库
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API。
可以调用SQLiteDatabase的静态方法:
public static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)
flags参数可以是 OPEN_READWRITE, OPEN_READONLY ,CREATE_IF_NECESSARY, NO_LOCALIZED_COLLATORS四个的一个或多个(多个模式组合用|隔离).
public static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory)
public static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
来打开文件系统中位于绝对路径path的数据库。
还可以通过Context对象调用
public abstract SQLiteDatabase openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)直接在私有数据库目录创建或打开一个名为name的数据库,
注意:mode只的是MODE_PRIVATE , MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE。
Context还有:
public abstract String[] databaseList();//返回私有数据库目录所有数据库名字
public abstract boolean deleteDatabase(String name);//删除私有数据库目录内文件名为name的数据库。
除了在文件系统中创建SQLite数据库,android还支持SQLite内存数据库。在某些需要临时创建数据库,并且对操作速率相对要求高的情况下,SQLite内存数据库就发挥作用了,用SQLiteDatabase的静态方法:
public static SQLiteDatabase create(SQLiteDatabase.CursorFactory factory)
来创建,创建失败返回null。
最后记住,不管用何种方式打开了数据库,获得的SQLite对象不再使用时,都要调用close()来关闭打开的数据库,否则抛出IllegalStateException异常。
使用SQLiteDatabase对象可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。
execSQL()方法的使用例子:
SQLiteDatabase db = ….;
db.execSQL(“insert into person(name, age) values(‘传智播客’, 4)”);
db.close();
执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“传智播客”这些参数值应该由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:
SQLiteDatabase db = ….;
db.execSQL(“insert into person(name, age) values(?,?)”, new Object[]{“传智播客”, 4});
db.close();
execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。
SQLiteDatabase的rawQuery() 用于执行select语句,使用例子如下: SQLiteDatabase db = ….;
Cursor cursor = db.rawQuery(“select * from person”, null);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:
Cursor cursor = db.rawQuery(“select * from person where name like ? and age=?”, new String[]{“%传智%”, “4”});

Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。另外Cursor 还有常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。
除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的人使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “传智播客”);
values.put(“age”, 4);
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对此参数会感到疑惑,此参数的作用是干嘛的?是这样的:如果第三个参数values 为Null或者元素个数为0, Insert()方法必然要添加一条除了主键之外其它字段为Null值的记录,为了满足这条insert语句的语法, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
delete()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(“person”, “personid

package com.shine.caidan;

public class Caidan {

    private int _id;
    // 菜名
    private String name;
    // 菜价
    private int price;
    // 点菜数量
    private int num;

    private String classify;

    public String getClassify() {
        return classify;
    }

    public void setClassify(String classify) {
        this.classify = classify;
    }

    public int get_id() {
        return _id;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "Caidan[id=" + _id + ",name=" + name + ",price=" + price + "]";
    }

    public Caidan() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Caidan(int _id, String classify, String name, int price, int num) {
        super();
        this._id = _id;
        this.name = name;
        this.price = price;
        this.num = num;
        this.classify=classify;
    }

    public Caidan(int _id, String classify, String name, int price) {
        super();
        this._id = _id;
        this.name = name;
        this.price = price;
        this.classify=classify;
    }

}

2:

package com.shine.caidan;



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

public class CaidanDBOpenHelper extends SQLiteOpenHelper {
    private static final int VERSION = 1;// 版本
    private static final String DB_NAME = "caidan.db";// 数据库名
    public static final String CAIDAN_TABLE_ONE = "allcaidan";// 表名
    public static final String CAIDAN_TABLE_TWO = "selectcaidan";// 表名
    public static final String _ID = "_id";// 表中的列名
    public static final String NAME = "name";// 表中的列名
    public static final String PRICE = "price";// 表中的列名
    public static final String NUM = "num";// 表中的列名
    public static final String CLASSIFY = "classify";// 表中的列名
    // 实例化
    /*private static SQLiteDatabase db;*/

    public CaidanDBOpenHelper(Context context) {
        super(context, DB_NAME, null, VERSION);
        // TODO Auto-generated constructor stub
    }

    /*public static CaidanDBOpenHelper getDBHelper(Context context) {
        CaidanDBOpenHelper dbHelpr = new CaidanDBOpenHelper(context);
        db = dbHelpr.getWritableDatabase();
        return dbHelpr;
    }*/
    // 数据库第一次被创建时调用
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表SQL语句
        String sql_one = "create table " + CAIDAN_TABLE_ONE + " (" + _ID
                + " integer primary key autoincrement," + CLASSIFY
                + " varchar(10)," + NAME + " varchar(30)," + PRICE + " int)";

        String sql_two = "create table " + CAIDAN_TABLE_TWO + "(" + _ID
                + " integer primary key autoincrement," + NAME + " varchar(30),"
                + PRICE + " int," + CLASSIFY + " varchar(10)," + NUM + " int)";
        // 执行SQL语句
        db.execSQL(sql_one);
        db.execSQL(sql_two);
    }

    // 版本升级时被调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        DropTable(db);
        onCreate(db);
    }

    private void DropTable(SQLiteDatabase db) {
        StringBuilder sb = new StringBuilder();
        sb.append("DROP TABLE IF EXISTS " + CAIDAN_TABLE_ONE + ";");
        sb.append("DROP TABLE IF EXISTS " + CAIDAN_TABLE_TWO + ";");
        db.execSQL(sb.toString());
    }

}

3:

package com.shine.caidan;

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

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

public class CaidanInsert extends Activity {

    private EditText oneid,oneclassify,onename,oneprice,classifyfind;
    private ListView view;
    private Button find,insert;


    private CaidanDBOpenHelper db;
    private Cursor cursor;
    private SimpleCursorAdapter adapter;
    private Cursor myCursor;
    private TextView oneq;
    CaidanSQLiteOperImpl  ok;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.insert);
        oneid=(EditText) this.findViewById(R.id.id);
        oneclassify=(EditText) this.findViewById(R.id.classify);
        onename=(EditText) this.findViewById(R.id.name);
        oneprice=(EditText) this.findViewById(R.id.price);

        classifyfind=(EditText) this.findViewById(R.id.classifyfind);

        view=(ListView) this.findViewById(R.id.xianshi);

        find=(Button) this.findViewById(R.id.find);
        insert=(Button) this.findViewById(R.id.insert);


find.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                CaidanSQLiteOperImpl db=new CaidanSQLiteOperImpl(getApplicationContext());
                String classid=classifyfind.getText().toString().trim();
                Cursor cursor=db.FindClassify(classid);
                List<Caidan> list=new ArrayList<Caidan>();
                list=db.allFindClassify("101");

                System.out.println("==============="+cursor.getCount());
                if (cursor.getCount() == 0) {
                    TextView textView = new TextView(CaidanInsert.this);
                    textView.setGravity(Gravity.CENTER_VERTICAL);
                    textView.setText("对不起!没任何拨号操作");
                    textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.cailei, 0, 0, 0);
                    view.addFooterView(textView);

                } 
                //adapter=new SimpleAdapter(CaidanInsert.this, list, R.layout.xianshi, new String[] {"name", "price" }, new int[]{R.id.two_tv,R.id.three_tv });
                adapter = new SimpleCursorAdapter(CaidanInsert.this, R.layout.xianshi, cursor,
                        new String[] {"name", "price" }, new int[] {
                             R.id.two_tv,R.id.three_tv });
                view.setAdapter(adapter);
            }
        });
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                CaidanSQLiteOperImpl db=new CaidanSQLiteOperImpl(getApplicationContext());
                String one_id=oneid.getText().toString().trim();
                int a1=Integer.parseInt(one_id);

                String two_class=oneclassify.getText().toString().trim();
                String three_name=onename.getText().toString().trim();

                String four_price=oneprice.getText().toString().trim();
                int a2=Integer.parseInt(four_price);
                Caidan cai=new Caidan(a1, two_class, three_name, a2);

                db.allAdd(cai);
            }
        });

    }
}

4:

package com.shine.caidan;

import java.util.List;

public interface CaidanSQLiteOper {

    //所有菜单列表方法
    //添加菜品向数据库
    public void allAdd(Caidan cd);
    //删除数据库的菜品
    public void allDelete(String name);
    //更新数据库的菜品
    public void allUpdata(Caidan cd);
    //查询不同类别的菜单
    public List<Caidan> allFindClassify(String classify);



    //已点菜列表方法
    public void selectUpdataAdd(String name,int i);
    public void selectUpdataSub(String name,int i);
    //向点菜表中添加菜品
    public void selectAdd(Caidan cd);
    //向点菜表中删除所点菜品
    public void selectDelete(String name);



    public void selectAllClear();

    public List<Caidan> selectFindAll();



}

5:

package com.shine.caidan;

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

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class CaidanSQLiteOperImpl implements CaidanSQLiteOper {

    private CaidanDBOpenHelper cdh;

    public CaidanSQLiteOperImpl(Context context) {
        cdh = new CaidanDBOpenHelper(context);
    }

    @Override
    public void allAdd(Caidan cd) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(CaidanDBOpenHelper._ID, cd.get_id());
        cv.put(CaidanDBOpenHelper.CLASSIFY, cd.getClassify());
        cv.put(CaidanDBOpenHelper.NAME, cd.getName());
        cv.put(CaidanDBOpenHelper.PRICE, cd.getPrice());
        db.insert(CaidanDBOpenHelper.CAIDAN_TABLE_ONE, null, cv);
        db.close();
    }

    @Override
    public void allDelete(String name) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getWritableDatabase();
        db.delete(CaidanDBOpenHelper.CAIDAN_TABLE_ONE, CaidanDBOpenHelper.NAME
                + "=?", new String[] { String.valueOf(name) });
        db.close();
    }

    @Override
    public void allUpdata(Caidan cd) {
        // TODO Auto-generated method stub

    }

    @Override
    public List<Caidan> allFindClassify(String classify) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getReadableDatabase();
        List<Caidan> list=new ArrayList<Caidan>();
        Cursor cursor = db.query(CaidanDBOpenHelper.CAIDAN_TABLE_ONE, null,
                CaidanDBOpenHelper.CLASSIFY + "=?",
                new String[] { String.valueOf(classify) }, null, null, null);

        if (cursor!=null&&cursor.moveToFirst()) {
            Caidan cai=new Caidan();
            int _id=cursor.getInt(cursor.getColumnIndex(CaidanDBOpenHelper._ID));
            String classifyone=cursor.getString(cursor.getColumnIndex(CaidanDBOpenHelper.CLASSIFY));
            String nameone=cursor.getString(cursor.getColumnIndex(CaidanDBOpenHelper.NAME));
            int priceone=cursor.getInt(cursor.getColumnIndex(CaidanDBOpenHelper.PRICE));
            cai.set_id(_id);
            cai.setClassify(classifyone);
            cai.setName(nameone);
            cai.setPrice(priceone);
            list.add(cai);
        }
        return list;
    }

    public Cursor FindClassify(String classify) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getReadableDatabase();
        Cursor cursor = db.query(CaidanDBOpenHelper.CAIDAN_TABLE_ONE, null,
                CaidanDBOpenHelper.CLASSIFY + "=?",
                new String[] { String.valueOf(classify) }, null, null, null);
        return cursor;
    }



    @Override
    public void selectAdd(Caidan cd) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(CaidanDBOpenHelper._ID, cd.get_id());
        cv.put(CaidanDBOpenHelper.NAME, cd.getName());
        cv.put(CaidanDBOpenHelper.CLASSIFY, cd.getClassify());
        cv.put(CaidanDBOpenHelper.PRICE, cd.getPrice());
        cv.put(CaidanDBOpenHelper.NUM, cd.getNum());
        db.insert(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, null, cv);
        db.close();
    }

    //实现了选择删除
    @Override
    public void selectDelete(String name) {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getWritableDatabase();
        db.delete(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, CaidanDBOpenHelper.NAME
                + "=?", new String[] { String.valueOf(name) });
        db.close();
    }

    @Override
    public List<Caidan> selectFindAll() {
        // TODO Auto-generated method stub
        return null;
    }

    public String findById(String name) {
        SQLiteDatabase db = cdh.getReadableDatabase();
        String nameid = null;
        Cursor cursor = db.query(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, null, CaidanDBOpenHelper.NAME + "=?", new String[]{String.valueOf(name)}, null, null, null);
        if(cursor != null && cursor.moveToFirst()){
            nameid = cursor.getString(cursor.getColumnIndex(CaidanDBOpenHelper.NAME));
        }
        return nameid;

        }

    public Cursor FindSelectAll() {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getReadableDatabase();
        Cursor cursor = db.query(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, null,
                null,
                null, null, null, null);
        return cursor;
    }

    @Override
    public void selectAllClear() {
        // TODO Auto-generated method stub
        SQLiteDatabase db = cdh.getReadableDatabase();
        db.delete(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, null, null);
        db.close();
    }

    @Override
    public void selectUpdataAdd(String name, int i) {
        // TODO Auto-generated method stub
         SQLiteDatabase db = cdh.getWritableDatabase();
         ContentValues cv=new ContentValues();
         System.out.println("数字增加为:"+i++);
         i=i++;
         cv.put(CaidanDBOpenHelper.NUM, i);
         db.update(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, cv, CaidanDBOpenHelper.NAME + "=?", new String[]{String.valueOf(name)});
         db.close();
    }

    @Override
    public void selectUpdataSub(String name, int i) {
        // TODO Auto-generated method stub
         SQLiteDatabase db = cdh.getWritableDatabase();
         ContentValues cv=new ContentValues();
         i=--i;
         System.out.println("最终数字为:"+i);
         cv.put(CaidanDBOpenHelper.NUM, i);
         db.update(CaidanDBOpenHelper.CAIDAN_TABLE_TWO, cv, CaidanDBOpenHelper.NAME + "=?", new String[]{String.valueOf(name)});
         db.close();
    }
}

6:

package com.shine.caidan;


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.ImageView;
import android.widget.TextView;


public class ImageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private Cursor list;
    public int CurrentItemID = 0;


    public ImageAdapter(Cursor imagePath, Context context) {
        super();
        list = imagePath;
        mInflater = LayoutInflater.from(context);
    }


    @Override
    public int getCount() {
        if (null != list) {
            return list.getCount();
        } else {
            return 0;
        }
    }


    @Override
    public Object getItem(int arg0) {
        return arg0;
    }


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


    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        list.moveToPosition(arg0);
        Hooker hooker;
        if (arg1 == null) {
            arg1 = mInflater.inflate(R.layout.rightmain, null);
            hooker = new Hooker();
            hooker.right_iv = (ImageView) arg1.findViewById(R.id.right_iv);
            hooker.right_tv_name = (TextView) arg1
                    .findViewById(R.id.right_tv_name);
            hooker.right_tv_price = (TextView) arg1
                    .findViewById(R.id.right_tv_price);
            arg1.setTag(hooker);
        } else {
            hooker = (Hooker) arg1.getTag();
        }
        hooker.right_tv_name.setText(list.getString(2));
        hooker.right_tv_price.setText(list.getString(3));
        hooker.right_iv.setBackgroundResource(R.drawable.cailei);
        return arg1;
    }


    class Hooker {
        public ImageView right_iv;
        public TextView right_tv_name;
        public TextView right_tv_price;
    }


}

7:

package com.shine.caidan;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity implements OnItemClickListener,
        OnClickListener {
    GridView gvone;
    GridView gvtwo;
    Button button_one, button_two, button_three, button_four, button_five;
    private TextView gridview_tv;
    Button left_clear, left_summit;
    ImageAdapter adapter;
    SelectAdapter adapterSelect;
    private Button text;
    private Cursor list;
    private Cursor cursor;
    private CaidanSQLiteOperImpl db;
    private String flagstr = "基本饮食";
    private int k = 1;

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 101:
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
                list.close();
                break;
            case 102:
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
                list.close();
                break;
            case 103:
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
                list.close();
                break;
            case 104:
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
                list.close();
                break;
            case 105:
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
                list.close();
                break;
            case 111:
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                cursor = db.FindSelectAll();
                if (cursor.getCount() == 0) {
                    gridview_tv.setVisibility(View.VISIBLE);
                    gridview_tv.setText("您还没有点菜哦!");
                    gvone.setVisibility(View.GONE);
                } else {
                    gvone.setVisibility(View.VISIBLE);
                    gridview_tv.setVisibility(View.GONE);
                    adapterSelect = new SelectAdapter(cursor,
                            MainActivity.this, handler);
                    gvone.setAdapter(adapterSelect);
                }
                break;
            case 112:
                CaidanSQLiteOperImpl db1 = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                cursor = db1.FindSelectAll();
                if (cursor.getCount() == 0) {
                    gridview_tv.setVisibility(View.VISIBLE);
                    gridview_tv.setText("您还没有点菜哦!");
                    gvone.setVisibility(View.GONE);
                } else {
                    adapterSelect = new SelectAdapter(cursor,
                            MainActivity.this, handler);
                    gvone.setAdapter(adapterSelect);
                }
                break;
            case 201:
                gridview_tv.setVisibility(View.VISIBLE);
                gvone.setVisibility(View.GONE);
                gridview_tv.setText("已清空,请您点菜哦!");
                break;
            }
        }
    };

    private void left_display() {
        CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                getApplicationContext());
        cursor = db.FindSelectAll();
        if (cursor.getCount() == 0) {
            gridview_tv.setVisibility(View.VISIBLE);
            gridview_tv.setText("您还没有点菜哦!");
            gvone.setVisibility(View.GONE);
        } else {
            adapterSelect = new SelectAdapter(cursor, MainActivity.this,
                    handler);
            gvone.setAdapter(adapterSelect);
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, CaidanInsert.class);
                startActivity(intent);
            }
        });
        db = new CaidanSQLiteOperImpl(getApplicationContext());
        list = db.FindClassify("101");
        adapter = new ImageAdapter(list, MainActivity.this);
        gvtwo.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        left_display();
    }

    private void init() {
        gridview_tv = (TextView) this.findViewById(R.id.gridview_tv);
        text = (Button) this.findViewById(R.id.text);
        gvone = (GridView) this.findViewById(R.id.gridviewone);
        gvtwo = (GridView) this.findViewById(R.id.gridviewtwo);
        button_one = (Button) this.findViewById(R.id.buttonone);
        button_two = (Button) this.findViewById(R.id.buttontwo);
        button_three = (Button) this.findViewById(R.id.buttonthree);
        button_four = (Button) this.findViewById(R.id.buttonfour);
        button_five = (Button) this.findViewById(R.id.buttonfive);
        button_one.setOnClickListener(this);
        button_two.setOnClickListener(this);
        button_three.setOnClickListener(this);
        button_four.setOnClickListener(this);
        button_five.setOnClickListener(this);

        gvtwo.setOnItemClickListener(this);
        gvone.setOnItemClickListener(this);

        left_clear = (Button) this.findViewById(R.id.left_clear);
        left_summit = (Button) this.findViewById(R.id.left_summit);

        left_clear.setOnClickListener(this);
        left_summit.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private boolean istrue(String name) {
        CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                getApplicationContext());
        cursor = db.FindSelectAll();
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToPosition(i);
            String nameone = cursor.getString(1);
            System.out.println("菜品的名称是:" + nameone);
            if (nameone.equals(name)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position,
            long arg3) {
        list.moveToPosition(position);
        if (flagstr.equals("基本饮食")) {
            System.out.println("进入基本饮食;;;;;;;;;;;;;;;;");
            String name = list.getString(2);
            String price = list.getString(3);
            int priceone = Integer.parseInt(price);
            if (istrue(name)) {
                // 执行更新
                String num = cursor.getString(4);
                int a1 = Integer.parseInt(num);
                a1=a1++;
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(MainActivity.this);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            } else {
                // 执行添加
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                k++;
                Caidan cai = new Caidan(k, "101", name, priceone, 1);
                db.selectAdd(cai);
                Message msg = new Message();
                msg.what = 111;
                handler.sendMessage(msg);
            }

        } else if (flagstr.equals("治疗饮食")) {
            System.out.println("进入治疗饮食;;;;;;;;;;;;;;;;");
            String name = list.getString(2);
            String price = list.getString(3);
            int priceone = Integer.parseInt(price);
            if (istrue(name)) {
                // 执行更新
                String num = cursor.getString(4);
                int a1 = Integer.parseInt(num);
                a1=a1++;
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(MainActivity.this);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            } else {
                // 执行添加
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                k++;
                Caidan cai = new Caidan(k, "102", name, priceone, 1);
                db.selectAdd(cai);
                Message msg = new Message();
                msg.what = 111;
                handler.sendMessage(msg);
            }

        } else if (flagstr.equals("产后饮食")) {
            System.out.println("进入产后饮食;;;;;;;;;;;;;;;;");
            String name = list.getString(2);
            String price = list.getString(3);
            int priceone = Integer.parseInt(price);
            if (istrue(name)) {
                // 执行更新
                String num = cursor.getString(4);
                int a1 = Integer.parseInt(num);
                a1=a1++;
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(MainActivity.this);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            } else {
                // 执行添加
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                k++;
                Caidan cai = new Caidan(k, "103", name, priceone, 1);
                db.selectAdd(cai);
                Message msg = new Message();
                msg.what = 111;
                handler.sendMessage(msg);
            }
        } else if (flagstr.equals("小儿饮食")) {
            System.out.println("进入小儿饮食;;;;;;;;;;;;;;;;");
            String name = list.getString(2);
            String price = list.getString(3);
            int priceone = Integer.parseInt(price);
            if (istrue(name)) {
                // 执行更新
                String num = cursor.getString(4);
                int a1 = Integer.parseInt(num);
                a1=a1++;
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(MainActivity.this);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            } else {
                // 执行添加
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                k++;
                Caidan cai = new Caidan(k, "104", name, priceone, 1);
                db.selectAdd(cai);
                Message msg = new Message();
                msg.what = 111;
                handler.sendMessage(msg);
            }
        } else if (flagstr.equals("管制饮食")) {
            System.out.println("进入管制饮食;;;;;;;;;;;;;;;;");
            String name = list.getString(2);
            String price = list.getString(3);
            int priceone = Integer.parseInt(price);
            if (istrue(name)) {
                // 执行更新
                String num = cursor.getString(4);
                int a1 = Integer.parseInt(num);
                a1=a1++;
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(MainActivity.this);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            } else {
                // 执行添加
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(
                        getApplicationContext());
                k++;
                Caidan cai = new Caidan(k, "105", name, priceone, 1);
                db.selectAdd(cai);
                Message msg = new Message();
                msg.what = 111;
                handler.sendMessage(msg);
            }
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.buttonone:
            flagstr = button_one.getText().toString().trim();
            System.out.println("基本饮食情况:"+flagstr);
            if (list != null) {
                list = null;
                list = db.FindClassify("101");
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
            }
            break;
        case R.id.buttontwo:
            flagstr = button_two.getText().toString().trim();
            System.out.println("治疗饮食情况:"+flagstr);
            if (list != null) {
                list = null;
                list = db.FindClassify("102");
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
            }
            break;
        case R.id.buttonthree:
            flagstr = button_three.getText().toString().trim();
            System.out.println("产后饮食情况:"+flagstr);
            if (list != null) {
                list = null;
                list = db.FindClassify("103");
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
            }
            break;
        case R.id.buttonfour:
            flagstr = button_four.getText().toString().trim();
            System.out.println("小儿饮食情况:"+flagstr);
            if (list != null) {
                list = null;
                list = db.FindClassify("104");
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
            }
            break;
        case R.id.buttonfive:
            flagstr = button_five.getText().toString().trim();
            System.out.println("管制饮食情况:"+flagstr);
            if (list != null) {
                list = null;
                list = db.FindClassify("105");
                adapter = new ImageAdapter(list, MainActivity.this);
                gvtwo.setAdapter(adapter);
            }
            break;
        case R.id.left_clear:
            db.selectAllClear();
            Message msg = new Message();
            msg.what = 201;
            handler.sendMessage(msg);
            break;
        case R.id.left_summit:

            break;
        }
    }
}

8:

package com.shine.caidan;

import android.content.Context;
import android.database.Cursor;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class SelectAdapter extends BaseAdapter {

    private LayoutInflater mInflater;
    private Context context;
    private Cursor list;
    public int CurrentItemID = 0;
    Handler handler;

    public SelectAdapter(Cursor imagePath, Context context, Handler handler) {
        super();
        list = imagePath;
        this.context = context;
        this.handler = handler;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        if (null != list) {
            return list.getCount();
        } else {
            return 0;
        }
    }

    @Override
    public Object getItem(int arg0) {
        return arg0;
    }

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

    @Override
    public View getView(final int arg0, View arg1, ViewGroup arg2) {
        list.moveToPosition(arg0);
        Hooker hooker;
        if (arg1 == null) {
            arg1 = mInflater.inflate(R.layout.leftmain, null);
            hooker = new Hooker();
            hooker.left_iv = (ImageView) arg1.findViewById(R.id.left_iv);
            hooker.left_bt_delete = (Button) arg1
                    .findViewById(R.id.left_bt_delete);
            hooker.left_tv_name = (TextView) arg1
                    .findViewById(R.id.left_tv_name);
            hooker.left_bt_jian = (Button) arg1.findViewById(R.id.left_bt_jian);
            hooker.left_tv_num = (TextView) arg1.findViewById(R.id.left_tv_num);
            hooker.left_bt_jia = (Button) arg1.findViewById(R.id.left_bt_jia);
            arg1.setTag(hooker);
        } else {
            hooker = (Hooker) arg1.getTag();
        }
        hooker.left_bt_delete.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                list.moveToPosition(arg0);
                String name = list.getString(1);
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(context);
                db.selectDelete(name);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            }
        });
        hooker.left_bt_jian.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                list.moveToPosition(arg0);
                String name = list.getString(1);
                String num = list.getString(4);
                int a1 = Integer.parseInt(num);
                System.out.println("减速的数字是:"+a1);
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(context);
                if (a1>=2) {
                    System.out.println("=========>>>>>>减速的数字是:"+a1);
                    db.selectUpdataSub(name, a1);
                    Message msg = new Message();
                    msg.what = 112;
                    handler.sendMessage(msg);
                }else {
                    db.selectDelete(name);
                    Message msg = new Message();
                    msg.what = 112;
                    handler.sendMessage(msg);
                }
            }
        });
        hooker.left_bt_jia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                list.moveToPosition(arg0);
                String name = list.getString(1);
                String num = list.getString(4);
                System.out.println("名字是:"+name);
                System.out.println("数字是:"+num);
                int a1 = Integer.parseInt(num);
                CaidanSQLiteOperImpl db = new CaidanSQLiteOperImpl(context);
                db.selectUpdataAdd(name, a1);
                Message msg = new Message();
                msg.what = 112;
                handler.sendMessage(msg);
            }
        });
        hooker.left_iv.setBackgroundResource(R.drawable.yidian);
        hooker.left_bt_delete.setBackgroundResource(R.drawable.gianbi);
        hooker.left_tv_name.setText(list.getString(1));
        hooker.left_bt_jian.setBackgroundResource(R.drawable.jian);
        //hooker.left_bt_jian.setClickable(false);
        hooker.left_tv_num.setText(list.getString(4));
        hooker.left_bt_jia.setBackgroundResource(R.drawable.jia);
        return arg1;
    }

    class Hooker {
        public ImageView left_iv;
        public Button left_bt_delete;
        public TextView left_tv_name;
        public Button left_bt_jian;
        public TextView left_tv_num;
        public Button left_bt_jia;
    }
}

9:

package com.shine.caidan;

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

import android.test.AndroidTestCase;

public class Test extends AndroidTestCase {
    public void testadd(){
        CaidanSQLiteOperImpl test=new CaidanSQLiteOperImpl(getContext());
        List<Caidan> list=new ArrayList<Caidan>();
        list=test.allFindClassify("101");
        System.out.println("========="+list.size());
        Caidan cd=new Caidan();
        for (int i = 0; i <list.size(); i++) {
            System.out.println("id=:"+String.valueOf(cd.get_id())+"class=:"+cd.getClassify().toString()+"name=:"+cd.getName()+"price=:"+cd.getPrice());
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite 是一个轻量级的嵌入式关系型数据库引擎,被广泛应用于各种应用程序中。以下是几个 SQLite 的使用案例: 1. 移动应用程序:SQLite 在移动应用程序中被广泛使用。它可以用于存储和管理应用程序内的数据,如用户信息、设置、日志等。许多流行的移动应用程序框架,如Android和iOS,都支持 SQLite。 2. 桌面应用程序:SQLite 可以作为桌面应用程序的本地数据库。它可以用于存储和检索数据,如个人信息管理、笔记、日历等。SQLite 的轻量级特性使得它成为了许多桌面应用程序的理想选择。 3. Web 应用程序:SQLite 可以作为 Web 应用程序的后端数据库。它可以存储用户信息、文章、评论等数据,并提供查询和更新功能。在一些小型规模的 Web 项目中,SQLite 可以替代更重量级的数据库系统,提供简单而高效的数据管理。 4. 嵌入式设备:由于其轻量级和低资源消耗,SQLite 在嵌入式设备中得到广泛应用。它可以嵌入到诸如智能家居、物联网设备、嵌入式系统等小型设备中,用于存储和处理设备相关的数据。 5. 数据分析和报告生成:SQLite 可以用于数据分析和报告生成。通过将数据加载到 SQLite 数据库中,可以使用 SQL 查询语言进行数据分析和统计,生成各种报告和图表。 总之,SQLite 在各种应用场景中都提供了简单、快速和可靠的数据存储和管理功能,使得它成为了许多开发者的首选数据库引擎之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值