设为首页 收藏本站
查看: 1070|回复: 0

[经验分享] Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库 .

[复制链接]

尚未签到

发表于 2016-12-1 11:06:10 | 显示全部楼层 |阅读模式
  SQLite数据库简单的认识
  SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
  SQLite特性
  下面是访问SQLite官方网站: http://www.sqlite. org/ 时第一眼看到关于SQLite的特性.
  1. ACID事务   
  2. 零配置 – 无需安装和管理配置   
  3. 储存在单一磁盘文件中的一个完整的数据库   
  4. 数据库文件可以在不同字节顺序的机器间自由的共享   
  5. 支持数据库大小至2TB   
  6. 足够小, 大致3万行C代码, 250K   
  7. 比一些流行的数据库在大部分普通数据库操作要快   
  8. 简单, 轻松的API   
  9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定   
  10. 良好注释的源代码, 并且有着90%以上的测试覆盖率   
  11. 独立: 没有额外依赖   
  12. Source完全的Open, 你可以用于任何用途, 包括出售它   
  13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python
  下面我以一个完整的Demo例子来展示对SQLite数据库操作,包括对数据库表的增、删、改、查等基本操作。下面的一个截图是该演示Demo的项目框架图:
DSC0000.gif

  通过上面的截图可以看到该项目src目录下包含两个类:MainActivity.java 和 MySQLiteOpenHelper.java 。其中MySQLiteOpenHelper.java是对数据库操作辅助类。
  布局文件main.xml的代码:
[c-sharp] view plaincopyprint?


  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:orientation="vertical"  
  •     android:layout_width="fill_parent"  
  •     android:layout_height="fill_parent">  
  •     <TextView android:id="@+id/tv_title"  
  •        android:layout_width="fill_parent"  android:layout_height="wrap_content"   
  •        android:text="Hello, Welcome to Andy's blog!" android:textSize="16sp"/>  
  •       
  •     <Button android:id="@+id/newTable" android:layout_width="fill_parent"    
  •         android:layout_height="wrap_content" android:text="1.新建数据表"/>    
  •     <Button android:id="@+id/addOne" android:layout_width="fill_parent"    
  •         android:layout_height="wrap_content" android:text="2.插入一条记录"/>    
  •     <Button android:id="@+id/query" android:layout_width="fill_parent"     
  •         android:layout_height="wrap_content" android:text="3.查询数据库"/>    
  •     <Button android:id="@+id/editOne" android:layout_width="fill_parent"    
  •         android:layout_height="wrap_content" android:text="4.修改一条记录"/>    
  •     <Button android:id="@+id/deleteOne" android:layout_width="fill_parent"    
  •         android:layout_height="wrap_content" android:text="5.删除一条记录"/>    
  •     <Button android:id="@+id/deleteTable" android:layout_width="fill_parent"    
  •         android:layout_height="wrap_content" android:text="6.删除数据表"/>    
  •           
  •     <TextView android:id="@+id/tv_result"  
  •        android:layout_width="fill_parent"  android:layout_height="wrap_content"   
  •        android:text="测试显示的结果" android:textSize="16sp"/>  
  •       
  • </LinearLayout>  

  <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/tv_title"android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="Hello, Welcome to Andy's blog!" android:textSize="16sp"/><Button android:id="@+id/newTable" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="1.新建数据表"/>  <Button android:id="@+id/addOne" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="2.插入一条记录"/>  <Button android:id="@+id/query" android:layout_width="fill_parent"   android:layout_height="wrap_content" android:text="3.查询数据库"/>  <Button android:id="@+id/editOne" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="4.修改一条记录"/>  <Button android:id="@+id/deleteOne" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="5.删除一条记录"/>  <Button android:id="@+id/deleteTable" android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="6.删除数据表"/>  <TextView android:id="@+id/tv_result"android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="测试显示的结果" android:textSize="16sp"/></LinearLayout>
  MainActivity.java代码:
[c-sharp] view plaincopyprint?


  • package com.andyidea.sqlite;  
  • import java.io.File;  
  • import java.io.IOException;  
  • import android.app.Activity;  
  • import android.content.ContentValues;  
  • import android.database.Cursor;  
  • import android.database.sqlite.SQLiteDatabase;  
  • import android.os.Bundle;  
  • import android.view.View;  
  • import android.view.View.OnClickListener;  
  • import android.widget.Button;  
  • import android.widget.TextView;  
  • import android.widget.Toast;  
  • public class MainActivity extends Activity {  
  •     private Button btn_newTable,btn_addOne,btn_query,  
  •             btn_editOne,btn_deleteOne,btn_deleteTable;  
  •     private TextView tv;  
  •     private MySQLiteOpenHelper myOpenHelper;  
  •     private SQLiteDatabase sqlitedb;  
  •       
  •     //----以下两个成员变量是针对在SD卡中存储数据库文件使用----    
  •     //private File path = new File("/sdcard/dbfile"); //数据库文件目录   
  •     //private File f = new File("/sdcard/dbfile/AndyDemo.db"); //数据库文件   
  •       
  •     /** Called when the activity is first created. */  
  •     @Override  
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •           
  •         initializeViews();  
  •           
  •         //实例化默认数据库辅助操作对象   
  •         myOpenHelper = new MySQLiteOpenHelper(this);  
  •           
  •         //----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件----   
  •         //if(!path.exists()){   //判断目录是否存在   
  •         //  path.mkdirs();    //创建目录   
  •         //}   
  •         //if(!f.exists()){      //判断文件是否存在   
  •         //  try{   
  •         //      f.createNewFile();  //创建文件   
  •         //  }catch(IOException e){   
  •         //      e.printStackTrace();   
  •         //  }   
  •         //}   
  •     }  
  •       
  •     /** 
  •      * 初始化UI界面 
  •      */  
  •     private void initializeViews(){  
  •         tv = (TextView)findViewById(R.id.tv_result);  
  •         btn_newTable = (Button)findViewById(R.id.newTable);  
  •         btn_addOne = (Button)findViewById(R.id.addOne);  
  •         btn_query = (Button)findViewById(R.id.query);  
  •         btn_editOne = (Button)findViewById(R.id.editOne);  
  •         btn_deleteOne = (Button)findViewById(R.id.deleteOne);  
  •         btn_deleteTable = (Button)findViewById(R.id.deleteTable);  
  •           
  •         btn_newTable.setOnClickListener(new ClickEvent());  
  •         btn_addOne.setOnClickListener(new ClickEvent());  
  •         btn_query.setOnClickListener(new ClickEvent());  
  •         btn_editOne.setOnClickListener(new ClickEvent());  
  •         btn_deleteOne.setOnClickListener(new ClickEvent());  
  •         btn_deleteTable.setOnClickListener(new ClickEvent());  
  •     }  
  •       
  •     class ClickEvent implements OnClickListener{  
  •         @Override  
  •         public void onClick(View v) {  
  •             try{  
  •                 //[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的操作如下   
  •                 sqlitedb = myOpenHelper.getWritableDatabase(); //实例化数据库   
  •                   
  •                 //[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的操作如下   
  •                 //sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);   
  •                   
  •                 if(v == btn_newTable){   //1.新建数据表   
  •                     String TABLE_NAME = "andy";  
  •                     String ID = "id";  
  •                     String TEXT = "text";  
  •                     String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID    
  •                         + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT    
  •                         + " text );";  
  •                     sqlitedb.execSQL(str_sql2);  
  •                     tv.setText("新建数据表成功!");  
  •                       
  •                 }else if(v == btn_addOne){  //2.插入一条记录   
  •                     //----第1种插入数据的方法----   
  •                     //ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称,   
  •                     //value值是字段的值。可以通过ContentValues的put方法把数据存放到   
  •                     //ContentValues对象中,然后把数据插入到相对应的数据表中。   
  •                     ContentValues cv = new ContentValues();  
  •                     cv.put(MySQLiteOpenHelper.TEXT, "新数据");  
  •                     sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);  
  •                     //db.insert(String table, String nullColumnHack, ContentValues values);方法解说   
  •                     //public long insert (String table, String nullColumnHack, ContentValues values)   
  •                     //该方法是向数据表中插入一条记录   
  •                     //[1]参数table:需要插入操作的表名   
  •                     //[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值,   
  •                     //   则默认使用null值传入。   
  •                     //[3]参数values:插入的数据   
  •                       
  •                     //----第2种插入数据的方法----   
  •                     // String INSERT_DATA =     
  •                     // "INSERT INTO andy (id,text) values (1, '第2种插入数据的方法')";     
  •                     // sqlitedb.execSQL(INSERT_DATA);   
  •                       
  •                     tv.setText("添加新数据成功!");  
  •                       
  •                 }else if(v == btn_query){   //3.查询数据库   
  •                     Cursor cur = sqlitedb.rawQuery("SELECT * FROM "+MySQLiteOpenHelper.TABLE_NAME, null);  
  •                     if(cur != null){  
  •                         String temp = "";  
  •                         int i = 0;  
  •                         while(cur.moveToNext()){  
  •                             temp += cur.getString(0);  //0代表数据列的第一列,即id   
  •                             temp += cur.getString(1);  //1代表数据列的第二列,即text   
  •                             i++;  
  •                             temp += "/n";    //定义显示数据的格式,一行一个数据   
  •                         }  
  •                         tv.setText(temp);  
  •                           
  •                     }  
  •                 }else if(v == btn_editOne){  //4.修改一条记录   
  •                     //----第1种方式修改数据----   
  •                     ContentValues cv = new ContentValues();  
  •                     cv.put(MySQLiteOpenHelper.TEXT, "更新后的数据");  
  •                     sqlitedb.update("andy", cv, "id " + "=" + Integer.toString(1), null);  
  •                     //[1]参数table:需要操作的表名   
  •                     //[2]参数values:ContentValues   
  •                     //[3]参数whereClause:更新的条件   
  •                     //[4]参数whereArgs:更新条件对应的值   
  •                       
  •                     //----第2种方式修改数据----   
  •                     // String UPDATA_DATA =     
  •                     // "UPDATE andy SET text='通过SQL语句来修改数据'  WHERE id=1";     
  •                     // sqlitedb.execSQL(UPDATA_DATA);     
  •                     tv.setText("修改数据成功!");  
  •                       
  •                 }else if(v == btn_deleteOne){  //5.删除一条记录   
  •                     //----第1种方式删除数据----   
  •                     sqlitedb.delete("andy", MySQLiteOpenHelper.ID + "= 1", null);  
  •                     //public int delete(String table, String whereClause, String[] whereArgs)解说   
  •                     //[1]参数table:需要操作的表名   
  •                     //[2]参数whereClause:删除的条件   
  •                     //[3]参数whereArgs:删除条件对应的值   
  •                       
  •                     //----第2种方式删除数据----   
  •                     //String DELETE_DATA = "DELETE FROM andy WHERE id=1";    
  •                     //sqlitedb.execSQL(DELETE_DATA);   
  •                     tv.setText("删除数据成功!");  
  •                       
  •                 }else if(v == btn_deleteTable){  //6.删除数据表   
  •                     sqlitedb.execSQL("DROP TABLE andy");  
  •                     tv.setText("删除数据表成功!");  
  •                       
  •                 }  
  •             }catch(Exception e){  
  •                 tv.setText("操作失败");  
  •             }finally{  
  •                 sqlitedb.close();  
  •             }  
  •         }  
  •           
  •     }  
  • }  

  package com.andyidea.sqlite;import java.io.File;import java.io.IOException;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private Button btn_newTable,btn_addOne,btn_query,btn_editOne,btn_deleteOne,btn_deleteTable;private TextView tv;private MySQLiteOpenHelper myOpenHelper;private SQLiteDatabase sqlitedb;//----以下两个成员变量是针对在SD卡中存储数据库文件使用---- //private File path = new File("/sdcard/dbfile"); //数据库文件目录//private File f = new File("/sdcard/dbfile/AndyDemo.db"); //数据库文件/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initializeViews();//实例化默认数据库辅助操作对象myOpenHelper = new MySQLiteOpenHelper(this);//----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件----//if(!path.exists()){   //判断目录是否存在//path.mkdirs();    //创建目录//}//if(!f.exists()){      //判断文件是否存在//try{//f.createNewFile();  //创建文件//}catch(IOException e){//e.printStackTrace();//}//}}/*** 初始化UI界面*/private void initializeViews(){tv = (TextView)findViewById(R.id.tv_result);btn_newTable = (Button)findViewById(R.id.newTable);btn_addOne = (Button)findViewById(R.id.addOne);btn_query = (Button)findViewById(R.id.query);btn_editOne = (Button)findViewById(R.id.editOne);btn_deleteOne = (Button)findViewById(R.id.deleteOne);btn_deleteTable = (Button)findViewById(R.id.deleteTable);btn_newTable.setOnClickListener(new ClickEvent());btn_addOne.setOnClickListener(new ClickEvent());btn_query.setOnClickListener(new ClickEvent());btn_editOne.setOnClickListener(new ClickEvent());btn_deleteOne.setOnClickListener(new ClickEvent());btn_deleteTable.setOnClickListener(new ClickEvent());}class ClickEvent implements OnClickListener{@Overridepublic void onClick(View v) {try{//[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的操作如下sqlitedb = myOpenHelper.getWritableDatabase(); //实例化数据库//[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的操作如下//sqlitedb = SQLiteDatabase.openOrCreateDatabase(f, null);if(v == btn_newTable){   //1.新建数据表String TABLE_NAME = "andy";String ID = "id";String TEXT = "text";String str_sql2 = "CREATE TABLE " + TABLE_NAME + "(" + ID  + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT  + " text );";sqlitedb.execSQL(str_sql2);tv.setText("新建数据表成功!");}else if(v == btn_addOne){  //2.插入一条记录//----第1种插入数据的方法----//ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称,//value值是字段的值。可以通过ContentValues的put方法把数据存放到//ContentValues对象中,然后把数据插入到相对应的数据表中。ContentValues cv = new ContentValues();cv.put(MySQLiteOpenHelper.TEXT, "新数据");sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);//db.insert(String table, String nullColumnHack, ContentValues values);方法解说//public long insert (String table, String nullColumnHack, ContentValues values)//该方法是向数据表中插入一条记录//[1]参数table:需要插入操作的表名//[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值,//   则默认使用null值传入。//[3]参数values:插入的数据//----第2种插入数据的方法----// String INSERT_DATA =  // "INSERT INTO andy (id,text) values (1, '第2种插入数据的方法')";  // sqlitedb.execSQL(INSERT_DATA);tv.setText("添加新数据成功!");}else if(v == btn_query){   //3.查询数据库Cursor cur = sqlitedb.rawQuery("SELECT * FROM "+MySQLiteOpenHelper.TABLE_NAME, null);if(cur != null){String temp = "";int i = 0;while(cur.moveToNext()){temp += cur.getString(0);  //0代表数据列的第一列,即idtemp += cur.getString(1);  //1代表数据列的第二列,即texti++;temp += "/n";    //定义显示数据的格式,一行一个数据}tv.setText(temp);}}else if(v == btn_editOne){  //4.修改一条记录//----第1种方式修改数据----ContentValues cv = new ContentValues();cv.put(MySQLiteOpenHelper.TEXT, "更新后的数据");sqlitedb.update("andy", cv, "id " + "=" + Integer.toString(1), null);//[1]参数table:需要操作的表名//[2]参数values:ContentValues//[3]参数whereClause:更新的条件//[4]参数whereArgs:更新条件对应的值//----第2种方式修改数据----// String UPDATA_DATA =  // "UPDATE andy SET text='通过SQL语句来修改数据'  WHERE id=1";  // sqlitedb.execSQL(UPDATA_DATA);  tv.setText("修改数据成功!");}else if(v == btn_deleteOne){  //5.删除一条记录//----第1种方式删除数据----sqlitedb.delete("andy", MySQLiteOpenHelper.ID + "= 1", null);//public int delete(String table, String whereClause, String[] whereArgs)解说//[1]参数table:需要操作的表名//[2]参数whereClause:删除的条件//[3]参数whereArgs:删除条件对应的值//----第2种方式删除数据----//String DELETE_DATA = "DELETE FROM andy WHERE id=1"; //sqlitedb.execSQL(DELETE_DATA);tv.setText("删除数据成功!");}else if(v == btn_deleteTable){  //6.删除数据表sqlitedb.execSQL("DROP TABLE andy");tv.setText("删除数据表成功!");}}catch(Exception e){tv.setText("操作失败");}finally{sqlitedb.close();}}}}
  MySQLiteOpenHelper辅助器类代码:
[c-sharp] view plaincopyprint?


  • package com.andyidea.sqlite;  
  • import android.content.Context;  
  • import android.database.sqlite.SQLiteDatabase;  
  • import android.database.sqlite.SQLiteOpenHelper;  
  • import android.util.Log;  
  • /** 
  •  * 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要  
  •  * 一个构造函数和重写两个方法。 
  •  * @author Andy 
  •  */  
  • public class MySQLiteOpenHelper extends SQLiteOpenHelper {  
  •     public static final String DATABASE_NAME = "AndyDemo.db"; //数据库名   
  •     public static final int VERSION = 1;   //版本号   
  •     public static final String TABLE_NAME = "andy";  //表名   
  •     public static final String ID = "id";  
  •     public static final String TEXT = "text";  
  •       
  •     public MySQLiteOpenHelper(Context context) {  
  •         super(context, DATABASE_NAME, null, VERSION);  
  •     }  
  •     /** 
  •      * 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表 
  •      */  
  •     @Override  
  •     public void onCreate(SQLiteDatabase db) {  
  •         //创建数据表的操作   
  •         String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID    
  •         + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );";    
  •           
  •         db.execSQL(strSQL);  
  •     }  
  •     /** 
  •      * 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 
  •      * 删除数据表,然后再创建新的数据表操作。 
  •      */  
  •     @Override  
  •     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  •         Log.e("AndyDemo", "onUpgrade");    
  •     }  
  • }  

  package com.andyidea.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/*** 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要 * 一个构造函数和重写两个方法。* @author Andy*/public class MySQLiteOpenHelper extends SQLiteOpenHelper {public static final String DATABASE_NAME = "AndyDemo.db"; //数据库名public static final int VERSION = 1;   //版本号public static final String TABLE_NAME = "andy";  //表名public static final String ID = "id";public static final String TEXT = "text";public MySQLiteOpenHelper(Context context) {super(context, DATABASE_NAME, null, VERSION);}/*** 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表*/@Overridepublic void onCreate(SQLiteDatabase db) {//创建数据表的操作String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID  + " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );";  db.execSQL(strSQL);}/*** 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中* 删除数据表,然后再创建新的数据表操作。*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.e("AndyDemo", "onUpgrade");  }}
  当我们需要把数据库创建在SDCard中时,需要在AndroidManifest.xml文件中添加对SDCard操作的权限,如下:
[c-sharp] view plaincopyprint?


  • <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  •     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  通过以上步骤的操作,对SQLite数据库的操作有了大概的认识。下面我们来看看程序运行的效果。
DSC0001.gif

  由于该Demo的代码比较多,需要该源码的请到资源中下载:http://download.csdn.net/detail/cjjky/4236087,谢谢。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308158-1-1.html 上篇帖子: 在Android中把SQLite的数据库文件存储在SD卡中【转】 下篇帖子: Android中用文件初始化sqlite 数据库的文(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表