zoukankan      html  css  js  c++  java
  • Android数据的几种存储方式和方法

    sharedPreference入门

    1.保存信息

    SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);

    Editor editor = sp.edit();

    editor.putString("username", username);

    editor.putString("password", password);

    editor.commit();

    2.获取信息

    SharedPreferences sp = this.getSharedPreferences("config", Context.MODE_PRIVATE);

    sp.getString("username", "");

    sp.getString("password", "");

    ?

    xml文件的序列化

    ?

    public void save(View view) {

     XmlSerializer xmlSerializer = Xml.newSerializer();

    File file = new File(Environment.getExternalStorageDirectory(),

    "config.xml");

    try {

    FileOutputStream fos = new FileOutputStream(file);

    xmlSerializer. setOutput(fos, "utf-8");

    xmlSerializer. startDocument("utf-8", true);

    xmlSerializer. startTag(null, "smss");

    for (SmsInfo info : infos) {

    xmlSerializer.startTag(null, "sms");

    xmlSerializer. attribute(null, "id", info.getId() + "");

    xmlSerializer.startTag(null, "date");

    xmlSerializer. text(info.getDate() + "");

    xmlSerializer.endTag(null, "date");

    xmlSerializer.startTag(null, "address");

    xmlSerializer.text(info.getAddress());

    xmlSerializer.endTag(null, "address");

    xmlSerializer.startTag(null, "body");

    xmlSerializer.text(info.getBody());

    xmlSerializer.endTag(null, "body");

    xmlSerializer.endTag(null, "sms");

    }

    xmlSerializer.endTag(null, "smss");

    xmlSerializer.endDocument();

    fos.close();

    Toast.makeText(this, "保存成功", 0).show();

    } catch (Exception e) {

    e.printStackTrace();

    Toast.makeText(this, "保存失败", 0).show();

    }

    }

    采用pull解析xml文件

    1.准备一个xml文件,将其拷贝到工程的src目录下

    <?xml version="1.0" encoding="utf-8"?>

    <infos>

    <city id="1">

    <temp>20'C/30'C</temp>

    <weather>多云</weather>

    <wind>南风3级</wind>

    <name>上海</name>

    <pm>200</pm>

    </city>

    <city id="2">

    <temp>20'C/35'C</temp>

    <weather>暴雨</weather>

    <wind>南风10级</wind>

    <name>北京</name>

    <pm>800</pm>

    </city>

    <city id="3">

    <temp>0'C/10'C</temp>

    <weather>暴雪</weather>

    <wind>北风32级</wind>

    <name>广州</name>

    <pm>200</pm>

    </city>

    </infos>

    2.核心代码

    public static ArrayList<WeatherInfo> getWeatherInfo(InputStream is)

    throws Exception {

    ArrayList<WeatherInfo> infos = null;

    WeatherInfo info = null;

     // XmlPullParser parser = Xml.newPullParser();

    XmlPullParserFactory fac = XmlPullParserFactory.newInstance();

    XmlPullParser parser = fac.newPullParser();

    parser.setInput(is, "utf-8");

    int type = parser.getEventType();

    while (type != XmlPullParser.END_DOCUMENT) {

    switch (type) {

    case XmlPullParser.START_TAG:

    if ("infos".equals(parser.getName())) {

    infos = new ArrayList<WeatherInfo>();

    } else if ("city".equals(parser.getName())) {

    info = new WeatherInfo();

    info.setId(Integer.parseInt(parser.getAttributeValue(0)));

    } else if ("temp".equals(parser.getName())) {

    info.setTemp(parser.nextText());

    } else if ("weather".equals(parser.getName())) {

    info.setWeather(parser.nextText());

    } else if ("wind".equals(parser.getName())) {

    info.setWind(parser.nextText());

    } else if ("name".equals(parser.getName())) {

    info.setName(parser.nextText());

    } else if ("pm".equals(parser.getName())) {

    info.setPm(parser.nextText());

    }

    break;

    case XmlPullParser.END_TAG:

    if ("city".equals(parser.getName())) {

    infos.add(info);

    info = null;

    }

    break;

    }

    type = parser.next();

    }

    return infos;

    }

    3.调用

    public class WeatherActivity extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    TextView tv_info = (TextView) this.findViewById(R.id.vt_info);

    try {

    ArrayList<WeatherInfo> infos = WeaterService

    .getWeatherInfo(WeatherActivity.class.getClassLoader()

    .getResourceAsStream("weather.xml"));

    StringBuffer sb = new StringBuffer();

    for (WeatherInfo info : infos) {

    sb.append(info);

    sb.append("\n");

    }

    tv_info.setText(sb.toString());

    } catch (Exception e) {

    e.printStackTrace();

    Toast.makeText(this, "xml解析失败", 0).show();

    }

    }

    }

    android下创建一个sqlite数据库

    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

    private static final String DBFILENAME = "person.db";

    private static int db_version = 2;

    public PersonSQLiteOpenHelper(Context context) {

    super(context, DBFILENAME, null, db_version);

    }

    /**

     * 当数据库第一次创建时调用

     */

    @Override

    public void onCreate(SQLiteDatabase db) {

    String sql = "create table person(id integer primary key autoincrement,name varchar(20),number varchar(20))";

    db.execSQL(sql);

    }

    /**

     * 当数据库的版本号发生增加的时候调用

     */

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    System.out.println("数据库更改!");

    String sql = "alter table person add account varchar(20)";

    db.execSQL(sql);

    }

    }

    sql语句实现数据库的增删改查

    1.添加条目

    public void add(String name, String number) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    db.execSQL("insert into person(name,number) values(?,?)", new Object[] {

    name, number });

    db.close();

    }

    2.查找条目是否存在

    public boolean find(String name) {

    SQLiteDatabase db = this.helper.getReadableDatabase();

    Cursor cursor = db.rawQuery("select * from person where name=?",

    new String[] { name });

    boolean result = cursor.moveToNext();

    cursor.close();

    db.close();

    return result;

    }

    3.更新条目

    public void update(String name, String newNumber) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    db.execSQL("update person set number=? where name=?", new Object[] {

    newNumber, name });

    db.close();

    }

    4.删除条目

    public void delete(String name) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    db.execSQL("delete from person where name=?", new Object[] { name });

    db.close();

    }

    5.查找所有条目

    public ArrayList<Person> findAll() {

    SQLiteDatabase db = this.helper.getReadableDatabase();

    ArrayList<Person> persons = new ArrayList<Person>();

    Cursor cursor = db.rawQuery("select * from person", null);

    while (cursor.moveToNext()) {

    int id = cursor.getInt(cursor.getColumnIndex("id"));

    String name = cursor.getString(cursor.getColumnIndex("name"));

    String number = cursor.getString(cursor.getColumnIndex("number"));

    Person p = new Person(id, name, number);

    persons.add(p);

    }

    cursor.close();

    db.close();

    return persons;

    }

    系统api实现数据库的增删改查&sqlite3工具的使用

    1.添加条目

    public long add(String name, String number) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put("name", name);

    values.put("number", number);

    long id = db.insert("person", null, values);

    db.close();

    return id;

    }

    2.查找条目是否存在

    public boolean find(String name) {

    SQLiteDatabase db = this.helper.getReadableDatabase();

    Cursor cursor = db.query("person", null, "name=?",

    new String[] { name }, null, null, null);

    boolean result = cursor.moveToNext();

    cursor.close();

    db.close();

    return result;

    }

    3.更新条目

    public int update(String name, String newNumber) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put("number", newNumber);

    int number = db.update("person", values, "name=?",

    new String[] { name });

    db.close();

    return number;

    }

    4.删除条目

    public int delete(String name) {

    SQLiteDatabase db = this.helper.getWritableDatabase();

    // db.execSQL("delete from person where name=?", new Object[] { name });

    int number = db.delete("person", "name=?", new String[] { name });

    db.close();

    return number;

    }

    5.查找所有条目

    public ArrayList<Person> findAll() {

    SQLiteDatabase db = this.helper.getReadableDatabase();

    ArrayList<Person> persons = new ArrayList<Person>();

    Cursor cursor = db.query("person", null, null, null, null, null, null);

    while (cursor.moveToNext()) {

    int id = cursor.getInt(cursor.getColumnIndex("id"));

    String name = cursor.getString(cursor.getColumnIndex("name"));

    String number = cursor.getString(cursor.getColumnIndex("number"));

    Person p = new Person(id, name, number);

    persons.add(p);

    }

    cursor.close();

    db.close();

    return persons;

    }

    数据库的事务

    public void testTransaction() {

    PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());

    SQLiteDatabase db = helper.getWritableDatabase();

     db.beginTransaction();

    try {

    db.execSQL(

    "update person set account = account + 1000 where name=?",

    new Object[] { "tom" });

    int i = 1 / 0;

    db.execSQL(

    "update person set account = account - 1000 where name=?",

    new Object[] { "jerry" });

     db.setTransactionSuccessful();

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

     db.endTransaction();

                            db.close(); 

                    }

    }

        

  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/freenovo/p/4469838.html
Copyright © 2011-2022 走看看