持久化技术

文件 

写文件 

为了防止突然关闭的页面导致没有保存的情况:

public class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)

    }
    override fun onDestroy() {
        super.onDestroy()
        val editText:EditText = findViewById(R.id.editText)
        val inputText = editText.text.toString()
        save(inputText)
    }

    private fun save(inputText: String) {
        try {
            val output = openFileOutput("data", Context.MODE_PRIVATE)
            val writer = BufferedWriter(OutputStreamWriter(output))
            writer.use {
                it.write(inputText)
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
}

读文件

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val inputText = load()
        if (inputText.isNotEmpty()) {
            val editText:EditText = findViewById(R.id.editText)
            editText.setText(inputText)
            editText.setSelection(inputText.length)
            Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show()
        }
    }

    private fun load(): String {
        val content = StringBuilder()
        try {
            val input = openFileInput("data")
            val reader = BufferedReader(InputStreamReader(input))
            reader.use {
                reader.forEachLine {
                    content.append(it)
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return content.toString()
    }

}

SharedPreferences(K-V)

写数据

class MainActivity : AppCompatActivity() {

    class MainActivity : AppCompatActivity() {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            saveButton.setOnClickListener {
                val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
                editor.putString("name", "Tom")
                editor.putInt("age", 28)
                editor.putBoolean("married", false)
                editor.apply()
            }
        }
    }
}

添加一个按钮,点击后将数据提交。

读数据

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        restoreButton.setOnClickListener {
            val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
            val name = prefs.getString("name", "")
            val age = prefs.getInt("age", 0)
            val married = prefs.getBoolean("married", false)
            Log.d("MainActivity", "name is $name")
            Log.d("MainActivity", "age is $age")
            Log.d("MainActivity", "married is $married")
        }
    }
} 

SQLite

建表

class MyDatabaseHelper(val context: Context, name: String, version: Int) :
    SQLiteOpenHelper(context, name, null, version) {

    private val createBook = "create table Book (" +
            " id integer primary key autoincrement," +
            "author text," +
            "price real," +
            "pages integer," +
            "name text)"

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL(createBook)
        Toast.makeText(context, "Create succeeded", Toast.LENGTH_SHORT).show()
    }
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    }
}
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 1)
        createDatabase.setOnClickListener {
            dbHelper.writableDatabase
        }
    }
}

MyDatabaseHelper继承自SQLiteOpenHelper,需要重写onCreate和onUpgrade方法。onUpgrade方法用于升级数据库。当传入的参数大于上一个版本的数据时就会调用。

添加数据

 class MainActivity : AppCompatActivity() { 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 2) 
        addData.setOnClickListener { 
            val db = dbHelper.writableDatabase 
            val values1 = ContentValues().apply { 
                
                put("name", "The Da Vinci Code") 
                put("author", "Dan Brown") 
                put("pages", 454) 
                put("price", 16.96) 
            } 
            db.insert("Book", null, values1)  
            val values2 = ContentValues().apply { 
                
                put("name", "The Lost Symbol") 
                put("author", "Dan Brown") 
                put("pages", 510) 
                put("price", 19.95) 
            } 
            db.insert("Book", null, values2)  
        } 
    } 
 
} 

修改数据

class MainActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 2) 
        ... 
        updateData.setOnClickListener { 
            val db = dbHelper.writableDatabase 
            val values = ContentValues() 
            values.put("price", 10.99) 
            db.update("Book", values, "name = ?", arrayOf("The Da Vinci Code")) 
        } 
    } 
 
} 

update后面两个参数是表示where name = The Da Vinci Code

删除元素

 class MainActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 2) 
        deleteData.setOnClickListener { 
            val db = dbHelper.writableDatabase 
            db.delete("Book", "pages > ?", arrayOf("500")) 
        } 
    } 
 
} 

查询数据

 class MainActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 2) 
        queryData.setOnClickListener { 
            val db = dbHelper.writableDatabase 
            val cursor = db.query("Book", null, null, null, null, null, null) 
            if (cursor.moveToFirst()) { 
                do {                   
                    val name = cursor.getString(cursor.getColumnIndex("name")) 
                    val author = cursor.getString(cursor.getColumnIndex("author")) 
                    val pages = cursor.getInt(cursor.getColumnIndex("pages")) 
                    val price = cursor.getDouble(cursor.getColumnIndex("price")) 
                    Log.d("MainActivity", "book name is $name") 
                    Log.d("MainActivity", "book author is $author") 
                    Log.d("MainActivity", "book pages is $pages") 
                    Log.d("MainActivity", "book price is $price") 
                } while (cursor.moveToNext()) 
            } 
            cursor.close() 
        } 
    } 
} 

使用SQL操作数据库

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值