Android学习笔记(六)SQLite
- - 博客园_首页SQLite是一个极轻量型的数据库. 它在提供了和大型数据库相当的功能,还具有轻便、跨平台等优点,SQLite使用非常方便,并不需要我们像常规数据库(SQLServer,Mysql等)那样进行安装,在Android的JDK中,其实是已经包含了SQLite这个数据库的核心. 当然我们必须要强调一点,SQLite并不是只针对Android的,其实它还可以用在别的很多地方.
sqlite有两种方式操作数据库:
第一种就是像oracle一样直接写sql语句
第二种就是借助工具,只写关键代码
下面将对这两种方式进行演示:
1 ,在xml中创建按钮,进行 查询和 固定的删除,修改,添加,
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="130dp" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:layout_marginLeft="18dp" android:layout_marginTop="44dp" android:onClick="optionuser" android:text="添加" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/button1" android:layout_marginLeft="46dp" android:layout_toRightOf="@+id/button1" android:onClick="optionuser" android:text="删除" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="22dp" android:onClick="optionuser" android:text="修改" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button3" android:layout_alignBottom="@+id/button3" android:layout_alignLeft="@+id/button2" android:onClick="optionuser" android:text="查询" /> </RelativeLayout>
2,创建数据库的表的类
public class HelperDemo extends SQLiteOpenHelper{ public HelperDemo(Context context, String name, CursorFactory factory, int version) { //参数一:上下文 //参数二:数据库的名字 //参数三:游标 没有游标就为null //参数四:数据库的版本号 版本号不能小于当前的版本号 super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { //创建表 String sql="create table user(_id integer primary key autoincrement,userphone txet,username text)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
分析:
创建数据库 需要继承SQLiteOpenHelper 并重写里面的onCreate()和onUpgrade()方法;
onCreate()方法;创建表 回调函数 在程序执行时需要操作该表时,如发现没有该表就会回调onCreate方法创建表;该方法只会执行一次
onUpgrade();当版本号更新时,会回调该函数
3,实现增删改查的操作(两种方式);
/** * * @author Administrator 数据库的操作 */ public class DemoDB extends Activity { //v1显示查询的结果 //t1,t2,t3,t4分别是增删改查按钮 private TextView v1; private Button t1; private Button t2; private Button t3; private Button t4; private HelperDemo demo; 获取数据库对象 private SQLiteDatabase database; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_db); //实例化数据库对象 demo = new HelperDemo(this, "user_contacts", null, 1); //获得xml的组件 v1 = (TextView) this.findViewById(R.id.textView1); t1 = (Button) this.findViewById(R.id.button1); t2 = (Button) this.findViewById(R.id.button2); t3 = (Button) this.findViewById(R.id.button3); t4 = (Button) this.findViewById(R.id.button4); } // 数据库的操作 public void optionuser(View v) { switch (v.getId()) { case R.id.button1:// 添加数据 database = demo.getWritableDatabase(); //获得写数据的对象 //判断是否可以写数据等操作 if (database == null) { Toast.makeText(this, "不能添加数据", Toast.LENGTH_SHORT).show(); } else { // 第一个方式 String sql = "insert into user values(null,'12345','长沙')"; database.execSQL(sql); // 第二种方式 // 参数一:表名 // 参数二:null // 参数三:使用ContentValues赋值 // ContentValues values = new ContentValues(); // values.put("userphone", "123"); // values.put("username", "value"); // // database.insert("user", null, values); selectuser(); } break; case R.id.button2:// 删除 database = demo.getWritableDatabase(); if (database == null) { Toast.makeText(this, "不能删除数据数据", Toast.LENGTH_SHORT).show(); } else { // //第一种方式 // String sql ="delete from user where _id=?"; // String[] str= {"1"}; // database.execSQL(sql, str); // 第二种方式 // 参数一:表名 // 参数二:条件 // 参数三:条件的值 String whereClause = "_id=?"; String[] whereArgs = { "2" }; database.delete("user", whereClause, whereArgs); } selectuser(); break; case R.id.button3:// 修改 database = demo.getWritableDatabase(); if (database == null) { Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show(); } else { // 第一种方式 // String sql="update user set username='武汉' where _id=6"; // database.execSQL(sql); // 参数一:表名 // 参数二:更新的值 // 参数三:?的字段名 // 参数四:?字段名的值 ContentValues values = new ContentValues(); values.put("username", "北京"); String whereClause = "_id=?"; String[] whereArgs = { "5" }; database.update("user", values, whereClause, whereArgs); } selectuser(); break; case R.id.button4:// 查询 selectuser(); break; } } // 查询 public void selectuser() { SQLiteDatabase database2 = demo.getReadableDatabase(); // // 第一种方式 // String sql = "select * from user order by _id desc"; // Cursor c = database2.rawQuery(sql, null); // StringBuffer buffer = new StringBuffer(); // while (c.moveToNext()) { // int id = c.getInt(c.getColumnIndex("_id")); // String phone = c.getString(c.getColumnIndex("userphone")); // String name = c.getString(c.getColumnIndex("username")); // buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n"); // } // v1.setText(buffer); //第二种方式 //参数一:表名 //查询数据会返回一个游标对象,遍历游标对象就得到值 Cursor c=database2.query("user", null, null, null, null, null, null); StringBuffer buffer = new StringBuffer(); while (c.moveToNext()) { int id = c.getInt(c.getColumnIndex("_id")); String phone = c.getString(c.getColumnIndex("userphone")); String name = c.getString(c.getColumnIndex("username")); buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n"); } v1.setText(buffer); } }
分析:
增删改;需要判断数据库的表是否可以进行写的操作;
database = demo.getWritableDatabase();
if (database == null) {
Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();
}