1,创建表
通过execSQL方法来执行一条SQL语句。
String sql = "CREATE TABLE dota (_id INTEGER , heroname VARCHAR,description VARCHAR)";
db.execSQL(sql);
上面就创建了一个表名为"dota"的表,有3列,分别是"INTEGER"数据类型的"id"列,"VARCHAR"数据类型的"heroname"列,
"VARCHAR"数据类型的"description"列
语法结构是:Create TABLE 表名(列名 此列数据类型,列名 此列数据类型,列名 此列数据类型)
补充:在创建表时,还可以把第一列Id设置为主键,一个自增长字段定义为INTEGER PRIMARY KEY AUTOINCREMENT,那么在插入一个新数据时,只需要将这个字段的值指定为NULL,即可由引擎自动设定其值
String sql = "CREATE TABLE dota (_id INTEGER PRIMARY KEY AUTOINCREMENT, heroname VARCHAR,description VARCHAR)";
db.execSQL(sql);
大家可以用这2种方式创建表试下,就可以理解区别了.上传的源代码中是没有加入"PRIMARY KEY AUTOINCREMENT"的
关于详细的解释,可以看下面朋友发的文章
点击打开链接2,增加数据
2种方法
ContentValues cv = new ContentValues();
cv.put("heroname", "幽鬼");
cv.put("description", "1号位");
db.insert(table_name, "", cv);
db.execSQL("INSERT INTO dota(heroname, description) values('幽鬼', '1号位')");
第二种方法固定语法结构:INSERT INTO 表名(列名, 列名) values(键值, 键值)
3,删除数据
2种方法
db.delete(table_name, "description = '5号位'", null);
db.execSQL("delete from dota where description=?",new Object[]{"5号位"});
第二种方法固定语法结构:"delete from 表名 where 列名=?",new Object[]{键值}
4,修改数据
2种方法
cv.put("heroname", "神牛");
cv.put("description", "8号位");
db.update(table_name, cv, "heroname = '神牛'", null);
db.execSQL("update dota set description=? where heroname=?",new String[]{"8号位", "神牛"});
第二种方法固定语法结构:"update 表名 set 列名=? where 列名=?",new String[]{"要修改的键值", "键值"}
5,查询数据
2种方法
Cursor c = db.query(table_name, null, null, null, null, null, null);
Cursr c = db.rawQuery("select * from dota", null);
第二种方法固定语法结构:"select"表中哪一行查询或者全表查询,返回一个游标,这里查询的是表中所有数据SQLiteOpenHelper帮助你创建一个数据库你只要继承 SQLiteOpenHelper类就可以轻松的创建数据库。SQLiteOpenHelper类根据开发应用程序的需要封装了创建和更新数据库使用的逻辑。
SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数
onCreate()方法;// TODO 创建数据库后,对数据库的操作
onUpgrage()方法。// TODO 更改数据库版本的操作
下面直接贴代码:
DbHelper.java
package com.example.mysqliteactivity;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DbHelper extends SQLiteOpenHelper{
public DbHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql = "CREATE TABLE dota (_id INTEGER , heroname VARCHAR,description VARCHAR)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
package com.example.mysqliteactivity;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
//SQLiteDatabase对象
SQLiteDatabase db;
//数据库名
public String db_name = "huahua.sqlite";
//表名
public String table_name = "dota";
//辅助类名
final DbHelper helper = new DbHelper(this,db_name,null,1);
//保存数据库中英雄名字的ArrayList
public ArrayList heronames =new ArrayList();
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
db.delete(table_name, null, null);
UpdateSpinner();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//UI组件
Button b1 = (Button)findViewById(R.id.Button01);
Button b2 = (Button)findViewById(R.id.Button02);
Button b3 = (Button)findViewById(R.id.Button03);
Button b4 = (Button)findViewById(R.id.Button04);
//从辅助类获得数据库对象
db = helper.getWritableDatabase();
//初始化数据
initDatabase(db);
//更新下拉列表数据
UpdateSpinner();
//定义按钮点击监听器
OnClickListener ocl = new OnClickListener() {
ContentValues cv = new ContentValues();
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
//增加按钮
case R.id.Button01:
// cv.put("heroname", "随机英雄");
// cv.put("description", "6号位");
// long long1 = db.insert(table_name, "", cv);
db.execSQL("INSERT INTO dota(heroname, description) values(?, ?)",new Object[]{"随机英雄", "6'号'位"});
//添加成功后返回行号,添加失败后返回-1
// if(long1 == -1){
// Toast.makeText(MainActivity.this, "ID是"+long1+"的图片添加失败", Toast.LENGTH_LONG).show();
// }else{
// Toast.makeText(MainActivity.this, "ID是"+long1+"的图片添加成功", Toast.LENGTH_LONG).show();
// }
//更新下拉列表
UpdateSpinner();
break;
//删除描述是"图片5"的数据行
case R.id.Button02:
//删除方法
// long long2 = db.delete(table_name, "description = '5号位'", null);
db.execSQL("delete from dota where description=?",new Object[]{"5号位"});//这里删除的是"术士"项
//删除失败返回0,成功返回删除的条数
// Toast.makeText(MainActivity.this, "删除了"+long2+"条记录", Toast.LENGTH_LONG).show();
//更新下拉列表
UpdateSpinner();
break;
//更新文件名是"5.png"的数据行
case R.id.Button03:
// cv.put("heroname", "神牛");
// cv.put("description", "8号位");
// long long3 = db.update(table_name, cv, "heroname = '神牛'", null);
db.execSQL("update dota set description=? where heroname=?",new String[]{"8号位", "神牛"});
//更新失败返回0,成功返回更新的条数
// Toast.makeText(MainActivity.this, "更新了"+long3+"条记录", Toast.LENGTH_LONG).show();
//更新下拉列表
UpdateSpinner();
break;
//查询当前所有数据
case R.id.Button04:
//查询表中所有元素
// Cursor c = db.query(table_name, null, null, null, null, null, null);
Cursor c = db.rawQuery("select * from dota", null);
//查询指定的元素
// Cursor c = db.rawQuery("select * from dota where heroname=? ", new String[]{"修补匠"});
// Cursor c = db.rawQuery("select * from dota where heroname= ? and description=?", new String[]{"修补匠","2号位"});
//Cursor.getCount是记录的条数
Toast.makeText(MainActivity.this, "当前共有"+c.getCount()+"条记录,下面一一显示", Toast.LENGTH_SHORT).show();
//循环显示
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
Toast.makeText(MainActivity.this,
"第"+c.getInt(0)+"条记录,英雄是"+c.getString(1)+",位置是"+c.getString(2),
Toast.LENGTH_SHORT).show();
//更新下拉列表
// UpdateSpinner();
}
//更新下拉列表
UpdateSpinner();
break;
}
}
};
b1.setOnClickListener(ocl);
b2.setOnClickListener(ocl);
b3.setOnClickListener(ocl);
b4.setOnClickListener(ocl);
}
private void UpdateSpinner() {
// TODO Auto-generated method stub
//定义组件;
final TextView tv = (TextView)findViewById(R.id.TextView02);
Spinner s = (Spinner)findViewById(R.id.Spinner01);
//从数据库中获取数据放入游标Cursor对象
final Cursor c = db.query(table_name, null, null, null, null, null, null);
heronames.clear();
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
heronames.add(c.getString(1));
}
// //创建简单游标适配器
// SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
// android.R.layout.simple_spinner_item,
// c,
// new String[]{"heroname","description"},
// new int[]{R.id.TextView01,R.id.TextView02});
//创建Spinner的适配器
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,heronames);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//给下拉列表设置适配器
s.setAdapter(adapter);
//设置点击子元素监听器
OnItemSelectedListener oisl = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
c.moveToPosition(arg2);
tv.setText("当前英雄位置描述为:" + c.getString(2));
}
@Override
public void onNothingSelected(AdapterView> arg0) {
// TODO Auto-generated method stub
}
};
//给下拉列表设置监听器
s.setOnItemSelectedListener(oisl);
}
private void initDatabase(SQLiteDatabase db) {
// TODO Auto-generated method stub
// ContentValues cv = new ContentValues();
//
// cv.put("heroname", "幽鬼");
// cv.put("description", "1号位");
// db.insert(table_name, "", cv);
//
// cv.put("heroname", "修补匠");
// cv.put("description", "2号位");
// db.insert(table_name, "", cv);
//
// cv.put("heroname", "发条");
// cv.put("description", "3号位");
// db.insert(table_name, "", cv);
//
// cv.put("heroname", "神牛");
// cv.put("description", "4号位");
// db.insert(table_name, "", cv);
// cv.put("heroname", "术士");
// cv.put("description", "5号位");
// db.insert(table_name, "", cv);
//用execSQL语法操作更方便,如果传入带'单引号的特殊符号字符串要用以下结构,不然会出现语法错误
db.execSQL("insert into dota(heroname, description) values(?,?)", new Object[]{"幽鬼", "1号'位"});
// db.execSQL("INSERT INTO dota(heroname, description) values('幽鬼', '1号'位')");//这句导致程序崩溃!!!
db.execSQL("INSERT INTO dota(heroname, description) values('修补匠', '2号位')");
db.execSQL("INSERT INTO dota(heroname, description) values('发条', '3号位')");
db.execSQL("INSERT INTO dota(heroname, description) values('神牛', '4号位')");
db.execSQL("INSERT INTO dota(heroname, description) values('术士', '5号位')");
}
}
就只有2个类,如有错误或者疑问的地方,大家可以指出来一起纠正,讨论
以下是源码的下载地址
点击打开链接