Android的数据存储及数据库操作

Android数据存取

一、   文件内容存取,不可追加

文件存放在/data/data/<package name>/files目录下

1、 向文件中写内容:

getFileDir()获得应用程序的文件路径,创建文件输出流

FileOutputStreamout = new FileOutputStream(getFileDir()+“/”+FILE_NAME);

创建字节打印流

PrintStream ps =new PrintStream(out);

将内容转化为字节形式,写入文件

Ps.write(content.getBytes());

2、 向程序中写内容,输出到控制台

getFileDir()获得应用程序的文件路径创建文件输入流

FileInputStream in = new FileInputStream(getFileDir()+“/”+FILE_NAME);

创建一个字节数组

Byte[] bt = new Byte[];

创建一个可变长度的字符串数组

StringBuildetr sb = new StringBuilder();

定义读取长度

Int len=-1

利用循环读取内容

While((len = in.read(bt)) != -1)

{

    //向字符串数组中不断添加数据

    Sb.append();

}

 //写入按钮的监听
    public void write(View view)
    {
        //获取客户端输入
        String content = mEt_writeData.getText().toString();
        try {
            /**
             * 创建
             * getFileDir:获取应用程序数据文件的路径
             * "/":表示在某个路径名下级目录
             */
            FileOutputStream out  = new FileOutputStream(getFilesDir()+"/"+FILE_NAME);
            PrintStream ps = new PrintStream(out);
            ps.write(content.getBytes());
            ps.close();
            out.close();
            ToastUtil.showToast(this,"写入成功");
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtil.showToast(this,"写入失败");
        }
    }
    //读取按钮的监听
    public void read(View view)
    {
        try {
            //创建文件你入流
            FileInputStream fis = new FileInputStream(getFilesDir()+"/"+FILE_NAME);
            //创建BYTE数组
            byte[] by = new byte[1024];
            //定义读取长度
            int len = -1;
            //定义可变长字符串,作用:存放字符串
            StringBuilder sb = new StringBuilder();
            //循环读取
            while ((len = fis.read(by))!=-1)
            {
                sb.append(new String(by,0,len));
            }
            ToastUtil.showToast(this,"读取成功");
            //拿到读到的字符串
            String content = sb.toString();
            //显示在界面上
            mEt_readData.setText(content);
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtil.showToast(this,"读取失败");
        }

    }


二、   文件内容存取,可追加

文件存放在/data/data/<package name>/files目录下

1、向文件中写入内容,可追加

OpenFileOutput(FILE_NAME,MODE_APPEND),函数用于向文件中输入内容,有两个参数,第一个参数是文件名,不需要包含文件路径。如果文件名不存在,会自动创建。

第二个参数是文件写入模式,一共有四种;

1、 MODE_PRIVATE该文件只允许该应用程序读取,会覆盖原来内容

2、 MODE_APPEND:该文件采取追加的模式

3、 MODE_WORLD_READABLE:允许其他应用程序读该文件

4、 MODE_WORLD_WRITEABLE:允许其他应用程序读取该文件

创建文件输出流

FileOutputStreamout = new this.openFileOutput(FILE_NAME,MODE_APPEND);

读取界面输入的内容

Out.write(content.getBytes());

3、 将文件中的内容输入到程序

FileInputStream in = openFileInput(FILE_NAME);

对输入流进行包装,可以每次读取一行

BufferedReader br = new BufferedReader(newInputStreamReader(in));

String lien = null;

StringBuffer sb = new StringBuffer();

While( (line = br.readLine() ) != null )

{

   Sb.append(line);

}

 //写入按钮的监听
    public void write(View view)
    {
        String content = mEt_writeData.getText().toString();
        try {
            /**
             * 创建文件输出流
             * FILE_NAME:文件名
             * MODE_APPEND:文件写入模式
             * 1、MODE_PRIVATE该文件只允许该应用程序读取
             * 2、MODE_APPEND:该文件采取追加的模式
             * 3、MODE_WORLD_READABLE:允许其他应用程序读该文件
             * 4、MODE_WORLD_WRITEABLE:允许其他应用程序读取该文件
             * Android4.2之后,不推荐3.4两种方式
             */
            FileOutputStream fos = this.openFileOutput(FILE_NAME,MODE_APPEND);
            fos.write(content.getBytes());
            fos.flush();
            fos.close();
            ToastUtil.showToast(this,"写入成功");
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtil.showToast(this,"写入失败");
        }
    }
    //读取按钮的监听
    public void read(View view)
    {
        FileInputStream fis = null;
        try {
            fis = openFileInput(FILE_NAME);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) !=null)
            {
                sb.append(line);
            }
            mEt_readData.setText(sb.toString());
            ToastUtil.showToast(this,"读取成功");
        } catch (Exception e) {
            e.printStackTrace();
            ToastUtil.showToast(this,"读取失败");
        }

    }


三、   在SD卡上的文件存取

文件存放早SD卡上

1、将数据输出到SD卡的文件中

       判断当前手机是否有SD卡,并判断应用程序是否有读写SD卡的权限

       if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

       获取SD卡的目录

       FilesdDir = Environment.getExternalStorageDirectory();

       获取读写的文件

       FiletargetFile = new File(sdDir.getAbsolutePath()+FILE_NAME);

       创建文件流对象,,第一个参数是文件,第二个参数是操作权限

       RandomAccessFileraf = new RandomAccessFile(targetFile,”rw”);

       记录位置,

       Raf.seek(targetFile.length());

    写数据到文件

Raf.write(content.getBytes());

2、将数据从文件中写入到程序中

    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

    获取SD卡的目录

       FilesdDir = Environment.getExternalStorageDirectory();

//获得文件路径

StringtargetFile = sdDir.getExternalStorageDirectory();

       创建文件流对象

FileInputStreamin = new FileInputStream(targetFile);

将字节流转化为字符流

BufferedReaderbr = new BufferedReader(new InputStreamReader(in));

String line=null;

StringBuffer sb= new StringBuffer();

While ((line = in.readLine()!=null)

{

   Sb.append(line)

}

//写入按钮的监听
    public void write(View view)
    {
        String content = mEt_writeData.getText().toString();
        //判断当前手机是否有SDK,并且判断应用程序是否有读取SDK的权限
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            //获取SDK目录
            File sdDir = Environment.getExternalStorageDirectory();
            //获取写入的文件
            File targetFile = new File(sdDir.getAbsolutePath()+FILE_NAME);
            //String targetFile = sdDir.getAbsolutePath()+FILE_NAME;
            try {
                //输出内容到SDK目录下指定的文件中
                //FileOutputStream fos = new FileOutputStream(sdDir+FILE_NAME);
                RandomAccessFile raf = new RandomAccessFile(targetFile,"rw");
                //查找目标文件长度,方便下次读写
                raf.seek(targetFile.length());
                //开始向文件中输入内容
                raf.write(content.getBytes());
                //关闭流
                raf.close();
                ToastUtil.showToast(this,"写入成功");
            } catch (Exception e) {
                e.printStackTrace();
                ToastUtil.showToast(this,"写入失败");
            }
        }else{
            ToastUtil.showToast(this,"内存卡不存在");
        }


    }
    //读取按钮的监听
    public void read(View view)
    {
        //FileInputStream fis = null;
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        {
            File sdDir = Environment.getExternalStorageDirectory();
            String targetFile = sdDir.getAbsolutePath()+FILE_NAME;
            try {
                FileInputStream fis = new FileInputStream(targetFile);
                //将字节流转换为字符流
                BufferedReader buff = new BufferedReader(new InputStreamReader(fis));
                String line = null;
                //可变长字符串
                StringBuffer sb = new StringBuffer();
                while ((line = buff.readLine()) != null)
                {
                    sb.append(line);
                }
                buff.close();
                mEt_readData.setText(sb.toString());
                ToastUtil.showToast(this,"读取成功");
            } catch (Exception e) {
                e.printStackTrace();
                ToastUtil.showToast(this,"读取失败");
            }
        }else{
            ToastUtil.showToast(this,"内存卡不存在");
        }


    }

 

 

 

四、   Android配置参数存取SharedPreferences

SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下

1、 将数据从程序中输出到文件中

实例化SharedPrefefences对象

两个参数:第一个:文件名,第二个:文件创建模式

SharedPreferences sp =getSharedPreferences(“userinfo”,Context.MODE_APPEND);

实例化编辑器对象

SharedPreferences.Editor editor = sp.edit();

写数据

Editor.putString(“content”,”name”);

提交数据

Editor.commit();

2、 从文件中将数据写入程序中

两个参数:第一个Key值,第二个参数:如果取不到Key值对应的value值,显示的默认值

String content = sp.getString(“content”,””);

 

//写入按钮的监听
    public void write(View view)
    {
        String content = mEt_writeData.getText().toString();

        //创建一个可以写入数据的对象
        SharedPreferences.Editor editor = sp.edit();
        //写入数据
        editor.putString("content",content);
        editor.putString("username","briup");
        editor.putBoolean("isLogin",false);
        //提交数据,提交到程序内存的同时提交到磁盘上,先提交到内存再提交到磁盘上
        editor.commit();
    }
    //读取按钮的监听
    public void read(View view)
    {
        /**
         * 第一个参数:是Key值
         * 第二个参数:如果取不到Key值对应得Value值,显示默认的Value值
         */
        String content = sp.getString("content","");
        String contents = sp.getString("contents","========");
        boolean isLogin = sp.getBoolean("isLogin",false);
        mEt_readData.setText(content+" "+contents+"  "+isLogin);

    }

五、   Android数据库操作之sql语句操作

1、 声明一个数据库对象

SQLiteDatabase db;

2、 实例化数据库对象,第一个参数:文件路径名,绝对路径,第二个参数:工厂类对象,值一般为空

Db =SQLiteDatabase.openOrCreateDatabase(getFilesDir()+”/my.db”,null);

3、 SQL操作语句

建表语句

Db.execSQL(“create table tbl_user(_id integer primary keyautoincrement,name text,passwd varchar(10))”);

插入数据

Db.execSQL(“insert into tbl_user(name,passwd)values(?,?)”,new String[]{“张三”,”123”});

查询数据

Db.execSQL(“select * from tbl_user where _id=?”,newString[] {“22”});

修改语句

Db.execSQL(“update tbl_user set name=’lisi’ where_id=?”,new String[]{“22”});

删除语句

Db.execSQL(“delect from tbl_user where _id=?”,new String[]{“22”});

 

public class FourthActivity extends AppCompatActivity {
    private SQLiteDatabase db;//申明一个数据库对象

    private final String FILE_NAME = "briup2.txt";
    private EditText mEt_writeData,mEt_readData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEt_readData = (EditText) findViewById(R.id.main_et_readdata);
        mEt_writeData = (EditText) findViewById(R.id.main_et_writedata);
        /**
         * 第一个参数:文件路径名,绝对路径
         * 第二个参数:Cursor工厂类对象,与ResultSet类似,
         * 值一般为空,表示采用系统默认的工厂类
         */
        db = SQLiteDatabase.openOrCreateDatabase(getFilesDir()+"/my.db",null);
        ToastUtil.showToast(this,"数据库创建成功");
        /**
         * Sqlite数据类型;null  integer real(浮点型)  text(文本类型)
         */
        String sql = "create table tbl_user(_id integer primary key autoincrement,name text,passwd varchar(10))";
        //可以执行任何SQL语句,不返回结果集
       // //执行没有占位符的SQL语句
        ToastUtil.showToast(this,"表创建成功");
       // db.execSQL("insert into tbl_user(name,passwd) values(?,?)",new String[]{"张三","123"});//执行有占位符的SQL语句
        ToastUtil.showToast(this,"插入数据成功");
        //执行查询语句,带有占位符
        queryData();
        db.execSQL("update tbl_user set name='lisi' where _id=?",new String []{"22"});
        queryData();
        //db.execSQL("delect from tbl_user where id=?",new String[]{"2"});
    }

    private void queryData() {
        Cursor cursor = db.rawQuery("select * from tbl_user where _id=?",new String[] {"22"});
        while (cursor.moveToNext())
        {
            int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String passwd = cursor.getString(cursor.getColumnIndex("passwd"));
            Log.i("FourthActivity",id+ "  "+name + " // "+passwd);
        }
    }


    //写入按钮的监听
    public void write(View view)
    {
        String content = mEt_writeData.getText().toString();

    }
    //读取按钮的监听
    public void read(View view)
    {
        FileInputStream fis = null;


    }
}

 

 

 

六、   用Android的API完成数据库的增删改查

1、声明一个数据库对象

SQLiteDatabase db;

2、实例化数据库对象

Db = SQLiteDatabase.openOrCreateDatabase(getFileDir()+”/my.db”,null);

3、创建表

db.execSQL(“create table tbl_user2 (_id integer primary keyautoincrement,name text,passwd varchar(10))”);

4、插入数据

ContentValues是一种键值存储机制,只能存放基本数据类型

ContentValues values = new ContentValues();

Values.put(“name”,”zhangsan”);

Values.put(“passwd”,”1213”);

第一个参数:表名,第二个参数:字段值,第三个参数:ContentValues对象

Db.insert(“tbl_user2”,null,values);

5、查询数据

/**
 *第一个参数;是否查询相同的值
 * 第二个参数:表名
 * 第三个参数:需要查询的字段名 new String[] {"name","passwd"}
 * 第四个参数:查询条件
 * 第五个参数:占位符的值
 * 第六个参数:分组查询
 * 第七个参数:组函数的过滤条件
 * 第八个参数:按照指定的顺序显示数据
 * 第九个参数:分页处理
 */

       Cursor cursor =db.query(false,”tbl_user2”,new String[]{“name”,passed},”_id=?”,

New String[]{“1”},null,null,”_idasc,null”);

while (cursor.moveToNext())
{
    //int id =cursor.getInt(cursor.getColumnIndex("_id"));
    String name =cursor.getString(cursor.getColumnIndex("name"));
    String passwd =cursor.getString(cursor.getColumnIndex("passwd"));
    Log.i("Fourth2Activity","  "+name+"  "+passwd);
}

6、修改数据

  /**
 * 第一个参数:表名
 * 第二个参数:contentvalues的值
 * 第三个参数:查询条件
 * 第四个参数:查询占位符的值
 */
ContentValues values = new ContentValues();
values.put("name","briup2");
values.put("passwd","456");
db.update("tbl_user2",values,"_id=?",newString[]{"1"});

   7、删除数据

      db.delete("tbl_user","_id=?",newString[]{"1"});

 

public class Fourth2Activity extends AppCompatActivity {
    private SQLiteDatabase db;//申明一个数据库对象
    private String sql;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**
         * 第一个参数:文件路径名,绝对路径
         * 第二个参数:Cursor工厂类对象,与ResultSet类似,
         * 值一般为空,表示采用系统默认的工厂类
         */
        db = SQLiteDatabase.openOrCreateDatabase(getFilesDir()+"/my.db",null);
        ToastUtil.showToast(this,"数据库创建成功");
        //建表
        //sql = "create table tbl_user2 (_id integer primary key autoincrement,name text,passwd varchar(10))";
       // db.execSQL(sql);
        //ToastUtil.showToast(this,"建表成功");
        //添加数据
        addData();
        //ToastUtil.showToast(this,"添加成功");
        //查询数据
        queryData();

        //修改数据
        updataData();

        queryData();
        //删除数据
        //delectData();
        ToastUtil.showToast(this,"删除成功");

    }
    //删除数据
    private void delectData() {
        /**
         * 第一个参数:表名
         * 第二个参数:查询条件
         * 第三个参数:占位符的值
         */
        db.delete("tbl_user","_id=?",new String[]{"1"});
    }

    //修改数据
    private void updataData() {
        /**
         * 第一个参数:表名
         * 第二个参数:contentvalues的值
         * 第三个参数:查询条件
         * 第四个参数:查询占位符的值
         */
        ContentValues values = new ContentValues();
        values.put("name","briup2");
        values.put("passwd","456");
        db.update("tbl_user2",values,"_id=?",new String[]{"1"});
        ToastUtil.showToast(this,"修改成功");
    }

    //查询数据
    private void queryData() {
        /**
         *第一个参数;是否查询相同的值
         * 第二个参数:表名
         * 第三个参数:需要查询的字段名 new String[] {"name","passwd"}
         * 第四个参数:查询条件
         * 第五个参数:占位符的值
         * 第六个参数:分组查询
         * 第七个参数:组函数的过滤条件
         * 第八个参数:按照指定的顺序显示数据
         * 第九个参数:分页处理
         *
         */
        Cursor cursor = db.query(false,"tbl_user2",new String[]{"name","passwd"},"_id=?",new String[]{"1"},null,null,"_id asc",null);
        //ToastUtil.showToast(this,"查询成功");
        while (cursor.moveToNext())
        {
            //int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String passwd = cursor.getString(cursor.getColumnIndex("passwd"));
            System.out.println(name+"sdf");
            Log.i("Fourth2Activity", "  "+name+"  "+passwd);
            ToastUtil.showToast(this,name);
            ToastUtil.showToast(this,"查询成功");
        }
    }

    //添加数据
    private void addData() {
        /**
         * 第一个参数:表的名字
         * 第二个参数:字段的值永远为空值
         * 第三个参数;Contentvalues对象
         */
        ContentValues values = new ContentValues();
        values.put("name","briup");
        values.put("passwd","123");
        db.insert("tbl_user2",null,values);
        ToastUtil.showToast(this,"插入成功");
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值