Android中怎么获取系统时间并存入数据库

Android中怎么获取系统时间并存入数据库,第1张

数据库中的文件的话,要adb shell进去查看数据库有没有该字段。存储卡上的文件的话,java中没有获取文件创建事件的接口。

一、 从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写)

String res = ""

try{

InputStream in = getResources().openRawResource(R.raw.bbi)

//在\Test\res\raw\bbi.txt,

int length = in.available()

byte [] buffer = new byte[length]

in.read(buffer)

//res = EncodingUtils.getString(buffer, "UTF-8")

//res = EncodingUtils.getString(buffer, "UNICODE")

res = EncodingUtils.getString(buffer, "BIG5")

//依bbi.txt的编码类型选择合适的编码,如果不调整会乱码

in.close()

}catch(Exception e){

e.printStackTrace()

}

myTextView.setText(res)//把得到的内容显示在TextView上

二、 从asset中获取文件并读取数据(资源文件只能读不能写)

String fileName = "yan.txt"//文件名字

String res=""

try{

InputStream in = getResources().getAssets().open(fileName)

// \Test\assets\yan.txt这里有这样的文件存在

int length = in.available()

byte [] buffer = new byte[length]

in.read(buffer)

res = EncodingUtils.getString(buffer, "UTF-8")

}catch(Exception e){

e.printStackTrace()

}

三、 从sdcard中去读文件,首先要把文件通过\android-sdk-windows\tools\adb.exe把本地计算机上的文件copy到sdcard上去,adb.exe push e:/Y.txt /sdcard/, 不可以用adb.exe push e:\Y.txt \sdcard\ 同样: 把仿真器上的文件copy到本地计算机上用: adb pull ./data/data/com.tt/files/Test.txt e:/

String fileName = "/sdcard/Y.txt"

//也可以用String fileName = "mnt/sdcard/Y.txt"

String res=""

try{

FileInputStream fin = new FileInputStream(fileName)

//FileInputStream fin = openFileInput(fileName)

//用这个就不行了,必须用FileInputStream

int length = fin.available()

byte [] buffer = new byte[length]

fin.read(buffer)

res = EncodingUtils.getString(buffer, "UTF-8")

fin.close()

}catch(Exception e){

e.printStackTrace()

}

myTextView.setText(res)

SQLite 因其小巧轻便被安卓系统广泛采用,当然在 *** 作小数据量时,差异并不明显;但当 SQLite 在 *** 作略大一点的数据时就显得力不存心了,这时的 CRUD *** 作对移动存储设备的性能有着极大的要求,另外用户体验的良好性也对 SQLite 的性能优化提出了要求。那么,当我们在 *** 作大数据量时如何对 SQLite 进行优化呢?正确的 *** 作是:开启事务。下面我们通过采用不同的方式向数据库中插入 10000 条数据来进行比较以体现开启事务对 SQLite 性能提升方面所做出的贡献。首先看一张截图来进行一个感性的认识:

源码及安装文件下载方式一:SQLiteDataBase.zip

从上图中我们会很清晰的看到通过普通方式插入 10000 条数据和开启事务插入 10000 条数据之间的差异,整整差了 83 秒。下面我们来看测试代码:

package cn.sunzn.sqlitedatabase

import android.app.Activity

import android.content.ContentValues

import android.database.sqlite.SQLiteDatabase

import android.os.Bundle

import android.os.Handler

import android.os.Message

import android.view.Menu

import android.view.View

import android.widget.EditText

public class MainActivity extends Activity {

protected static final int SUCCESS_INSERT_TO_DB_ONE = 1

protected static final int SUCCESS_INSERT_TO_DB_TWO = 2

private EditText et_usedtime1

private EditText et_usedtime2

Handler handler = new Handler() {

public void handleMessage(Message msg) {

super.handleMessage(msg)

switch (msg.what) {

case SUCCESS_INSERT_TO_DB_ONE:

Integer usetime_one = (Integer) msg.obj

et_usedtime1.setText("插入10000条数据耗时:" + usetime_one / 1000 + "秒")

break

case SUCCESS_INSERT_TO_DB_TWO:

Integer usetime_two = (Integer) msg.obj

et_usedtime2.setText("插入10000条数据耗时:" + usetime_two / 1000 + "秒")

break

default:

break

}

}

}

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

et_usedtime1 = (EditText) findViewById(R.id.et_usedtime1)

et_usedtime2 = (EditText) findViewById(R.id.et_usedtime2)

}

/**

* 1. 普通方式插入数据库 10000 条数据

*/

public void insert1(View view) {

MySQLiteOpenHelper openHelper = new MySQLiteOpenHelper(getApplicationContext())

final SQLiteDatabase database = openHelper.getWritableDatabase()

if (database.isOpen()) {

new Thread() {

public void run() {

long start = System.currentTimeMillis()

for (int i = 0i <10000i++) {

ContentValues values = new ContentValues()

values.put("name", "tom:" + i)

database.insert("person", "_id", values)

}

database.close()

long end = System.currentTimeMillis()

int usetime_one = (int) (end - start)

Message message = new Message()

message.what = SUCCESS_INSERT_TO_DB_ONE

message.obj = usetime_one

handler.sendMessage(message)

}

}.start()

}

}

/**

* 2. 开启事务插入数据库 10000 条数据

*/

public void insert2(View view) {

MySQLiteOpenHelper openHelper = new MySQLiteOpenHelper(getApplicationContext())

final SQLiteDatabase database = openHelper.getWritableDatabase()

if (database.isOpen()) {

new Thread() {

public void run() {

long start = System.currentTimeMillis()

database.beginTransaction()

for (int i = 0i <10000i++) {

ContentValues values = new ContentValues()

values.put("name", "tom:" + i)

database.insert("person", "_id", values)

}

database.setTransactionSuccessful()

database.endTransaction()

database.close()

long end = System.currentTimeMillis()

int usetime_two = (int) (end - start)

Message message = new Message()

message.what = SUCCESS_INSERT_TO_DB_TWO

message.obj = usetime_two

handler.sendMessage(message)

}

}.start()

}

}

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.activity_main, menu)

return true

}

}

为什么只是开启了一个事务就会有这么大的差距呢?很简单,SQLite 缺省为每个 *** 作开启了一个事务,那么测试代码循环插入 10000 次开启了 10000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显式开启事务后为什么如此快的原因。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9926564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存