[android]第一篇blog 关于android中加入外界的db文件进行数据库访问
前言
第一篇blog,ok最近做个android的app,想加入已经做好的db文件(自己是个初学者),摸索了很久,参照 了很多人的文章和代码,自己也做了一点,并且把其中的一些问题抛出来。
1,关于代码的想法。
主要是基于对《实现电子词典要解决的技术问题及初步的解答》这篇文章的一些构造,
然后结合了农民伯伯的文章《[Android]发布Sqlite数据库》,做出来的一个外加的sqlite的数据库进入的一个小代码。
1.1对于文件进行从res/raw中取出并且复制到data/中,我是初学者,这个文章也写给初学者看的,在eclipse选择ddms中的文件夹的内容中的data文件,数据库可以直接访问这个路径中的数据库文件,因此要有这个复制操作。res/raw中的文件肯定数据库不能直接访问这个路径,虽然没有尝试,但是要是可以的话为什么不之前几位文章中不提及呢。
1.2关于一开始想象第一篇文章中提到的复制到虚拟机的sdcard中的,但是后来不知道什么原因就没有成功,就按照农民伯伯文章中所提及的那篇英文博文进行复制到data文件中。
1.3本人处于初学者1个月的学习经历希望与各位能多多交流,还有很多不懂得地方,下面上代码,其他的都在注释中讲。
1 package qy.sqlite;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import android.app.Activity;
7 import android.database.Cursor;
8 import android.database.sqlite.SQLiteDatabase;
9 import android.os.Bundle;
10 import android.view.View;
11 import android.view.View.OnClickListener;
12 import android.widget.Button;
13 import android.widget.Toast;
14
15 public class sqlite_main extends Activity {
16 /** Called when the activity is first created. */
17 private Button mybutton;
18 private String databasepath="/data/data/qy.sqlite/databases/";
19 private String databasefn="qinyi.db3";//db 和bd3 有没有实质区别啊?
20 private SQLiteDatabase database;
21 private String sql="select name from uni where id=?";
22 @Override
23 public void onCreate(Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25 setContentView(R.layout.main);
26 mybutton=(Button)findViewById(R.id.mybutton);
27 mybutton.setOnClickListener(new myclicklistener());
28 database=openDatabase();
29 System.out.println("6");
30 }
31
32 private SQLiteDatabase openDatabase(){
33 try {
34 //获得li.db绝对路径
35 String DATABASEFN=databasepath+databasefn;
36 File dir = new File(databasepath);
37 // 如果/sdcard/li目录中存在,创建这个目录
38 if(!dir.exists())
39 System.out.println("1");
40 dir.mkdir();
41 // 如果在目录中不存在
42 // 文件,则从res\raw目录中复制这个文件到
43 //
44 if(!(new File(DATABASEFN)).exists()){
45 // 获得封装 文件的InputStream对象
46 InputStream is =getResources().openRawResource(R.raw.qinyi);
47 System.out.println("2");
48 FileOutputStream fos =new FileOutputStream(DATABASEFN);
49 System.out.println("2.1");
50 byte[] buffer = new byte[8192];//这里为什么是8192我不清楚我对java一知半解,不懂,是不是文件的大小啊
51 System.out.println("3");
52 int count =0;
53 // 开始复制db文件
54 while ((count=is.read(buffer))>0){
55 fos.write(buffer, 0, count);
56 System.out.println("4");
57 }
58 fos.close();
59 is.close();
60 }
61 // 打开 目录中的 db3文件
62 database = SQLiteDatabase.openOrCreateDatabase(DATABASEFN, null);//后面这里第一个参数是路径,我在这里没有搞懂就出错了一只无法获取数据库
63 System.out.println("5");
64 return database;
65 }
66 catch (Exception e){
67 System.out.println("WORLDbad");
68 }
69 return null;
70 }
71
72 class myclicklistener implements OnClickListener{
73 @Override
74 public void onClick(View v) {
75 // TODO Auto-generated method stub
76 String[] idnub={"1"};
77 Cursor mycursor=database.rawQuery(sql,idnub);
78 mycursor.moveToFirst();//从头遍历这个很重要。
79 String result=mycursor.getString(mycursor.getColumnIndex("name"));
80 Toast.makeText(sqlite_main.this, result,Toast.LENGTH_SHORT).show();
81 }
82 }
83 }
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import android.app.Activity;
7 import android.database.Cursor;
8 import android.database.sqlite.SQLiteDatabase;
9 import android.os.Bundle;
10 import android.view.View;
11 import android.view.View.OnClickListener;
12 import android.widget.Button;
13 import android.widget.Toast;
14
15 public class sqlite_main extends Activity {
16 /** Called when the activity is first created. */
17 private Button mybutton;
18 private String databasepath="/data/data/qy.sqlite/databases/";
19 private String databasefn="qinyi.db3";//db 和bd3 有没有实质区别啊?
20 private SQLiteDatabase database;
21 private String sql="select name from uni where id=?";
22 @Override
23 public void onCreate(Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25 setContentView(R.layout.main);
26 mybutton=(Button)findViewById(R.id.mybutton);
27 mybutton.setOnClickListener(new myclicklistener());
28 database=openDatabase();
29 System.out.println("6");
30 }
31
32 private SQLiteDatabase openDatabase(){
33 try {
34 //获得li.db绝对路径
35 String DATABASEFN=databasepath+databasefn;
36 File dir = new File(databasepath);
37 // 如果/sdcard/li目录中存在,创建这个目录
38 if(!dir.exists())
39 System.out.println("1");
40 dir.mkdir();
41 // 如果在目录中不存在
42 // 文件,则从res\raw目录中复制这个文件到
43 //
44 if(!(new File(DATABASEFN)).exists()){
45 // 获得封装 文件的InputStream对象
46 InputStream is =getResources().openRawResource(R.raw.qinyi);
47 System.out.println("2");
48 FileOutputStream fos =new FileOutputStream(DATABASEFN);
49 System.out.println("2.1");
50 byte[] buffer = new byte[8192];//这里为什么是8192我不清楚我对java一知半解,不懂,是不是文件的大小啊
51 System.out.println("3");
52 int count =0;
53 // 开始复制db文件
54 while ((count=is.read(buffer))>0){
55 fos.write(buffer, 0, count);
56 System.out.println("4");
57 }
58 fos.close();
59 is.close();
60 }
61 // 打开 目录中的 db3文件
62 database = SQLiteDatabase.openOrCreateDatabase(DATABASEFN, null);//后面这里第一个参数是路径,我在这里没有搞懂就出错了一只无法获取数据库
63 System.out.println("5");
64 return database;
65 }
66 catch (Exception e){
67 System.out.println("WORLDbad");
68 }
69 return null;
70 }
71
72 class myclicklistener implements OnClickListener{
73 @Override
74 public void onClick(View v) {
75 // TODO Auto-generated method stub
76 String[] idnub={"1"};
77 Cursor mycursor=database.rawQuery(sql,idnub);
78 mycursor.moveToFirst();//从头遍历这个很重要。
79 String result=mycursor.getString(mycursor.getColumnIndex("name"));
80 Toast.makeText(sqlite_main.this, result,Toast.LENGTH_SHORT).show();
81 }
82 }
83 }
2博后感
第一篇就这样结束了,我明天尝试将文件复制到sd卡中试试,数据库的创建什么的经常用,初学者,接触java和android 一个月未到,请多多指教啊。