android与数据库

来源:互联网 发布:南京诺博源软件科技 编辑:程序博客网 时间:2024/04/29 05:39
public class SqliteHelper extends SQLiteOpenHelper {//String name 这个参数是表示数据库的名字public SqliteHelper(Context context, String name) {super(context, name,null, 1);}@Overridepublic void onCreate(SQLiteDatabase arg0) {/*当数据库创建时,onCreate方法只会被调用一次。当我们重新安装这个程序时,不卸载数据,同样只会创建一次。,在这里面我们一般新建一个表*/  System.out.println("create  a database");arg0.execSQL("create table user(id int,name varchar(20))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {/* * 这个函数用来更新数据库的版本,其实用到得比较少。 */}}public class MainActivity extends Activity {private Button createBtn,insertBtn,updateBtn,queryBtn;private String table="user";private  String  whereClause="id=?";private  String[] whereArgs=new String[]{"1"};    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        createBtn=(Button)findViewById(R.id.createbtn);        insertBtn=(Button)findViewById(R.id.insertbtn);        updateBtn=(Button)findViewById(R.id.updatebtn);        queryBtn=(Button)findViewById(R.id.querybtn);        createBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {SqliteHelper sqliteHelper=new SqliteHelper(MainActivity.this, "test_db");SQLiteDatabase db=sqliteHelper.getWritableDatabase();}});上述是创建一个数据库,可以看出,使用助手类的作用是比较方便的返回数据库的实例。               insertBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {SqliteHelper sqliteHelper=new SqliteHelper(MainActivity.this, "test_db");SQLiteDatabase db=sqliteHelper.getWritableDatabase();ContentValues  values=new ContentValues();values.put("id", 1);values.put("name","xujian");db.insert("user", null, values);System.out.println("insert a data is sucess!");}});  注意看test_db,助手类正是通过这种不同数据库的名字来区分的。  updateBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {SqliteHelper sqliteHelper=new SqliteHelper(MainActivity.this, "test_db");SQLiteDatabase db=sqliteHelper.getWritableDatabase();ContentValues  values=new ContentValues();values.put("name","xujianxing");//最后面的两个参数构成了一个完整的where字句。//但是,我们们需要注意这样一个问题:可以直接whereClause变成”id=1”.后面那个参数传成空。// whereClause="id=?"与 String[] whereArgs=new String[]{"1"},但有时候我们可能需要的条件不止一个,这个时候需要and来连接:”id=?and name=?”.db.update(table, values, whereClause, whereArgs);System.out.println("update a data is sucess!");}});  queryBtn.setOnClickListener(new OnClickListener() {public void onClick(View v) {SqliteHelper sqliteHelper=new SqliteHelper(MainActivity.this, "test_db");SQLiteDatabase db=sqliteHelper.getWritableDatabase();////第二个参数是要查询的列名//第三四个参数加起来相当于一个where字句。具体的就是与id=?new String[]{"1"}相当于where id=1,如果为空的话,就表示全查了。注意仍然需要占位符。关于这些参数,看文档还是比较好理解的。Cursor cursor=db.query(table, new String[]{"id","name"}, null, null, null, null, null);while(cursor.moveToNext()){String name=cursor.getString(cursor.getColumnIndex("id"));System.out.println(name);}System.out.println("query a data is sucess!");}});             }}

1.在sqlite中,如果不声明主键的话,可以存在两条或者多条一模一样的元组。

2.我们为每一次操作都声明了一个助手类,也可以只声明一个助手类。

3. 事实上,sql语句是可以直接执行的,使用db.execSQLString sql)方法,但不能执行查询语句。

4每一次操作应是一个单独的Contenvalues对象。

5合理的使用getWritableDatabase()和getReadableDatabase()方法。节约开销。

6其实版本号根本不会有影响,比如版本号变成了2,在查询中版本号唯一是不会有影响的。

7sqlite中,行是完全可以重复的,比如不断点击insert键,插入的行是完全相同的,但我们在查询时,

并不影响,他会把所有的行全部显示出来。数据库不允许重复:多次按下create键不会起任何作用。

8.程序退出后数据照样在那里!除非你选择清除数据。



原创粉丝点击