• 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。

  • 相关阅读:
    ORM是什么?
    mysql 杂谈
    IO model之IO多路复用的触发方式
    IO model之select poll epoll IO多路复用介绍
    IO model
    事件驱动模型介绍
    函数
    商品程序
    随机生成密码
    import radom 和import string
  • 原文地址:https://www.cnblogs.com/kyxyes/p/2891824.html
Copyright © 2020-2023  润新知