1. 创建数据库表
首先,我们需要定义数据库表的结构。在 android 中,这通常通过 sql 语句来实现。在 sqliteopenhelper 的 oncreate() 方法中执行 sql 语句来创建表。
string sql = "create table notepad(id integer primary key autoincrement, content text, time text)"; db.execsql(sql);
id是主键,类型为integer,并且通过autoincrement自动递增。content是用于存储笔记内容的文本字段。time是用于存储时间信息的文本字段。
当应用程序第一次运行时,数据库会通过执行这条 create table 语句来创建 notepad 表。
2. 插入数据到数据库
接下来,我们定义一个方法,将数据插入到 notepad 表中。我们使用 execsql() 方法来执行 insert 语句。
public void insertnotepad(sqlitedatabase db, string content, string time) {
string sql = "insert into notepad (content, time) values (?, ?)";
db.execsql(sql, new object[]{content, time});
}
insert into notepad (content, time):指定要插入的表名和列名。values (?, ?):占位符?用于安全地插入数据。这个写法能有效防止 sql 注入攻击。new object[]{content, time}:创建一个object数组,将content和time作为参数传递,依次替换 sql 语句中的占位符?。
该方法会将指定的笔记内容和时间插入到 notepad 表中,数据库会自动生成唯一的 id 值。
3. 执行查询操作
我们还需要从数据库中查询数据。下面的方法用于根据 id 查询 notepad 表中的记录。
public cursor getnotepad(sqlitedatabase db, int id) {
return db.rawquery("select * from notepad where id = ?", new string[]{string.valueof(id)});
}
select * from notepad where id = ?:这是一条select查询语句,用于检索id等于特定值的记录。?是占位符。new string[]{string.valueof(id)}:将id转换为字符串,并通过数组传递给 sql 语句以替换占位符?。
调用此方法时,会返回一个 cursor 对象,它包含查询到的结果集。
4. 验证查询结果
查询到结果后,我们可以使用 cursor 对象来遍历结果并提取字段数据。
cursor cursor = dbhelper.getnotepad(db, 1);
system.out.println("query executed for record with id 1.");
if (cursor.movetofirst()) {
int id = cursor.getint(cursor.getcolumnindex("id"));
string content = cursor.getstring(cursor.getcolumnindex("content"));
string time = cursor.getstring(cursor.getcolumnindex("time"));
system.out.println("record found: id = " + id + ", content = " + content + ", time = " + time);
assertequals(1, id);
assertequals("test content", content);
assertequals("2024-08-23 12:00", time);
} else {
system.out.println("no record found.");
}
cursor.movetofirst():将cursor移动到第一条记录。如果有记录存在,则返回true。cursor.getint(cursor.getcolumnindex("id")):通过列名获取id列的值。cursor.getstring(cursor.getcolumnindex("content"))和cursor.getstring(cursor.getcolumnindex("time")):分别获取content和time列的值。
通过这些方法,我们可以提取查询结果并输出到控制台。同时,使用 assertequals 方法来验证结果是否与预期一致。
5. 参数化查询的安全性
在上述的 sql 查询语句中,我们使用了占位符 ?,并将实际参数通过数组传递到 sql 语句中。这是一种参数化查询的方式,可以有效防止 sql 注入攻击。通过参数化查询,你无需手动拼接 sql 语句,可以确保输入的数据不会被恶意利用来修改 sql 逻辑。
例如:
string sql = "select * from notepad where id = ?";
db.rawquery(sql, new string[]{string.valueof(id)});
这里的 new string[]{string.valueof(id)} 创建了一个字符串数组,其中包含 id 的字符串形式。这个数组会替换 sql 语句中的占位符 ?。
6. 代码总结
通过这篇文章的示例,我们展示了如何在 android 中使用 sqlite 数据库,创建表、插入数据、查询数据,并对查询结果进行验证。以下是代码的完整实现:
public class mydbhelper extends sqliteopenhelper {
public mydbhelper(context context) {
super(context, "mydatabase.db", null, 1);
}
@override
public void oncreate(sqlitedatabase db) {
string sql = "create table notepad(id integer primary key autoincrement, content text, time text)";
db.execsql(sql);
}
@override
public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {
db.execsql("drop table if exists notepad");
oncreate(db);
}
public void insertnotepad(sqlitedatabase db, string content, string time) {
string sql = "insert into notepad (content, time) values (?, ?)";
db.execsql(sql, new object[]{content, time});
}
public cursor getnotepad(sqlitedatabase db, int id) {
return db.rawquery("select * from notepad where id = ?", new string[]{string.valueof(id)});
}
}
通过这个简单的示例,你可以掌握在 android 应用中如何使用 sqlite 来执行数据库操作。你可以进一步扩展这些代码来实现更多功能,比如更新和删除记录、复杂查询等。
7. 小结
sqlite 是 android 中非常强大且轻量的内置数据库引擎,适合处理小型的持久化数据。通过本文的代码示例,你可以快速上手并在实际项目中使用 sqlite 来管理和操作数据。在实际开发中,务必采用参数化查询等安全手段来防止 sql 注入攻击,确保数据的安全性。
如果你有更复杂的需求,例如需要处理大量数据、关系复杂的数据操作,可能需要考虑其他数据库解决方案,如使用 room 或者将数据存储到云端。希望本文能够帮助你更好地理解 sqlite 在 android 中的使用,提升开发效率和数据管理能力。
到此这篇关于在android中使用sqlite数据库及其操作详解的文章就介绍到这了,更多相关android中使用sqlite内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论