SQLite数据库存储数据使用

package com.example.tyxiong.myapplication;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

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

/* * * Android的数据存储.前面用到PreferencesActivity存储参数设置...shared_文件. * 少数据可用SharedPreferences File来存储;数据量大用SQL,固然手机不是服务器. * * SharedPreferences File SD卡 SQLiteDatabase * * SharedPreferences:文件存储位置在data/data/<包>.share_.xml key-value对 * 1 SharePreferences,负责读取其内数据3方法; * 2 Editor,SharedPreferences内部接口,负责向其内写数据,4方法(putxxx()/clear()/remove()/commit()) * * 使用步骤:4步 * 1SharedPreferences对象,Context方法getSharedPreferences(name,mode) 获取指定文件名 对象,3模式(private/../..) * 2Editor对象, SharedPreferences对象 edit()方法. * 3Editor对象 写数据. * 4SharedPreferences读. * *File存储. java提供了完整的IO流体系.各类流.字节流/字符流/节点流/处理流/转换流/... * * Context有2方法 openFileOutput()4模式(private/append/....)/openFileInput()---文件流.为两方法仅能打开该context应用程序文件夹文件.. * Context有4方法访问该程序文件夹. 获取根下指定子目录/根下全部文件/删除根下指定文件/根绝对路径 * 使用步骤4: * 1 Context的openFileOutput(指定模式4种)方法得到指定文件名对应文件的outStream( * 2 可包装成打印流)写入数据. 写完关闭流. * 3 Context的openFileInput()方法得到文件的输入流, * 4 可包装成处理流(字符处理流)读行),读出数据,关闭流(顶端流.) * * 读写SD卡文件: SD卡扩展了手机的存储能力. 使用分为4步: * 1 AndroidManifest.xml中添加权限MOUNT_UNMOUNT_FILESYSTEMS(加入删除文件); WRITE_EXTERNAL_STORAGE(写SD卡) * 2 判断是否存在SD卡且有读写权限 Environment.getExternalStorageStage().equals(Environment.MEDIA_MOUNTED) * 3 Environment.getExternalStorageDirectory();得到Sd卡目录, * 4 获取指定文件流入/流出流进行数据操做...new FileOutputStream() (没法用openFile...那只针对应用程序路径文件) * 存取数据能够用RandomAccessFile...更方便. * * * SQLite数据库.:轻量级数据库,底部只一个数据库文件. * SQLiteDatabase:表明数据库链接.其有4个静态方法用于获取指定文件对应的数据库链接对象.openOrCreate() * SQL语句分3类: * DDL(数据库定义语句) 4关键字 create(建表)/drop/alert/truncate * DML(数据库操做语句) 3关键字 insert(插入记录)/delete/update * 查询语句 1 select * * 使用4步骤: * 1 openOrCreate()获取指定文件数据库链接对象.. * 2 SQLiteDatabase对象6方法,execSQL():能够执行任何SQL语句(通常是DDL/DML由于没返回值嘛) rawQuery():执行SQL查询语句. * 4个insert(3参数)/delete(3参数)/update(4参数)/query(参数太多用rawQuery()吧) * 3 有查询语句要处理结果集Cursor(可移动记录指针6方法move/next/previous/first/last/),注意用simpleCursorAdapter包装Cursor时,用_id主键列名 * 4 关闭数据库链接. close() * * SQLite3 :数据库操做工具,位于平台工具下, 将数据库文件导出到本地 sqlite3 ../fileXxx.db3启动数据库. * * SQLite有5个数据类型,null,int,real(浮点),text文本,blob(大二进制) * 可将任何类型数据存入到任何类型字段中. * 建表时列名后的数据类型可省略. * 例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数. * * 占位符 ?通配符 %多个字符 _单个字符 * * 事务:4个方法 beginTransaction()/inTransaction()/setTransactionSuccessful()/endTransaction() * 判断是否提交事务/回滚事务若调用了setTransactionSucessful()就提交. * * SQLiteOpenHelper类,管理数据库的建立和更新.5个方法onCreate()/onUpdate()/getReadableDatabase()/getWriteableDatabase()/close() * onCreate()首次建立数据库时回调方法,方法里可建新表. * onUpdate()当数据库版本更新时回调 * getReadableDatabase()读写方式打开文件对应数据库链接对象(SQLiteDatabase) * getWriteableDatabase()写方式..... * close()关闭全部数据库链接. * * 使用步骤3步: * 1 继承SQLiteOpenHelper类,重写onCreate()方法(内建表),重写ouUpdate()方法 * 2 调用getReadableDatabase()获取数据库链接对象. * 3 数据库对象执行SQL语句.. * 4 close()关闭数据库链接. * DDL create table <表名>(列名1 列类型 主键列/限定,列名2 类型...); * DML insert into table<表名>(列名,) values(值) /value(值1,null,值2); * 查询语句 select * from table<表名> where cause; * * *手势Gesture 1连续的触摸屏点造成趋势,为它们提供了监听. 2造成形状,可添加为手势保存还可识别手势. * 手势检测2步: * 1 new GestureDetector()/须要传入OnGestureListener * 监听器有(6方法2按下onDown()/onShowPress() /1拖动OnFling() /1滚动OnScroll()/1长按onLongPress()/1轻击(onSingleTapup())) * 2 重写Activity的onTouchEvent()方法,将该Activity上的触摸事件交给GestureDetector处理 * * 增长手势: GestureLibrary手势库 GestureLibraries手势库工具类(从不一样路径获取手势库) GestureOverlayView绘制手势组件 * GestureLibrary有7方法,1addGesture()增长手势 2删除手势 2查询手势 1识别手势Recognise() 1保存手势save() * GestureLibraries4方法 从不一样路径获取手势库. * GestureOverlayView 绘制手势的组件(xml中加组件全包名)3个监听器 开始绘制/正在绘制/完成绘制 使用3步: 1 GestureLibraries 经过fromFile..()方法获取手势库对象. * 2 为GestureOverLayView组件,添加绘制完成监听 * 3 绘制完成,调用GestureLibrary的addGesture() save()添加手势并保存. * * 识别手势:手势库有方法recognise() * * 自动朗读TTS(Text To Speech) 使用4步: 1 new TextToSpeech()对象,须要一个监听器参数(监听TextToSpeech对象初始化状态,实现ini方法,初始完对象回调) 2 设置语言(不支持中文) setLanguage() 如Locale.UK 3 speak()方法朗读 有模式新朗读/追加 4 shutdown()关闭TextToSpeech * * *如下是SQLite应用, openOrCreate()... * */
public class MainActivity extends Activity {
    private final String MY_FILE = "/myFile1.db3";
    File storageDirectory;
    String CREATE_TABLE = "create table my_table(_id integer primary key,my_name ,my_id)";
    String INSERT = "insert into my_table values(null,?,?)";
    String SELECT = "select * from my_table";
    SQLiteDatabase sqLiteDatabase = null;
    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.list);

    }


    public void write(View view) throws FileNotFoundException {


        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            storageDirectory = Environment.getExternalStorageDirectory();

            try {
                sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(storageDirectory.getCanonicalPath() + MY_FILE, null);
                sqLiteDatabase.execSQL(CREATE_TABLE);
                sqLiteDatabase.execSQL(INSERT, new String[]{"tuyaxiong", "1001"});
                sqLiteDatabase.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SQLiteException e) {
                sqLiteDatabase.execSQL(INSERT, new String[]{"tuyaxiong", "1001"});
            }

        }

    }

    public void read(View view) {


        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            storageDirectory = Environment.getExternalStorageDirectory();

            try {
                sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(storageDirectory
                        .getCanonicalPath() + MY_FILE, null);
                //sqLiteDatabase.execSQL(CREATE_TABLE);
                // sqLiteDatabase.execSQL(INSERT);
                Cursor cursor = sqLiteDatabase.rawQuery(SELECT, null);
                SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout
                        .layout_adapter, cursor, new String[]{"_id", "my_name", "my_id"},
                        new int[]{R.id._id, R.id.my_name, R.id.my_id}
                );
                list.setAdapter(cursorAdapter);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        sqLiteDatabase.close();
    }
}