前言
第一篇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个月的学习经历希望与各位能多多交流,还有很多不懂得地方,下面上代码,其他的都在注释中讲。
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 一个月未到,请多多指教啊。
本文介绍了一个简单的Android应用如何加载预置的SQLite数据库文件。通过从资源文件夹复制数据库到应用的数据目录,实现了数据库的初始化。同时分享了作者作为新手在这一过程中遇到的问题和解决方案。

被折叠的 条评论
为什么被折叠?



