




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一:数据库:SQLite二:常用数据库:MySQL(瑞典的MYSQL AB公司创建后来被Oricle收购。小型数据库小型企业免费的)Oracle,(美国的甲骨文公司创建)大型的数据库(开机速度会慢占用内存大) 收费的)SQLite:(嵌入式类型的数据库)将整个的数据库嵌入到Android中或者嵌入到设备中)三:其他数据存储方式: SharePreferences:共享参数存储 File:文件存储 NetWork:网络存储 ContentProVider:内容提供者存储四:Android数据存储选择SQLite数据库五:SQLite数据库简介1, SQLite是一种轻型的数据库,他的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用2, 占用资源低3, 第一个Alpha版本诞生于2000年5月4, 最新版本:SQLite35, 主要通信协议是在变成语言内直接API调用整个数据库(定义,表,索引和数据本身)都存储在一个单一的文件中六:SQLite特性:1, SQLite零配置,无需安装和管理配置2, 存储在单一的磁盘文件中的一个完整数据库3, 比一些流行的数据库在大部分普通数据库操作要快4, 简单轻松的APISQLiteDateBase,SQLiteOpenHelper5, 支持多种语言开发C,PHP ,Perl,JAVa,C#,Python七:SQLite数据类型: 一般数据库使用的是静态数据类型,而SQLite采用的是动态数据类型,会根据存入值 自动判断:SQLite具有五种数据类型, 1:NULL:空值 2:INTEGER:带符号的整形,具有取决有存入数字的范围大小, 3:REAL:浮点数字,存储为8-byte IEEE、浮点数 4:TEXT:字符串文本 5:BLOB:二进制对象。八:创建方式:1:命令行创建 这个命令行创建方式不用导表直接创建进工程的date文件中。 (1):打开运行窗口,输入D:(因为安卓相关工具在D盘)就是切换到D盘 (2):输入 cd 接着复制adb所在的目录到命令行回车进入该目录 (3):输入adb进入adb中并且输入adb shell进入linux平台(4):输入cd data回车进入data文件夹 (5):输入cd data回车进入data的data文件中 (6):输入cd com.it.mysqlite1回车进入该工程的文件夹中。进入之后就可以创建数据库文件了 (7):接下来输入sqlite3 test1.db (8):.database生成表 2:调用API代码创建1:命令行创建:1, 创建表:creat table table1(field1 类型,field2类型)备注:table1的意思是创建的表名,参数field1是第一列的意思,field2是第二列的意思,如果还想再创建第三列那就在加一个逗号,继续创建就可以。类型的意思就是列的类型。在SQlite中用Text表示字符串,用Integer表示int型。2, 插入数据: insert into table1(field1,field2) values(value1,value2)3, 删除数据:delete from table1;删除所有,delete where(id= =1)4, 更新:update tablel set field1=value1; 更新table1表中的field1列的值为value1;5, 查找:select *from table1查询所有。Select *from user where id=1;Select username from user wher id=1; 一:linux命令1, 命令格式:2, adb shell(进入linux 系统shell命令)adb(Android,debug,bridge)安卓调试桥3, cddrrNamecd的作用就是切换目录的中间桥梁,括号内就是文件所在目录的路径。4, pwd 查看当前所在目录5, ls 打印当前的目录清单。 二:SQLite命令1, SQLite3 test.db;创建数据库文件2, .help:帮助命令,可以查看所有命令3, .tables:查看已经创建的表格4, .schema表名:查看表结构5, .database.查看已经创建的数据库6, .exit/.quit:退出 九:代码方式操作数据库 SQLiteDataBase SQLiteOpenHelper1:SQLite支持的数据类型 Null、 空值 INTEGER 有符号整型数 REAL 实型值 FLOAT 单精度浮点型值 DOUBLE 双精度浮点型值 NUMERIC 带固定精度和小数位值数据类型 TEXT 文本字符串 VARCHAR 可变长度的字符数据类型 NVARCHAR 可变长度的字符数据类型使用Unicode编码 BOOLEAN 布尔类型 DATATIME 日期时间类型 BLOB 大对象类型2:SQLiteDatabase代表一个数据库(实质就是一个数据库文件在data文件中) SQLiteDatabase用于管理,操作数据库的(1) SQLiteDatabase、实例化构造方法SQLiteDatabase openOrCreateDatabase(String name ,int mode,SQLiteDatebase.CursorFactory factory) 参数含义:name 数据库名字,mode操作模式,factory:操作工厂类(2) 方法:execSQL(String sql):用于执行SQL语句(3) 方法close():用于关闭数据库代码SQLiteDatabase database; database=this.openOrCreateDatabase(user.db, Context.MODE_PRIVATE, null);String creatTableSQL=create table user(_id integer,name text);database.execSQL(creatTableSQL);String insert=insert into user(_id,name) values(1,何倩);(4) database.execSQL(insert);3:数据库的帮助类:SQLiteOpenHelper可用于管理数据库的操作与更新 方法:1:oncreate(SQLiteDatabase db);数据库创建的时候调用 2:onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)当数据库版本更新的时候调用 3:getReadableDatabase()返回值是SQLiteDatebase,意思是获取一个可读的数据库 4:getWritableDatabase()返回值一样意思是获取一个可写的数据库十:重点内容:数据库操作在MVC设计模式的实现M:modelV:ViewC:controll 包:test:类Test,该类的作用是对SQliteManager中的方法进行的测试:该类继承AndroidTestCase类并重写setUP方法,在该方法中实例化SQliteManager的对象,因为要调用这里面的方法所以可定要创建一个对象并在构造方法中进行实例化。一个测试类的步骤1:打开清单文件,点击instrumenttation,点击添加之后点击Browse如果没有输入in,下面一个Browse同样操作找到当前项目保存再点击application点击添加选中usesLibrary,之后点击右侧name,添加即可之后保存查看清单文件中是否有一个runner的注册就可以了1:测试添加数据的方法,在该方法中创建若干个User对象并且set id和name,这样的话就获得了user的对象,再通过SQliteManager的对象调用添加数据的方法,从而进行测试,并将刚才创建的User、对象放入对数据库进行操作包:com.it.db:数据库的包,类:MySQLiteOpenHelper继承SQLiteOpenHelper:重写三个方法,1:构造方法:构造方法参数其他的可以省略留下上下文参数,super(上下文参数,数据库名称,null,版本编号)2:onCreate方法:当数据库创建完成即实例化成功之后执行该方法,参数就是刚才实例化的对象。在该方法中利用传进来的数据库对象创建一张表,方便以后添加数据。3:onUpgrade方法:该方法在数据库版本更新的时候执行包:entity:类User类,该类为实体类,成员变量是在表中所需要添加的数据。并且添加set,get方法包:SQLiteManager类:SQliteManager类,包的管理类,该类的作用是对数据库中的表进行操作分析:想要对数据库进行操作就必须获得数据库的对象SQlitedatabase,但是我们只里面没有直接用SQlite而是用SQliteOpenHelper通过该类来获取数据库的对象,而MySQLiteOpenHelper继承了该类,所以就可以通过实例化MySQLiteOpenHelper而获得一个数据库。当实例化完成之后构造方法就会执行从而创建一个数据库接下来就会执行MySQLiteOpenHelper类中的onCreat方法在该方法中创建了数据库的一张表,本类就是对这张表进行操作。1:构造方法:实例化MySQLiteOpenHelper对象helper创建数据库2:添加数据:通过helper调用getWritableDatabase()方法获得一个可写的数据库对象,通过该对象对表进行操作执行SQL语句进行添加但是SQL语句添加的时候是从实体类中获取的,不能直接进行赋值,用?代替值,执行SQL语句的时候用有两个参数的方法new一个String数组后面接一个大括号,括号的内容与问号的内容相对应,如果数据不是String类型的可以通过添加一个双引号来转换,因为数据是从user类获取的,所以该方法需要传送一个User的对象,执行SQL语句添加数据也是通过该过user对象的get方法获取之后再添加的。3:查询数据:因为查询到的数据是从表中往外读,所以可以通过helper获得一个可读的数据库对象,又因为咱们是往外读数据所以肯定要把读出来的数据存储起来因此该方法的返回值是一个集合泛型是user,咱们要从表中读出id和对应的name所以要把读出来的id和对应的name封装进一个user对象中,因此该方法需要创建一个集合,和若干个user对象,该方法与其他方法有区别,该方法执行SQL语句调用的是rawQuery方法,该方法的返回值是一个cursor游标,在游标中有很多方法,可以判断是否有下一行,如果没有就不在执行了,因此咱们 可以一个对象一个对象的添加用while循环,条件是利用cursor调用moveTonext方法返回值是布尔值,如果有下一个行就继续往下执行,在while循环里面创建user对象,并且利用cursor调用getint方法获取读取的id,该方法参数用cursor.getColumnIndex(“id”)通过识别表中的字符串id来获取id、,同理获取名字的也一样,cursor调用getString()方法获取name,该方法的参数一样。这样的话咱们就获取了id和name,接下来把获取的name和id添加到user中,并把user对象放到list、集合中由于是while循环,所以在表中的所有数据都封装到user对象中,并且所有的user对象又加载到了list集合中,所以所有的表的信息都在list中。最后返回即可4:更新数据(修改数据)想要修改数据肯定要获取一个user的对象,因为需要修改的内容是从user中获取的,这个相对来说简单一些,sql更新修改语句:update table01 set name =?where id=?问号的内容同样来自user。5:删除数据:根据id来删除数据,这个也不说了。测试查找数据:因为查找数据的方法已经有返回值所以测试方法相对来说简单一些。因为之前咱们添加过数据所以直接从表里面读取就可以了,利用SQliteManager的对象调用查询数据的方法,打印一下,就可以了测试更新修改数据和删除数据:这个就不说了代码:MySQLiteOpenHelper/* * 该类的作用就是创建一个数据库sql.db,在数据库中创建了一个表table01 * author 别乱动哈! * */public class MySQLiteOpenHelper extends SQLiteOpenHelper/*一: * 该方法执行完成之后就创建了一个名字为sql.db的数据库文件 * param context */public MySQLiteOpenHelper(Context context) super(context, sql.db, null, 1);/* * 该方法在数据库创建完成之后就会执行里面的参数就是通过构造方法实例化之后获得那个数据库对象 */public void onCreate(SQLiteDatabase db) String SQLCreateTable=create table table01(id integer primary key autoincrement,name text);db.execSQL(SQLCreateTable);/* * 该方法在数据库版本号更新的时候执行 */public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 代码:SQLiteMannager/* * 该类的作用就是对数据库进行操作,包括添加数据,查询数据,更新数据(修改数据) 删除数据 * author 别乱动哈! * */public class SQLiteMannager MySQLiteOpenHelper helper;/获取数据库的对象/*一: * 构造方法的作用就是获取一个数据库的对象 * param context */public SQLiteMannager(Context context)helper=new MySQLiteOpenHelper(context);/*二: * 添加数据, */public void addSQliteData(User user)SQLiteDatabase sqLiteDatabase=helper.getWritableDatabase();String SQLinsert=insert into table01(id,name) values (?,?);sqLiteDatabase.execSQL(SQLinsert, new Stringuser.getId()+,user.getName();/*三: * 查询数据 */public List findAllSQLitedata()List list=new ArrayList();User user;SQLiteDatabase sqLiteDatabase=helper.getReadableDatabase();String sqlSelect=select*from table01;Cursor cursor=sqLiteDatabase.rawQuery(sqlSelect, null);while(cursor.moveToNext()user=new User();int id=cursor.getInt(cursor.getColumnIndex(id);String name=cursor.getString(cursor.getColumnIndex(name);user.setId(id);user.setName(name);list.add(user);return list;/* * 更新数据(修改数据) */public void upDataSQLite(User user)/获取一个可写的数据库SQLiteDatabase sqLiteDatabase=helper.getWritableDatabase();String updatSQL=update table01 set name=? where id=?;sqLiteDatabase.execSQL(updatSQL, new Stringuser.getName(),user.getId()+);/* * 删除数据 */public void deleteDataSQlite(int id)SQLiteDatabase sqLiteDatabase=helper.getWritableDatabase();String updatSQL=delete from table01 where id=?;sqLiteDatabase.execSQL(updatSQL, new Integerid);代码:Mytestpublic class Mytest extends AndroidTestCaseSQLiteMannager mannager;/数据库管理类在这个类中有很多的对数据库进行操作的方法protected void setUp() throws Exception super.setUp();mannager=new SQLiteMannager(this.getContext();/* * 测试添加数据 */public void testAddSQliteData()User user01=new User();user01.setId(5);user01.setName(张三);User user02=new User();user02.setId(2);user02.setName(李四);User user03=new User();user03.setId(3);user03.setName(王五);User user04=new User();user04.setId(4);user04.setName(小六);mannager.addSQliteData(user01);mannager.addSQliteData(user02);mannager.addSQliteData(user03);mannager.addSQliteData(user04);/* * 测试查询数据 */public void testFindAllSQLitedata()List list=mannager.findAllSQLitedata();for(int i=0;ilist.size();i+)System.out.println(查询到的数据是:+list.get(i).getId()+-n+list.get(i).getName();/* * 测试修改数据库 */ public void testUpDataSQLite() User user=new User(); user.setId(1); user.setName(新的名字); mannager.upDataSQLite(user); /* * 测试删除数据库 */ public void testDeleteDataSQlite() mannager.deleteDataSQlite(1); 以上的内容全部是基于SQL语句对数据库进行的操作十一:基于对象的对数据库的操作。主要运用SQLiteDataBase、和SQLiteOpenhelper两个类 1:SQLiteDataBase:之前用的是SQL语句现在用方法 (1)插入:insert(String table,String nullColumnHack, ContentVa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论