Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库

布局文件main.xml的代码:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <TextView android:id="@+id/tv_title"  
       android:layout_width="fill_parent"  android:layout_height="wrap_content"   
       android:text="Hello, Welcome to Andy's blog!" android:textSize="16sp"/>  
      
    <Button android:id="@+id/newTable" android:layout_width="fill_parent"    
        android:layout_height="wrap_content" android:text="1.新建数据表"/>    
    <Button android:id="@+id/addOne" android:layout_width="fill_parent"    
        android:layout_height="wrap_content" android:text="2.插入一条记录"/>    
    <Button android:id="@+id/query" android:layout_width="fill_parent"     
        android:layout_height="wrap_content" android:text="3.查询数据库"/>    
    <Button android:id="@+id/editOne" android:layout_width="fill_parent"    
        android:layout_height="wrap_content" android:text="4.修改一条记录"/>    
    <Button android:id="@+id/deleteOne" android:layout_width="fill_parent"    
        android:layout_height="wrap_content" android:text="5.删除一条记录"/>    
    <Button android:id="@+id/deleteTable" android:layout_width="fill_parent"    
        android:layout_height="wrap_content" android:text="6.删除数据表"/>    
          
    <TextView android:id="@+id/tv_result"  
       android:layout_width="fill_parent"  android:layout_height="wrap_content"   
       android:text="测试显示的结果" android:textSize="16sp"/>  
      
</LinearLayout>  

MainActivity.java代码:

package com.andyidea.sqlite;  
import java.io.File;  
import java.io.IOException;  
import android.app.Activity;  
import android.content.ContentValues;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
import android.widget.Toast;  
public class MainActivity extends Activity {  
    private Button btn_newTable,btn_addOne,btn_query,  
            btn_editOne,btn_deleteOne,btn_deleteTable;  
    private TextView tv;  
    private MySQLiteOpenHelper myOpenHelper;  
    private SQLiteDatabase sqlitedb;  
      
    //----以下两个成员变量是针对在SD卡中存储数据库文件使用----   
    //private File path = new File("/sdcard/dbfile"); //数据库文件目录  
    //private File f = new File("/sdcard/dbfile/AndyDemo.db"); //数据库文件  
      
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        initializeViews();  
          
        //实例化默认数据库辅助操作对象  
        myOpenHelper = new MySQLiteOpenHelper(this);  
          
        //----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件----  
        //if(!path.exists()){   //判断目录是否存在  
        //  path.mkdirs();    //创建目录  
        //}  
        //if(!f.exists()){      //判断文件是否存在  
        //  try{  
        //      f.createNewFile();  //创建文件  
        //  }catch(IOException e){  
        //      e.printStackTrace();  
        //  }  
        //}  
    }  
      
    /** 
     * 初始化UI界面 
     */  
    private void initializeViews(){  
        tv = (TextView)findViewById(R.id.tv_result);  
        btn_newTable = (Button)findViewById(R.id.newTable);  
        btn_addOne = (Button)findViewById(R.id.addOne);  
        btn_query = (Button)findViewById(R.id.query);  
        btn_editOne = (Button)findViewById(R.id.editOne);  
        btn_deleteOne = (Button)findViewById(R.id.deleteOne);  
        btn_deleteTable = (Button)findViewById(R.id.deleteTable);  
          
        btn_newTable.setOnClickListener(new ClickEvent());  
        btn_addOne.setOnClickListener(new ClickEvent());  
        btn_query.setOnClickListener(new ClickEvent());  
        btn_editOne.setOnClickListener(new ClickEvent());  
        btn_deleteOne.setOnClickListener(new ClickEvent());  
        btn_deleteTable.setOnClickListener(new ClickEvent());  
    }  
      
    class ClickEvent implements OnClickListener{  
        @Override  
        public void onClick(View v) {  
            try{  
                //[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的操作如下  
                sqlitedb = myOpenHelper.getWritableDatabase(); //实例化数据库  
                  
                //[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的操作如下  
                //sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);  
                  
                if(v == btn_newTable){   //1.新建数据表  
                    String TABLE_NAME = "andy";  
                    String ID = "id";  
                    String TEXT = "text";  
                    String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID    
                        + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT    
                        + " text );";  
                    sqlitedb.execSQL(str_sql2);  
                    tv.setText("新建数据表成功!");  
                      
                }else if(v == btn_addOne){  //2.插入一条记录  
                    //----第1种插入数据的方法----  
                    //ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称,  
                    //value值是字段的值。可以通过ContentValues的put方法把数据存放到  
                    //ContentValues对象中,然后把数据插入到相对应的数据表中。  
                    ContentValues cv = new ContentValues();  
                    cv.put(MySQLiteOpenHelper.TEXT, "新数据");  
                    sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);  
                    //db.insert(String table, String nullColumnHack, ContentValues values);方法解说  
                    //public long insert (String table, String nullColumnHack, ContentValues values)  
                    //该方法是向数据表中插入一条记录  
                    //[1]参数table:需要插入操作的表名  
                    //[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值,  
                    //   则默认使用null值传入。  
                    //[3]参数values:插入的数据  
                      
                    //----第2种插入数据的方法----  
                    // String INSERT_DATA =    
                    // "INSERT INTO andy (id,text) values (1, '第2种插入数据的方法')";    
                    // sqlitedb.execSQL(INSERT_DATA);  
                      
                    tv.setText("添加新数据成功!");  
                      
                }else if(v == btn_query){   //3.查询数据库  
                    Cursor cur = sqlitedb.rawQuery("SELECT * FROM "+MySQLiteOpenHelper.TABLE_NAME, null);  
                    if(cur != null){  
                        String temp = "";  
                        int i = 0;  
                        while(cur.moveToNext()){  
                            temp += cur.getString(0);  //0代表数据列的第一列,即id  
                            temp += cur.getString(1);  //1代表数据列的第二列,即text  
                            i++;  
                            temp += "/n";    //定义显示数据的格式,一行一个数据  
                        }  
                        tv.setText(temp);  
                          
                    }  
                }else if(v == btn_editOne){  //4.修改一条记录  
                    //----第1种方式修改数据----  
                    ContentValues cv = new ContentValues();  
                    cv.put(MySQLiteOpenHelper.TEXT, "更新后的数据");  
                    sqlitedb.update("andy", cv, "id " + "=" + Integer.toString(1), null);  
                    //[1]参数table:需要操作的表名  
                    //[2]参数values:ContentValues  
                    //[3]参数whereClause:更新的条件  
                    //[4]参数whereArgs:更新条件对应的值  
                      
                    //----第2种方式修改数据----  
                    // String UPDATA_DATA =    
                    // "UPDATE andy SET text='通过SQL语句来修改数据'  WHERE id=1";    
                    // sqlitedb.execSQL(UPDATA_DATA);    
                    tv.setText("修改数据成功!");  
                      
                }else if(v == btn_deleteOne){  //5.删除一条记录  
                    //----第1种方式删除数据----  
                    sqlitedb.delete("andy", MySQLiteOpenHelper.ID + "= 1", null);  
                    //public int delete(String table, String whereClause, String[] whereArgs)解说  
                    //[1]参数table:需要操作的表名  
                    //[2]参数whereClause:删除的条件  
                    //[3]参数whereArgs:删除条件对应的值  
                      
                    //----第2种方式删除数据----  
                    //String DELETE_DATA = "DELETE FROM andy WHERE id=1";   
                    //sqlitedb.execSQL(DELETE_DATA);  
                    tv.setText("删除数据成功!");  
                      
                }else if(v == btn_deleteTable){  //6.删除数据表  
                    sqlitedb.execSQL("DROP TABLE andy");  
                    tv.setText("删除数据表成功!");  
                      
                }  
            }catch(Exception e){  
                tv.setText("操作失败");  
            }finally{  
                sqlitedb.close();  
            }  
        }  
          
    }  
}  

MySQLiteOpenHelper辅助器类代码:

package com.andyidea.sqlite;  
import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteOpenHelper;  
import android.util.Log;  
/** 
 * 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要  
 * 一个构造函数和重写两个方法。 
 * @author Andy 
 */  
public class MySQLiteOpenHelper extends SQLiteOpenHelper {  
    public static final String DATABASE_NAME = "AndyDemo.db"; //数据库名  
    public static final int VERSION = 1;   //版本号  
    public static final String TABLE_NAME = "andy";  //表名  
    public static final String ID = "id";  
    public static final String TEXT = "text";  
      
    public MySQLiteOpenHelper(Context context) {  
        super(context, DATABASE_NAME, null, VERSION);  
    }  
    /** 
     * 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表 
     */  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        //创建数据表的操作  
        String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID    
        + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );";    
          
        db.execSQL(strSQL);  
    }  
    /** 
     * 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 
     * 删除数据表,然后再创建新的数据表操作。 
     */  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        Log.e("AndyDemo", "onUpgrade");    
    }  
}  

当我们需要把数据库创建在SDCard中时,需要在AndroidManifest.xml文件中添加对SDCard操作的权限,如下:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值