SQLite的增删改查
2015-12-08 21:25 blog园 阅读(202) 评论(0) 收藏 举报个人编程习惯,通常需要5个类:
1.实体类:Person.java
2.助手类:DBOpenHelper.java(继承SQLiteOpenHelper)
3.抽象类:SQLOperate.java(封装了对数据库的操作)
4.实现类:SQLOperateImpl.java(实现抽象类SQLOperate.java)
5.测试类:Test.java(继承AndroidTestCase)
1.实体类People.java
package com.domain; public class People { private String name; private int birthday; private int stuid; public int getStuid() { return stuid; } public void setStuid(int stuid) { this.stuid = stuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getBirthday() { return birthday; } public void setBirthday(int birthday) { this.birthday = birthday; } }
2.助手类
package com.example.sqlitedao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DBOpenHelper extends SQLiteOpenHelper{ private static String DATABASENAME="grove.db"; private static final int VERSION=1; private static final String TABLENAME="student"; public static final String FLAG="MySQLiteOpenHelper"; Context context; public DBOpenHelper(Context context) { super(context, DATABASENAME, null, VERSION); this.context=context; } @Override public void onCreate(SQLiteDatabase db) { String sql="create table "+TABLENAME+"(stuid integer primary key,name varchar(20) not null,birthday date not null)"; db.execSQL(sql); Log.i(FLAG,"表格创建成功!"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
3.抽象类
package com.example.sqlitedao; import java.util.List; import java.util.Map; import com.domain.People; /** * * @author 增删改查 * */ public interface SQLOperate { public void insert(People p); public void update(People p); public void delete(int stuid); //public void query(People p); public void query(List<People> list); }
4.实现类
package com.example.sqlitedao; import java.util.HashMap; import java.util.List; import java.util.Map; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.domain.People; public class SQLOperateImpl implements SQLOperate{ private static final String TABLENAME="student"; private SQLiteDatabase db=null; public SQLOperateImpl(SQLiteDatabase db) { this.db=db; } @Override public void insert(People p) { Object []args={p.getName(),p.getBirthday(),p.getStuid()}; String sql="insert into "+TABLENAME+" (name,birthday,stuid) values(?,?,?)"; this.db.execSQL(sql,args); this.db.close(); } @Override public void update(People p) { Object []args={p.getName(),p.getBirthday(),p.getStuid()}; String sql="update "+TABLENAME+" set name=?,birthday=? where stuid=?"; this.db.execSQL(sql,args); this.db.close(); } @Override public void query(List<People> list) { Cursor c=db.rawQuery("select * from student", null); while(c.moveToNext()){ // Map<String,Object> map=new HashMap<String,Object>(); // map.put("stuid",c.getInt(c.getColumnIndex("stuid"))); // map.put("name",c.getString(c.getColumnIndex("name")));//根据列名获取内容 // map.put("birthday",c.getString(c.getColumnIndex("birthday"))); People p=new People(); p.setStuid(c.getInt(c.getColumnIndex("stuid"))); p.setName(c.getString(c.getColumnIndex("name"))); p.setBirthday(c.getInt(c.getColumnIndex("birthday"))); list.add(p); } } @Override public void delete(int stuid ) { Object []args={stuid}; String sql="delete from "+TABLENAME+" where stuid=?"; this.db.execSQL(sql,args); this.db.close(); } }
5.测试类
当需要创建或打开一个数据库并获得数据库对象时,首先根据指定的文件名创建一个辅助对象,然后调用该对象的getWritableDatabase 或 getReadableDatabase方法 获得SQLiteDatabase 对象。
SQLiteDatabase db = myHelper.getWritableDatabase();
SQLiteDatabase db = myHelper.getReadableDatabase();
一般情况下两者返回情况都是相同的,唯一的区别是:在数据库仅开放只读权限或磁盘已满时,getReadableDatabase只会返回一个只读的数据库对象。
package com.example.sqlitetest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.domain.People;
import com.example.sqlitedao.DBOpenHelper;
import com.example.sqlitedao.SQLOperateImpl;
import android.os.Bundle;
import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
SQLOperateImpl sqlOperateImpl=null;
DBOpenHelper dbopenhelper=new DBOpenHelper(this);
private List< People> list=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button query_btn=(Button) findViewById(R.id.query_btn);
Button insert_btn=(Button) findViewById(R.id.insert_btn);
//查询
query_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sqlOperateImpl=new SQLOperateImpl(dbopenhelper.getWritableDatabase());
List<People> list = new ArrayList<People>();
sqlOperateImpl.query(list);
for(int i=0;i<list.size();i++){
System.err.println(list.get(i).getName()+list.get(i).getBirthday()+list.get(i).getStuid());
}
//Log.i("name", p.getName());
}
});
//插入数据
insert_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sqlOperateImpl=new SQLOperateImpl(dbopenhelper.getWritableDatabase());
People p=new People();
p.setName("wgf1");p.setBirthday(1992);p.setStuid(1);
sqlOperateImpl.insert(p);
Log.i("insert", "插入成功");
}
});
}
//删除
public void drop_btn(View v){
try {
sqlOperateImpl.delete(1);
} catch (Exception e) {
// TODO: handle exception
}
}
public void update_btn(View v){
People p=new People();
p.setName("更新后的wgf1");p.setBirthday(1992);p.setStuid(1);
sqlOperateImpl.update(p);
//Log.i("name", p.getName());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
6.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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/insert_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入" android:onClick="insert_btn" /> <Button android:id="@+id/query_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询" android:onClick="query_btn" /> <Button android:id="@+id/drop_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="删除" android:onClick="drop_btn" /> <Button android:id="@+id/drop_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更新" android:onClick="update_btn" /> </LinearLayout>
浙公网安备 33010602011771号