前面我们简单了解了一下 SQLite 数据库,现在我们来看看怎么在 Android 开发中去使用它。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧。对于Android平台来说,系统内置了丰富的API来供开发人员操作 SQLite,我们可以轻松的完成对数据的存取。
1. 创建一个 User 类
我们的数据表是 user,先创建一个类方便使用。
package net.nowamagic.test; public class User { public int _id; public String name; public int age; public String info; public User() { } public User(String name, int age, String info) { this.name = name; this.age = age; this.info = info; } }
2. 在 Activity 或 Fragment 中使用 SQLite
为了方便,我将代码写在了 onCreate 中。
package net.nowamagic.fragment; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; import android.app.Fragment; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import net.nowamagic.magicapp_v17.R; import net.nowamagic.magicapp_v17.TestActivity; import net.nowamagic.test.User; public class BlogFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //打开或创建nowamagic.db数据库 SQLiteDatabase db = getActivity().openOrCreateDatabase("nowamagic.db", Context.MODE_PRIVATE, null); db.execSQL("DROP TABLE IF EXISTS user"); //创建user表 db.execSQL("CREATE TABLE user (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)"); User user = new User(); user.name = "Lurie"; user.age = 16; //插入数据 db.execSQL("INSERT INTO user VALUES (NULL, ?, ?)", new Object[]{user.name, user.age}); user.name = "Eleonora"; user.age = 17; //ContentValues以键值对的形式存放数据 ContentValues cv = new ContentValues(); cv.put("name", user.name); cv.put("age", user.age); //插入ContentValues中的数据 db.insert("user", null, cv); //更新数据 //db.update("user", cv, "name = ?", new String[]{"john"}); Cursor c = db.rawQuery("SELECT * FROM user WHERE age >= ?", new String[]{"16"}); while (c.moveToNext()) { int _id = c.getInt(c.getColumnIndex("_id")); String name = c.getString(c.getColumnIndex("name")); int age = c.getInt(c.getColumnIndex("age")); Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age); } c.close(); //删除数据 //db.delete("user", "age < ?", new String[]{"35"}); //关闭当前数据库 db.close(); //删除test.db数据库 //deleteDatabase("nowamagic.db"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.test, container, false); ButterKnife.inject(this, view); return view; } }
在 Activity 中,可以直接使用 openOrCreateDatabase(),而在 Fragment 中,则要使用getActivity().openOrCreateDatabase()。
在执行完上面的代码后,我们看一下 log。
同时,系统就会在/data/data/[PACKAGE_NAME]/databases目录下生成一个“nowamagic.db”的数据库文件,如图:
有一点需要说明一下,data/data这个目录是需要root权限的,就是说,如果你用真机做测试,请先获得 ROOT 权限。如何获得?可以参考一下 获取Android系统的ROOT权限。
我们在 SQLite Expert 中再看一下这个数据表。
OK,初略是成功了,后面我们再慢慢介绍 SQLite 使用的更多细节。
现代魔法 推荐于 2013-02-27 10:23