1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
| package org.wp.service;
/**
* Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放
* ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的
* put(String key, Xxx value)和getAsXxx(String key)方法
* key为字段名称,value为字段值,Xxx指的是各种常用的数据类型
* 如:String、Integer等
* long rowid = db.insert("person", null, values);//返回新添记录的行号,与主键id无关
*
*/
import java.util.ArrayList;
import java.util.List;
import org.wp.domain.Person;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class OtherPersonService {
private DataBaseOpenHelper dataBaseOpenHelper;
private SQLiteDatabase database;
public OtherPersonService(Context context) {
dataBaseOpenHelper = new DataBaseOpenHelper(context);
}
/**
*
* database.insert(table, nullColumnHack, values);
* 不管第三个参数是否包含数据,执行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
*
* @param person
*/
public void save(Person person) {
database = dataBaseOpenHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
// 必须添加记录,除了主键之外,其他字段的值都为NULL
database.insert("person", "name", values);
// 第二个参数,构造合法的sql语句
// insert into person(name) values(null);
}
public void update(Person person) {
database = dataBaseOpenHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
database.update("person", values, "personid=?", new String[] { String
.valueOf(person.getPersonid()) });
}
public Person find(Integer id) {
database = dataBaseOpenHelper.getReadableDatabase();
Cursor cursor = database.query("person", new String[] { "personid",
"name", "age" }, "personid=?", new String[] { String
.valueOf(id) }, null, null, null);
if (cursor.moveToNext()) {
return new Person(cursor.getInt(0), cursor.getString(1), cursor
.getShort(2));
}
return null;
}
public void delete(Integer... ids) {
if (ids.length > 0) {
String[] strIds = new String[ids.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ids.length; i++) {
sb.append('?').append(',');
strIds[i] = String.valueOf(ids[i]);
}
sb.deleteCharAt(sb.length() - 1);
database = dataBaseOpenHelper.getWritableDatabase();
database.delete("person", "personid in(" + sb + ")", strIds);
}
}
/**
*
* query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义
* table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开
* columns:要查询出来的列名。相当于select语句select关键字后面的部分
* selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符"?"
* selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常
* groupBy:相当于select语句group by关键字后面的部分
* having:相当于select语句having关键字后面的部分
* orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
* limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
*
*/
public List<Person> getScrollData(int startResult, int maxResult) {
List<Person> persons = new ArrayList<Person>();
database = dataBaseOpenHelper.getWritableDatabase();
Cursor cursor = database.query("person", new String[] { "personid",
"name", "age" }, null, null, null, null, "personid desc",
startResult + "," + maxResult);
while (cursor.moveToNext()) {
persons.add(new Person(cursor.getInt(0), cursor.getString(1),
cursor.getShort(2)));
}
return persons;
}
public long getCount() {
database = dataBaseOpenHelper.getReadableDatabase();
Cursor cursor = database.query("person", new String[] { "count(*)" },
null, null, null, null, null);
while (cursor.moveToNext()) {
return cursor.getLong(0);
}
return 0;
}
} |