• android下数据库的创建(重点)

在Android平台上,集成了一个轻量级嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,也接受varchar(n)、char(n)、decimal(p,s) 等数据类型, SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略name字段的类型信息:
  CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
     select * from person
     select * from person order by id desc
     select name from person group by name having count(*)>1

  分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
     select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘lc’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘lc‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person where id=10

获取添加记录后自增长的ID值:SELECT last_insert_rowid()

SQLiteOpenHelper:管理数据库的版本

在android应用程序中创建按数据库的步骤:
  1、写一个DBHelper,继承了SQLiteOpenHelper,重新写了父类的构造方法、onCreate、onUpGrade

 package com.ahu.lichang.sqlitedb;

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* Created by ahu_lichang on 2017/3/18.
*/ public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//创建数据库时调用
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL("create table person(_id integer primary key autoincrement,name char(10),salary char(20),phone integer(20))");
}
//升级数据库时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("数据库升级了!!!");
}
}

  2、调用db = helper.getWritableDatabase(),得到数据库对象(data/data/包名/databases/person.db,将生成的数据库文件pull出来,然后拖入sqliteexpertpersonal软件中,就可以查看数据库表中的数据)

 package com.ahu.lichang.sqlitedb;

 import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); MyOpenHelper oh = new MyOpenHelper(getApplicationContext(),"person.db",null,1);
SQLiteDatabase db = oh.getWritableDatabase();
db.execSQL("insert into person(name,salary,phone) values(?,?,?)",new Object[]{"李某1","20000",1875692});
db.execSQL("insert into person(name,salary,phone) values(?,?,?)",new Object[]{"李某2","50000",1871234});
}
}
//可以进行一系列的增删改查操作。。。。。。

  • 数据库sql语句的增删改查

创建表结构:create table person (id integer primary key autoincrement,name varchar(20));
插入:insert into person (name)values("lisi");
查询:select * from person;
更新:update person set name='wangwu' where id=1
删除:delete from person where id=1

  • android下数据库的增删改查(重点)

在android应用程序中使用db.execSQL("sql",bindArgs)操作增删改查语句;
1、创建表结构
public void create(View v){

  db.execSQL("create table person (id integer primary key autoincrement,name varchar(20))", new Object[]{});
  Toast.makeText(this, "创建表结构成功", 0).show();

}

2、插入

public void insert(View v){

  db.execSQL("insert into person(name) values(?)", new String[]{"lisi"});
  Toast.makeText(this, "插入数据成功", 0).show();
}

3、查询:db.rawQuery,cursor类似于一个指针,当cursor指向一条记录时,就把当前记录的数据封装到cursor中,直接从cursor取数据

public void query(View v){

  Cursor cursor = db.rawQuery("select * from person",null);
  //移动游标,返回值为true表示没有移动到数据集的最后(空),如果为false已经数据集的最后(没有数据了)
  while(cursor.moveToNext()){
    int id = cursor.getInt(0);
    String name = cursor.getString(1);

    System.out.println("id="+id+"; name="+name);
  }

  Toast.makeText(this, "查询数据成功", 0).show();
}

4、更新
public void update(View v){

  db.execSQL("update person set name='wangwu' where id=?", new Object[]{1});
  Toast.makeText(this, "更新数据成功", 0).show();

}
5、删除

public void delete(View v){

  db.execSQL("delete from person where id=?", new Object[]{1});
  Toast.makeText(this, "删除数据成功", 0).show();

}

  • 数据库的另外一种增删改查方法(重点)

使用google提供的另外一种方式操作数据库表:

1、插入数据
public void insert(View v){

  //db.execSQL("insert into person (name)values(?)", new String[]{"lisi"});
  ContentValues values = new ContentValues();
  Random r = new Random();
  values.put("name", "zhangsan"+r.nextInt(100));
  long rowId = db.insert("person", null, values);
  System.out.println("rowId="+rowId);
  Toast.makeText(this, "插入数据成功", 0).show();
}

2、查询数据
public void query(View v){
  /**
  * table 表名
  * columns 查询的列
  * selection 查询条件"id=1"
  * selectionArgs 查询条件的值
  * String groupBy
  * String having
  * String orderBy
  *
  */
  Cursor cursor = db.query("person", new String[]{"id","name" }, null, null, null, null, null);

  while(cursor.moveToNext()){
    int id = cursor.getInt(0);
    String name = cursor.getString(1);

    System.out.println("id="+id+"; name="+name);
  }

  Toast.makeText(this, "查询数据成功", 0).show();
}

public void update(View v){

  // db.execSQL("update person set name='wangwu' where id=?", new Object[]{1});
  //用来封装要修改的列名和值
  ContentValues values = new ContentValues();
  values.put("name", "wangwu");
  db.update("person", values, "id=?", new String[]{"1"});
  Toast.makeText(this, "更新数据成功", 0).show();

}

public void delete(View v){

  // db.execSQL("delete from person where id=?", new Object[]{1});
  db.delete("person", "id=?", new String[]{"2"});
  Toast.makeText(this, "删除数据成功", 0).show();

}

  • 命令行查看数据库

使用adb shell进入模拟器或者手机的控制台;
使用cd切换到数据库文件所在的目录;
使用sqlite3 数据库文件的名称打开数据;
使用增删改查语句操作数据库。

  • 数据库的事务(重点)

什么是事务:同一组操作要么同时成功,要么同时失败。  事务有四大特性:原子性、一致性、隔离性、持久性

zhangsan -> lisi 100yuan
1、zhangsan - 100
2、lisi + 100

* 在android应用程序中使用SQLite数据库事务的步骤:

try{
  //1、在业务逻辑开始的时候开启事务:
  db.beginTransaction();
  //张三转出100
  ContentValues values = new ContentValues();
  values.put("money", "1900");
  db.update("account", values, "id=?", new String[]{"1"});

  //李四收到100
  ContentValues values02 = new ContentValues();
  values02.put("money", "102");
  db.update("account", values02, "id=?", new String[]{"2"});

  //2、 在业务逻辑结束的时候告诉系统数据库提交成功
  db.setTransactionSuccessful();
} finally{
  //3、告诉系统数据库结束
  db.endTransaction();
}

  • listview的使用(重点)

ListView :用来在界面上显示数据列表。一行一个条目,每一个条目都是一个View对象。

getCount
getView()

listview显示数据的原理:
MVC :
javaweb
mode: javabean
view: jsp
controller:servlet

对listview的优化
convertview:

MVC:
Model Person 数据
View ListView
Controle: Adapter 数据适配器

使用listview显示数据列表的步骤:(整个界面有个大的布局,然后每个item又要一个布局文件)
  1、在布局文件中添加一个listview控件:lv
  2、在代码中找到这个listview控件:findViewById(R.id.lv)
  3、创建一个数据适配器为listview填充数据:lv.setAdapter(new MyAdapter())---ArrayAdapter、SimpleAdapter、BaseAdapter

  • ArrayAdapter

使用ArrayAdapter为listview填充数据的步骤:
  1、在布局文件中添加ListView
  2、在代码中初始化这个listview控件
  3、调用listview.setAdapter()填充数据
    //使用适配器为listview填充数据
    //new ArrayAdapter:context 上下文,resourceId 条目布局文件的资源ID,object[] 要显示的数据
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, new String[]{"王菲","谢霆锋","张柏芝","李亚鹏"}));

  • SimpleAdapter

使用ArrayAdapter为listview填充数据的步骤:
  1、在布局文件中添加ListView
  2、在代码中初始化这个listview控件
  3、调用listview.setAdapter()填充数据
    //使用适配器为listview填充数据
    //new SimpleAdapter:context 上下文,resourceId 条目布局文件的资源ID,String[] 要显示的列名,int[] 指定列显示在item布局文件的哪个控件上
    lv.setAdapter(new SimpleAdapter(this, data, R.layout.item, new String[]{"id","name"}, new int[]{R.id.tv_id,R.id.tv_name}));

条目的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_id"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_name"
/>

</LinearLayout>

  • 复杂listview界面的显示BaseAdapter(重点)

步骤:
1、在布局文件中添加ListView
2、在代码中初始化这个listview控件
  lv = (ListView) findViewById(R.id.lv);
3、自定义数据适配器,继承了BaseAdapter,重写4个方法,其中getCount、getView是我们关心的
private class MyAdapter extends BaseAdapter{

  @Override
  public int getCount() {

    return 20;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {

    View view = View.inflate(MainActivity.this, R.layout.item, null);

    ImageView iv = (ImageView) view.findViewById(R.id.iv);

    TextView tv_title = (TextView) view.findViewById(R.id.tv_title);

    tv_title.setText("111");

    TextView tv_desc = (TextView) view.findViewById(R.id.tv_desc);
    tv_desc.setText("2222");
    return view;
  }

  @Override
  public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
  }

}
4、调用lv.setAdapter(new MyAdapter())填充数据

  • 数据库listview界面的显示

public class MainActivity extends Activity {

  private SQLiteDatabase db;
  private ListView lv;
  private List<Person> list;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //初始化listview控件
    lv = (ListView) findViewById(R.id.lv);

    DBHelper helper = new DBHelper(this, "persons.db", null, 1);

    db = helper.getWritableDatabase();

}

public void insert(View v){
  //db.execSQL("insert into person (name)values(?)", new String[]{"lisi"});
  ContentValues values = new ContentValues();
  Random r = new Random();
  values.put("name", "zhangsan"+r.nextInt(100));
  long rowId = db.insert("person", null, values);
  System.out.println("rowId="+rowId);
  Toast.makeText(this, "插入数据成功", 0).show();
}

public void query(View v){

  list = new ArrayList<Person>();
  /**
  * table 表名
  * columns 查询的列
  * selection 查询条件"id=1"
  * selectionArgs 查询条件的值
  * String groupBy
  * String having
  * String orderBy)
  *
  */
  Cursor cursor = db.query("person", new String[]{"id","name" }, null, null, null, null, null);

  while(cursor.moveToNext()){

    Person p = new Person();
    int id = cursor.getInt(0);
    p.setId(id);
    String name = cursor.getString(1);
    p.setName(name);
    list.add(p);
    System.out.println("id="+id+"; name="+name);
  }

  //把数据显示到列表
  lv.setAdapter(new MyAdapter());

  Toast.makeText(this, "查询数据成功", 0).show();
}

/**
*创建一个数据适配器,为listview填充数据
*/
private class MyAdapter extends BaseAdapter{

  @Override
  public int getCount() {

    return list.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view = null;
  if(convertView != null){
    view = convertView;
}else{
  view = View.inflate(MainActivity.this, R.layout.item, null);
}

TextView tv_id = (TextView) view.findViewById(R.id.tv_id);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
Person p = list.get(position);

tv_id.setText(p.getId()+"");

tv_name.setText(p.getName());
return view;
}

@Override
public Object getItem(int position) {
  // TODO Auto-generated method stub
  return null;
}

@Override
public long getItemId(int position) {
  // TODO Auto-generated method stub
  return 0;
}
}

}

SQLite数据库、ListView控件的使用的更多相关文章

  1. 将数据库数据添加到ListView控件中

    实现效果: 知识运用: ListView控件中的Items集合的Clear方法 //从listView控件的数据项集合中移除所有数据项 补充:可以使用Remove或RemoveAt方法从集合中移除单个 ...

  2. C#在listview控件中显示数据库数据

    一.了解listview控件的属性 view:设置为details columns:设置列 items:设置行 1.将listview的view设置为details 2.设置列属性 点击添加,添加一列 ...

  3. 《ASP.NET1200例》ListView控件之修改,删除与添加

    aspx <body> <form id="form1" runat="server"> <div> <asp:Lis ...

  4. 《ASP.NET1200例》ListView 控件与DataPager控件的结合<一>

    分页     在前一部分开始时介绍的原 HTML 设计中内含分页和排序,所以根据规范完整实现该网格的任务尚未完成.我们先分页,然后再排序. ListView 控件中的分页通过引入另一个新控件 Data ...

  5. ListView控件使用

    //ListView标头的代码创建方法. ColumnHeader title=new ColumnHeader(); //声明标头,并创建对象. title.Text="标头1名称&quo ...

  6. C# ListView控件使用简介

    ListView控件在各类程序中,具有数据显示直观,操作方便的特点.所以使用率极高,但控件的各类参数众多,很多初学者不易掌握,在此列举该控件的一些常用方法,属性,希望对初学者有一定帮助. //2005 ...

  7. ListView控件--2016年12月9日

    ListView属性 ListView   名称 说明 AccessKey 重写 WebControl.AccessKey 属性. 不支持将此属性设置 ListView 控件.(覆盖 WebContr ...

  8. ListView控件

      打气筒工具:将R.layout.item_listview布局添加到相应的view控件里面 View view=LayoutInflater.from(ScondPro.this).inflate ...

  9. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

随机推荐

  1. numpy取反操作符和Boolean类型

    numpy~运算符和Boolean类型变量 觉得有用的话,欢迎一起讨论相互学习~Follow Me numpy中取反运算符~可以将Boolean类型值取反,这在使用boolean类型数组选择数组中固定 ...

  2. Writing your first academic paper

    Writing your first academic paper If you are working in academics (and you are if you are working wi ...

  3. 可供选择CSS框架

    在这里你有一个很酷的框架,收集创建的CSS布局. 如果你不喜欢框架,宁愿使用自己的手写代码以促进自己的发展,请跳过本篇文章. 我想有一个建设性的意见,那就是有选择的使用其优点避开其缺点. 就个人而言, ...

  4. Linux基础-编译安装Python

    终于涉及一点儿专业的了,说实话,对于目前的我难度还是挺大的,这句话送给未来的自己 挑战开始: 首先了解一下Python3.6,底层是由c++开发的,所以在linux下需要C++的支持,必然少不了gcc ...

  5. IIS 问题集锦

    本文主要记录IIS中遇到的各种问题以及注意事项 一.在IIS中.NET Framework的版本选择为什么没有v3.0,v3.5? 首先需要澄清的是这里有两个关于版本的东西:ASP.NET和.NET ...

  6. Spring笔记13--SSH--全注解开发

    SSH全注解开发: (1) 在Action类中添加注解,实现Struts2的注解开发(@NameSpace.@ParentPackage.@Action...) package com.tongji. ...

  7. jq 监听input值的变化

    $(".popWeiXing .name").bind("input propertychange", function() { modValue.diyDat ...

  8. ADB常用命令(二)

    参考  http://adbshell.com/commands 常用命令 查看adb 版本 adb version 打印所有附加模拟器/设备的列表 adb devices 设备序列号 adb get ...

  9. mysql -> 简介&体系结构_01

    数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式储存在一起.能予多个用户共享.具有尽可能小的 ...

  10. linux文件管理 -> 系统文件属性

    -rw-------. 1 root root 4434 May 30 13:58 ks.cfg -rw-------. ①:文件类型与权限 ②:硬链接次数 root ③:所属用户 root ④:所属 ...