zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/kyxyes/p/2891824.html
Copyright © 2011-2022 走看看