0116sqlite

 adb 是一个调试工具 ,通过这个调试工具可以通过命令行来访问数据库 android访问数据库必须要使用SQLiteOpenHelper这个类,否则访问起来比较复杂 里面提供了一系列的方法 当需要操作SQlite这个数据库的时候,首先必须要有SQLiteOpenHelper这个类的对象,由于这个类是一个抽象类,必须写一个类来继承它,继承它后拥有getReadableDatebase()和getWritableDatebase()这两个函数,这两个函数都是得到的对象都是SQLiteDatebase类的对象

复写的方法onCreat() ,onUpgrade() 该函数式在第一次创建数据库的时候执行,实际上是在第一次得到SQliteDatebase对象的时候才会调用这个方法,意思就是仅仅生成DatebaseHelper(继承SQliteOpenHelper)的对象是无法执行这两个函数,只有调用getReadableDatebase 和getWritableDatebase时候才会调用这些方法

adb是一种android提供的调试工具,可以以linux下调式应用程序

ContentValues 插入键值对,其中键是列名,值是希望插入到这一列的值

onUpgrade() 当你的应用要更新升级的时候,同时新版本中数据库表结构或内容有变化,这时upgrade方法会根据你的数据库版本号来判断数据库是否升级,你可以在upgrade方法中执行数据库的变化。

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 注意最后一个参数version,它表示当前数据库的版本,当版本不同时,会自动调用onUpgrade()方法去更新。 比如:第一次调用SQLiteOpenHelper类的子类时version=1,第二次调用SQLiteOpenHelper类的子类时version=2,则在第二次时会自动调用onUpgrade()方法去更新。

 

 

SQLiteActivity.java

  1 package com.example.mars_sqlite;
  2 
  3 import com.example.mars_sqlite.db.DatebaseHelper;
  4 
  5 import android.R.string;
  6 import android.os.Bundle;
  7 import android.app.Activity;
  8 import android.content.ContentValues;
  9 import android.database.Cursor;
 10 import android.database.sqlite.SQLiteDatabase;
 11 import android.view.Menu;
 12 import android.view.View;
 13 import android.view.View.OnClickListener;
 14 import android.widget.Button;
 15 
 16 public class SQLiteActivity extends Activity {
 17 
 18     private Button createButton;
 19     private Button upgradeButton;
 20     private Button insertButton;
 21     private Button updateRecordButton;
 22     private Button queryButton;
 23     @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         setContentView(R.layout.sqlite);
 27         createButton=(Button)findViewById(R.id.createButton);
 28         upgradeButton=(Button)findViewById(R.id.upgradeButton);
 29         insertButton=(Button)findViewById(R.id.insertButton);
 30         updateRecordButton=(Button)findViewById(R.id.updateRecordButton);
 31         queryButton=(Button)findViewById(R.id.queryButton);
 32         createButton.setOnClickListener(new createListener());
 33         upgradeButton.setOnClickListener(new upgradeListener());
 34         insertButton.setOnClickListener(new insertListener());
 35         updateRecordButton.setOnClickListener(new updateRecordListener());
 36         queryButton.setOnClickListener(new queryListener());
 37     }
 38     //下面类创建数据库
 39     class createListener implements OnClickListener
 40     {
 41 
 42         @Override
 43         public void onClick(View v) {
 44             // TODO Auto-generated method stub
 45             //创建数据库助手对象,第一参数表示和当前这个Activity绑定,数据库取名为mars_db_test,这个是真实的名字。db是代码操作的名字
 46             DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2");
 47             //只有调用了DatabaseHelper对象的getReadableDatabase()方法,
 48             //或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库
 49             SQLiteDatabase db=dbHelper.getReadableDatabase();//创建数据库对象db
 50             
 51 
 52         }
 53         
 54     }
 55 //SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
 56 //注意最后一个参数version,它表示当前数据库的版本,当版本不同时,会自动调用onUpgrade()方法去更新。
 57 //比如:第一次调用SQLiteOpenHelper类的子类时version=1,第二次调用
 58 //SQLiteOpenHelper类的子类时version=2,则在第二次时会自动调用onUpgrade()方法去更新。
 59     //调用2号版本可以执行增添修改等操作
 60     class upgradeListener implements OnClickListener
 61     {
 62 
 63         @Override
 64         public void onClick(View v) {
 65             // TODO Auto-generated method stub
 66             DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2",2);
 67             SQLiteDatabase db=dbHelper.getReadableDatabase();        
 68         }
 69         
 70     }
 71     class insertListener implements OnClickListener
 72     {
 73        //ContentValues 插入键值对,其中键是列名,值是希望插入到这一列的值
 74         @Override
 75         public void onClick(View v) {
 76             // TODO Auto-generated method stub
 77             ContentValues values=new ContentValues();
 78             values.put("id",1);//第一列
 79             values.put("name"," zhangsan");//第二列插入名字
 80             values.put("password",123);//第三列插入密码
 81             DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2",2);
 82             SQLiteDatabase db=dbHelper.getWritableDatabase();//因为要开始写数据了,所以调用getWritableDatabase()
 83             db.insert("user", null, values);//insert是不允许插入空行,不然隐式的插入null;
 84         }
 85         
 86     }
 87      class updateRecordListener implements OnClickListener
 88      {
 89 
 90         @Override
 91         public void onClick(View v) {
 92             // TODO Auto-generated method stub
 93             DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2",2);
 94             SQLiteDatabase db=dbHelper.getWritableDatabase();//创建可写数据库
 95             ContentValues values=new ContentValues();
 96             
 97             values.put("name", "zhangsanfeng");
 98             values.put("password", 456);
 99             db.update("user", values, "id=?", new String[]{"1"});
100             
101             
102         
103              //update(String table, ContentValues values, String whereClause, String[] whereArgs)
104 
105 
106              
107         }
108          
109      }
110      class queryListener implements OnClickListener
111      {
112 
113         @Override
114         public void onClick(View v) {
115             // TODO Auto-generated method stub
116             DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2",2);
117             SQLiteDatabase db=dbHelper.getWritableDatabase();//创建可写数据库
118             //d得到游标
119             Cursor cursor=db.query("user",new String[]{"id", "name","password"}, "id=?", new String[]{"1"} ,null, null,null);
120             while(cursor.moveToNext())
121             {
122                 int id =cursor.getInt(cursor.getColumnIndex("id"));
123                 String name =cursor.getString(cursor.getColumnIndex("name"));//得到编号,通过编号得到
124                 //getString()里面不是列名而是这一列在列里面的编号,是第几列 比如password是第3列,刚刚取的是第id=1的一行
125                 String password =cursor.getString(cursor.getColumnIndex("password"));//跟上列的编号,必须是第几列,再把这一列值取出来
126                 System.out.println(id);
127                 System.out.println("name is"+name);
128                 System.out.println("password is"+password);
129             }
130             
131         }
132          
133      }
134 
135 
136 
137 }


DatabaseHelper.java

 1 //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作
 2 //即通过数据库助手类,可以通过他的两个函数得到可读或者可写的数据库对象
 3 //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
 4 //自定义SQLiteOpenHelper,必需要实现onCreate(), onUpgrade(),可以选择实现onOpen。 
 5 package com.example.mars_sqlite.db;
 6 
 7 import android.content.Context;
 8 import android.database.sqlite.SQLiteDatabase;
 9 import android.database.sqlite.SQLiteDatabase.CursorFactory;
10 import android.database.sqlite.SQLiteOpenHelper;
11 //A helper class to manage database creation and version management.
12 
13 public class DatebaseHelper extends SQLiteOpenHelper
14 {
15 
16     public DatebaseHelper(Context context, String name, CursorFactory factory,
17             int version) {
18         super(context, name, factory, version);
19         // TODO Auto-generated constructor stub
20     }
21     
22     public DatebaseHelper(Context context,String name,int version)
23     
24     {
25         this(context ,name ,null, version);//调用上面四个参数的构造函数
26     }
27     public DatebaseHelper(Context context,String name )
28     {
29         this (context ,name ,1);//调用上面三个参数的构造函数
30     }
31     
32     //下面函数要创建实际上是在第一次得到SQliteDatebase对象的时候才会调用这个方法,
33     //意思就是仅仅生成DatebaseHelper(继承SQliteOpenHelper)的对象是无法执行这两个函数,
34     //只有调用getReadableDatebase 和getWritableDatebase时候才会调用这些方法
35     @Override
36     public void onCreate(SQLiteDatabase db) {
37         // TODO Auto-generated method stub
38         System.out.println("create a datebase");
39         //db.execSQL("create table user(id int,name verchar(20))");
40         db.execSQL("create table user(id int,name verchar(20),password int)");//数据库db执行数据库语句
41     }
42      //当更新这张表时候,要更改scheme version 即模式版本,不然无法更新
43     //Called when the database needs to be upgraded.
44     //The implementation should use this method to drop tables,
45     //add tables, or do anything else it needs to upgrade to the new schema version
46     @Override
47     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
48         // TODO Auto-generated method stub
49         System.out.println("onUpgrade a datebase");
50     }
51     }

sqlite.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button 
    android:id="@+id/createButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="create"
    />
<Button 
    android:id="@+id/upgradeButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="upgrade"
    />
<Button 
    android:id="@+id/insertButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="insert"
    />
<Button 
    android:id="@+id/updateRecordButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="updateRecord"
    />
<Button 
    android:id="@+id/queryButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="queryButton"
    />

</LinearLayout>

 

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html

1、首先打开android项目的调试模式,然后找到显示DDMS:

2、切换到DDMS,显示File Explorer窗口,找到/data/data/

 

使用 adb 命令访问

这里用 adb shell进入 相当于在linux下操作, 用到的命令有 ls ,ls -l,cd,sqlite3 关于linux命令可以参考博客

select * from user 表格的名字是user,而不是mars_db_test是数据库的名字

部分代码解释:

1, 一开始卡在更新数据操作的地方,执行更新数据按钮的时候一直报错,后来才搞明白,第一次创建时候数据库版本是1,执行upgradeListener后,数据库已经升级了,和原来版本为1的不是同一个数据库,所以在执行updataListener时候,也要执行如下代码

1 DatebaseHelper dbHelper=new DatebaseHelper(SQLiteActivity.this,"mars_db_test2",2);
2             SQLiteDatabase db=dbHelper.getReadableDatabase();        

必须表示为2,因为版本号只可以递增,不写就递减了,就会报错。

2,关于updateListener里的update()

 

 

关于SQLiteHelper抽象类  在DatabaseHelper.java中 类DatabaseHelper继承了它 必须复写onCreate()和 onUpgrade()方法  同时必须要完成构造函数,将 Activity和要创建的数据库名传入改助手类,相当于将  Activity和数据库绑定起来

在Activity中实例化助手类,然后通过创建助手类得到可读或者可写的数据库对象SQLiteDatabase db。

posted @ 2010-02-04 15:04  Kstyjobx!!  阅读(452)  评论(0编辑  收藏  举报