CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))
CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name)
SELECT * FROM person LIMIT 20 OFFSET 10
SELECT * FROM person LIMIT 10,20
主键自增长: SQLite 是 autoincrement , MySql 是 auto_increment
主键: SQLite主键一般定义为_id,在做查询时要求主键列名必须是_id(本身 是_id,可以起别名),不然拿不到主键值。
可读的数据库也有可能可以写,可读的数据库在获取实例时有可能拿到上 一次可写的数据库
- 定义类继承SQLiteOpenHelper
- 声明构造函数,4个参数 //context 上下文对象 name 数据库名称 factory游标结果集工厂,如果需要使用则需要自定义结果集工厂,null值代表使用默认结果集工厂 version 数据库版本号,必须大于等于1
- 重写onCreate()方法 //数据库第一次被创建时调用该方法,这里面主要进行对数据库的初始化操作
- 重写upGrade()方法 //数据库更新的时候调用该方法
insert("表名",nullColumnHack,"",contentValue)
update("表名",contentValues(更新列、值),条件,条件值),返回受影响的行数
query("表名", 查询的字段, 条件, 条件值);
delete("表名",条件,条件值),返回受影响的行数
- beginTransaction(): 开启一个事务
- setTransactionSuccessful():设置事务成功标记
- endTransaction(): 结束事务,包括提交和回滚,需要放在finally中执行,否则事务只有到超时的时候才自动结束,会降低数据库并发效率
执行过程:使用beginTransaction开启一个事务,程序执行到endTransaction方法时会检查事务的标志是否为成功,如果程序执行到endTransaction之前调用了setTransactionSuccessful方法设置事务的标志为成功,则提交事务;如果没有调用setTransactionSuccessful方法则回滚事务。
事务对效率的提高:在批量修改数据的时候,由于事务是在进行事务提交时将要执行的SQL操作一次性打开数据库连接执行,其执行速度比逐条执行SQL语句的速度快了很多倍。因此当我们开发中遇到对数据库的批量操作那么,使用事务是提高效率的重要原则。
通过SQLite Expert工具 或 通过Android sqlite3工具sqlite3.exe程序常用命令: sqlite3 数据库名称: 进入数据库操作模式eg: sqlite3 contacts.db tables: 查看所有的表 eg: .tables schema: 查看查看库中所有表的DDL语句 eg: .schema help : 查看帮助 eg: .help headers on/off : 显示表头,默认off eg: headers on mode list|column|insert|line|tabs|tcl|csv:改变输出格式。eg: .mode column nullValue: NULL空值数据显示问题eg: .nullValue NULL dump表名 : 生成形成表的SQL脚本eq: .dump person dump : 生成整个数据库的SQL脚本eq: .dump exit : 退出sqlite操作模式 eq: .exit
mode 数据模型(数据) :要被显示到ListView上的数据集合
view 视图(展示数据) : ListView
controller控制层(把数据展示到空间上) : 适配器Adapter
007--读取数据库的数据并显示到ListView上
1、创建ListView展示样式布局文件,文件名为listview_item.xml 2、创建业务类操作数据库,在该工程中新创建PersonDao 3、修改main_activity.xml布局文件 4、使用并修改该工程默认的Activity类,MainActivity
MainActivity类的主要业 务功能有:调用Dao获取数据库的全部数据;获取ListView控件的实例;自定义适配器,继承BaseAdapter,重写getCount以及getVie w方法//int getCount():用于获取要展示的数据的总条数,即ListView的总长度;view getView(int position,View convertView,ViewGroupparent) //position:当前要显示的项在ListView的索引; convertView:就是被拖出去的View对象,getView的返回值,可以利用这个对象使得拖出去即将销毁的条目重用,即缓存对象 //代码表示 : View view =convertView==null?View.inflate(MainActivity.this,R.layout.item, null):convertView;
实现此接口,重写的方法:条目点击事件
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
//parent:就是listview对象:可以通过parent.getItemAtPosition(position); 获取ListVIew适配器BaseAdapter的public Object getItem(int position)的返回值
在Android中凡是对UI的更新、“耗时”操作等都需要在子线程中进行
Andr oid4.0以上版本 要 求访问网络的操作不允许在主线程中执行,只能在子线程中进行,在主线 程请求网络时,会报如下错误: android.os.NetworkOnMainThreadException
1. 通过URL对象封装地址,打开一个HttpURLConnection2. 设置头信息之后获取响应码,如果成功返回200即可从HttpURLCon nection中获取输入流读取数据3. 代码过长屏幕显示不全可以使用<ScrollView>进行显示4. 需要访问网络的权限
011--案例-网页源码查看器
012--案例-新闻客户端
1. 创建一个新工程,工程名为《新闻客户端》,包名为com.itheima.news ,在清单文件中添加访问网络权限。2. 使用并编辑默认布局文件activity_main.xml,添加ListView控件3. 在res/layout目录下创建item.xml文件,作为第二步骤中ListView的item 布局文件。该布局文件采用相对布局4. 编写一个JavaBean用于封装新闻对象。类名:News5. 在本地tomcat的webapps目录下创建news文件夹,然后将news.xml和ima ge文件添加到改文件夹中。查看本机的IP地址,并修改news.xml文件。然后启 动tomcat6. 使用并编辑默认MainActivity.java,在该类中实现所有方法。013--HttpUrlConnection方式提交数据
基于http协议
- get方式提交数据
- new Thread 开启线程
- 获取需要提交的数据
- 创建提交路径
- 提交数据
- 创建url对象
- 获取HttpUrlConnection链接对象
- 发送请求
- 设置网络超时时间
- 获取服务器返回的状态码
- 获取服务器返回的数据:服务器以流的方式返回数据,用工具类转换成String
- 开源项目方式提交数据(post)
- 创建AsyncHttpClient对象
- 准备请求体内容
- 进行post请求,封装请求参数params