Android SQLite数据库操作

来源:互联网 发布:手机遗像制作软件 编辑:程序博客网 时间:2024/04/30 08:37

数据库操作类:SQLiteDatabase

在Android系统之中,一个android.database,sqlite.SQLiteDatebase类的实例都代表了一个SQLite数据库的操作,通过SQLiteDatabase类可以执行SQL语句,可以完成对数据表的增加,修改,删除,查询等操作,在此类之中定义了基本的数据库执行SQL语句的操作方法以及一些操作的模式常量。

1.MyDatabaseHelper类

public class MyDatabaseHelper extends SQLiteOpenHelper{

 private static final String DATABASENAME = "wei.db";
 private static final int DATABASEVERSION = 1;
 private static final String TABLENAME = "mytable";
 public MyDatabaseHelper(Context context) {
  super(context, DATABASENAME, null, DATABASEVERSION);
  // TODO Auto-generated constructor stub
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  String sql = "CREATETABLE" + DATABASENAME + "("
          +"id INTEGER PRIMARY KAY,"
    +"NAME VERCHAR(50) NOT NULL,"
          +"birthday DATA NOT NULL"+")";
  db.execSQL(sql);  //执行SQL
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  String sql = "DROP TABLE IF EXISTS" + TABLENAME;
  db.execSQL(sql);
  this.onCreate(db);
 }

}

这样一个数据库的辅助操作类就完成了,那么完成之后,就需要在Activity中调用此类对象的方法。

一个是getReadableDatabase()一个是getWriteableDatabase()

2.MySQLiteDemo类

public class MySQLiteDemo extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my_sqlite_demo);
  SQLiteOpenHelper helper = new MyDatabaseHelper(this);
  helper.getWritableDatabase();
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_my_sqlite_demo, menu);
  return true;
 }

}
现在应该可以去的链接了,如果没有出现错误,,则应该从指定位置上进行查找,如果数据库不存在,那么肯定会调用onCreate方法创建表,如果现在数据库存在了,但是版本号改了,则先将数据表删除掉,然后在创建新的数据表,如果没有任何变化,不执行任何操作。

android  使用SQLite数据库并完成数据库的更新操作

在操作数据库的时候可以直接在Android之中使用shell命令。
Android中的shell命令是依靠adb取得,而且可以取得一个正在运行的模拟器的shell。但是要注意的是,在AndroidSDK2.3之前的版本ADB可以直接使用,但是现在的版本不太一样,除了tools文件夹之中的内容之外,还需要配置宇哥platform-tools文件夹,表示平台工具。

配置完成之后就可以通过下面的命令完成。
1,进入到shell    adb shell
2,可以使用ls命令列出所有的内容;
3,进入到sqlite数据库成成的文件夹之中;
4,进入到目录之后就可以利用sqlite命令找到wei.db;
5,可以输入“help命令,查看所有可用的命令;
6,可以输入schema命令,查看所有的表;
7,既然已经找到了数据表,那么下面可以执行SQL语句

向mytable表中增加数据;INSERT INTO mytable(name,birthday)VALUES(“爱德华”,1999-09-09)

查看mytable的数据,SELECT id,name,birthday  FROM mytable;
修改记录:UPDATE mytable SET birthday='1999-09-08' WHERE id = 1;
删除数据:DELETE FROM mytable WHERE ID = 1;

这些操作都属于标准的SQL语句,可是现在如果要使用数据库肯定不能让用户自己输入这些命令,需要通过程序进行包装,模仿DAO的思路,下面单独做一个操作类。操作mytable表

 MytableOperate类代码

 public class MytableOperate {

 private static final String TABLENAME = "mytable";//表示要操作数据表的名称

 private SQLiteDatabase db = null;
 public MytableOperate(SQLiteDatabase db){
  this.db = db;
 }
 
 public void insert(String name,String birthday){
  String sql = "INSERT INTO"+TABLENAME + "(name,birthday)VALUES('" + name + "','" + birthday + "')";
  this.db.execSQL(sql);
  this.db.close();
  }
 public void update(int id,String name,String birthday){
  
  String sql = "UPDATE"+TABLENAME + "SET name= " + name+"',birthday = '" + birthday + "'WHERE id = '"+id;
  this.db.execSQL(sql);
  this.db.close();
 }
 
 public void delete(int id){
  String sql = "DELETE FROM"+ TABLENAME + "WHERE id = " + id;
  this.db.execSQL(sql);
  this.db.close();
 }
}

本程序中是完成了数据表的更新操作,下面为了模拟出是前台,定义一个布局文件,里面定义三个按钮;

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MySQLiteDemo" >

    <Button
        android:id="@+id/insertbtn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="增加数据"/>
    <Button
        android:id="@+id/updatebtn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="更新数据"/>
    <Button
        android:id="@+id/deletebtn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="删除数据"/>

</LinearLayout>

 MySQLiteDemo 执行增删改的操作 

public class MySQLiteDemo extends Activity {
 private Button insertBut = null ;
 private Button updateBut = null ;
 private Button deleteBut = null ;
 private SQLiteOpenHelper helper = null ;
 private MytabOperate mtab = null ;
 private static int count = 0 ;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  super.setContentView(R.layout.main);
  this.helper = new MyDatabaseHelper(this);
  this.insertBut = (Button) super.findViewById(R.id.insertBut) ;
  this.updateBut = (Button) super.findViewById(R.id.updateBut) ;
  this.deleteBut = (Button) super.findViewById(R.id.deleteBut) ;
  this.insertBut.setOnClickListener(new InsertOnClickListenerImpl()) ;
  this.updateBut.setOnClickListener(new UpdateOnClickListenerImpl()) ;
  this.deleteBut.setOnClickListener(new DeleteOnClickListenerImpl()) ;
 }
 private class InsertOnClickListenerImpl implements OnClickListener{
  @Override
  public void onClick(View v) {
   MySQLiteDemo.this.mtab = new MytabOperate(
     MySQLiteDemo.this.helper.getWritableDatabase());
   MySQLiteDemo.this.mtab.insert("李兴华" + count++, "1979-08-12") ;
  }
  
 }
 private class UpdateOnClickListenerImpl implements OnClickListener{
  @Override
  public void onClick(View v) {
   MySQLiteDemo.this.mtab = new MytabOperate(
     MySQLiteDemo.this.helper.getWritableDatabase());
   MySQLiteDemo.this.mtab.update(3, "MLDN", "1981-06-27");
  }
  
 }
 private class DeleteOnClickListenerImpl implements OnClickListener{
  @Override
  public void onClick(View v) {
   MySQLiteDemo.this.mtab = new MytabOperate(
     MySQLiteDemo.this.helper.getWritableDatabase());
   MySQLiteDemo.this.mtab.delete(3) ;
  }
  
 }
}

0 0