SDCARD db

package com.thunder.sd;

import java.io.File;
import java.io.IOException;

import android.R.bool;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SqliteSDActivity 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 String s;
    private File path; // 数据库文件目录
    private File f; // 数据库文件
    private boolean insert = false;
    Handler myhandler;
    /** 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);
        s = android.os.Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        f = new File(s + "/DBtest/AndyDemo.db");
         path= new File(s + "/DBtest");
        // ----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件----
        if (!path.exists()) { // 判断目录是否存在
            path.mkdirs(); // 创建目录
        }
        if (!f.exists()) { // 判断文件是否存在
            try {
                f.createNewFile(); // 创建文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        myhandler=new Handler(){
            public void handleMessage(android.os.Message msg) {
                if(msg.what==0){
                    
                }
            };
        };
    }

    /**
     * 初始化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_deleteOne.setVisibility(View.GONE);
        btn_deleteTable.setVisibility(View.GONE);
        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);
                    insert = true;
                    new Thread() {
                        public void run() {
                            while (insert) {
//                                Message msg=new Message();
//                                msg.what=0;
//                                myhandler.sendMessage(msg);
                                sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);
                                 ContentValues cv = new ContentValues();
                                 cv.put(MySQLiteOpenHelper.TEXT, "新数据");
                                 sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);
                                try {
                                    Thread.sleep(50);
                                } catch (InterruptedException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                            
                        };

                    }.start();
                    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"; //定义显示数据的格式,一行一个数据
                        // }
                        cur.moveToLast();
                        temp += cur.getString(0); //0代表数据列的第一列,即id
                        temp += cur.getString(1); //1代表数据列的第二列,即text
                        tv.setText("共"+cur.getString(0)+"条记录");
                    }
                } else if (v == btn_editOne) { // 4.修改一条记录
                    // ----第1种方式修改数据----
                    insert = false;
                    // [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);

                } 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();
            }
        }

    }

    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");
        }
    }
}

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

posted on 2013-03-05 11:02  _star  阅读(203)  评论(0)    收藏  举报

导航