[java] view plain copy print?
<span style="font-size:12px">SQLiteDatabase db
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath() + "/vote"
private String DATABASE_FILENAME = "db_vote.db"
// 初始化数据库
private SQLiteDatabase openDatabase() {
try {
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME
File dir = new File(DATABASE_PATH)
if (!dir.exists())
dir.mkdir()
if (!(new File(databaseFilename)).exists()) {
InputStream is = getResources().openRawResource(R.raw.db_vote)
FileOutputStream fos = new FileOutputStream(databaseFilename)
byte[] buffer = new byte[8192]
int count = 0
while ((count = is.read(buffer)) >0) {
fos.write(buffer, 0, count)
}
fos.close()
is.close()
}
db = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null)
return db
} catch (Exception e) {
e.printStackTrace()
}
return null
}</span>
方法二:
1. 准备SQLite database文件
假设你已经创建了一个sqlite数据库,我们需要对其进行一些修改。
(译者注:这里原文是推荐了一个SQLite数据库管理软件,这个我觉得可以随自己的喜好,最Windows下面有多款可视化的SQlite数据库管理软件,可以方便的读取,编辑数据库,例如我用的是sqlitestudio
打开数据库,添加一个新的table “android_metadata",插入一行数据,具体的SQL如下:
SQL COUNT() 语法SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注释:COUNT(DISTINCT) 适用于 ORACLE 和 Microsoft SQL Server,但是无法用于 Microsoft Access。
SQL COUNT(column_name) 实例
我们拥有下列 "Orders" 表:
O_Id
OrderDate
OrderPrice
Customer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter
现在,我们希望计算客户 "Carter" 的订单数。
我们使用如下 SQL 语句:
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'
以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:
CustomerNilsen
2
SQL COUNT(*) 实例
如果我们省略 WHERE 子句,比如这样:
SELECT COUNT(*) AS NumberOfOrders FROM Orders
结果集类似这样:
NumberOfOrders
6
这是表中的总行数。
SQL COUNT(DISTINCT column_name) 实例
现在,我们希望计算 "Orders" 表中不同客户的数目。
我们使用如下 SQL 语句:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
结果集类似这样:
NumberOfCustomers
3
这是 "Orders" 表中不同客户(Bush, Carter 和 Adams)的数目。
1、使用insert方法插入记录SQLiteDatabase的insert方法的签名为long
insert(String
table,String
nullColumnHack,ContentValues
values),这个插入方法的参数说明如下:
table:代表想插入数据的表名。
nullColumnHack:代表强行插入null值的数据列的列名。
values:代表一行记录的数据。
insert方法插入的一行记录使用ContentValues存放,ContentValues类似于Map,它提供了put(String
key,Xxx
value)(其中key为数据列的列名)方法用于存入数据、getAsXxx(String
key)方法用于取出数据。
例如如下语句:
ContentValues
values=new
ContentValues()
values.put("name","孙悟空"):
values.put("age",500)
//返回新添记录的行号,该行号是一个内部直,与主键id无关,发生错误返回-1
long
rowid=db.insert("person_inf",null,values)
2、使用update方法更新数据
SQLiteDatabase的update方法签名为update(String
table,ContentValues
values,String
whereClause,String[]
whereArgs),这个更新方法的参数说明如下:
table:代表想要更新数据的表名。
values:代表想要更新的数据。
whereClause:满足该whereClause子句的记录将会被更新。
whereArgs:用于为whereArgs子句传递参数。
例如我们想要更新person_inf表中所有主键大于20的人的人名,可调用如下方法:
ContentValues
values=new
ContentValues()
//存放更新后的人名
values.put("name","新人名")
int
result=db.update("person_inf",values,"_id>?",new
Integer[]{20})
3、使用delete方法删除记录
SQLiteDatabase的delete方法签名为delete(String
table,String
whereClause,String[]
whereArgs),这个删除的参数说明如下:
table:代表想删除数据的表名。
whereClause:满足该whereClause子句的记录将会被删除。
whereArgs:用于为whereArgs子句传入参数。
删除person_inf表中所有人名以孙开头的记录
int
result=db.delete("person_inf","person_name
like
?",new
String[]{"孙_"})
4、使用query方法查询记录
SQLiteDatabase的query方法签名为Cursor
query(boolean
distinct,String
table,String[]
columns,String
selection,String[]
selectionArgs,String
groupBy,String
having,String
orderBy,String
limit),这个query方法的参数说明如下。
distinct:指定是否去除重复记录。
table:执行查询数据的表名。
columns:要查询出来的列名。
selection:查询条件子句。
selectionArgs:用于为selection子句中占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:用于控制分组。
having:用于对分组进行过滤。
orderBy:用于对记录进行排序。
limit:用于进行分页。
例如查询出person_inf表中人名以孙开头的数据
Cursor
cursor=db.query("person_inf",new
String[]{"_id,name,age"},"name
like
?",new
String
[]{"孙%"},null,null,"personid
desc","5,10")
cursor.close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)