SQLite
SQLite是无类型的,这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么,对于SQLite
来说对字段不指定类型是完全有效的,如:
Create Table ex1(a, b, c);
双击sqlite3.exe之后,进入dos终端,现在就进入了一个main的数据库
.help 获取帮助
.table 显示当前数据库中所包含的表
.schema 显示建表语句
.quit 退出
.output <文件名> 设置输出路径,将表中数据输出到文件
.output stdout 设置为控制台输出
注意:命令不能以";"结束
1)创建表
create table <表名>(字段1,字段2,字段3);//可以不指定字段类型
我们往往都是指定类型。
如:
CREATE TABLE test1(a,b,c);//语句结束用“;”
CREATE TABLE test2(id int primary key autoincrement,name varchar(20));
查看创建的表
.table
.schema
2)插入数据
insert into <表名>(字段列表) values(对应的值); //字符串加双引号或单引号
insert into test2(name,age) values("zhangsan",20);
当插入所有列时,可以不用指定插入的字段列表
insert into <表名> values(对应列的值);
3)查询数据
select <列的列表中间用逗号隔开,查询所有列用*> from <表名>;
select * from test2 where id=1;
模糊查询
select * from test2 where name like "w%"; //%表示任意多个字符
select * from test2 where name like "w_"; //_表示任意一个字符
select * from test2 limit 0,2;//0表示从第一行开始,2表示查询两条记录
select * from test2 where age is null; //查询age为空的记录
select * from test2 where age not null;//查询age不为空的记录
起别名
select name n,age a from test2;//将name列映射为n,age列映射为a
4)删除
delete from <表名> where 条件;
如果没有where部分,那么会清空整个表
delete from test2 where id=2;
5)修改
update <表名> set field1='newValue',field2='newValue2' where id=2;
SQLite支持常见的数据类型
null:空值。
integer:带符号的整型,具体取决有存入数字的范围大小。
real:浮点数字。
text:字符串文本。
blob:二进制对象。
smallint 16 位元的整数。
interger 32 位元的整数。
decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部
有几个数(digits)大小值,
s是指小数点後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float 32位元的实数。
double 64位元的实数。
char(n) n 长度的字串,n不能超过 254。
varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000
date 包含了 年份、月份、日期。
time 包含了 小时、分钟、秒。
timestamp 包含了 年、月、日、时、分、秒、千分之一秒。
----------------------------------------
android中使用sqlite数据库
写一个类继承SQLiteOpenHelper,将来需要使用sqlite数据库时,通过SQLiteOpenHelper的getReadableDatabase()或getWritableData()方法获取SQLiteDatabase 对象。最终通过SQLiteDatabase对象去实现增删改查。
step1.写一个类继承SQLiteOpenHelper
step2.提供构造方法
//Context 为上下文环境 //第二个参数为 数据库名字 //第三个参数 CursorFactory cursor工厂,往往传个null就可以 //第四个参数 为数据库版本 public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); }
//当访问的数据库不存在时,会调用onCreate方法,注意只是创建时调用一次
onCreate
//当构造参数中int version大于创建数据库version时会调用onUpgrage方法
onUpgrade
------
step3.onCreate方法中通过SQLiteDatabase对象创建表
public void onCreate(SQLiteDatabase db) {
String sql = "create table mitt_tb(id integer primary key" +
" autoincrement, " +
" name varchar(20)," +
" age int" +
")";
db.execSQL(sql); //execute sql
}
step4.在MainActivity中使用
dbHelper = new DBHelper(this, "mitt.db", null, 1); SQLiteDatabase db = dbHelper.getWritableDatabase();
或者调用dbHelper.getReadableDatabase()方法此时,因为是第一次访问数据库,所以会创建数据库,并调用SQLiteOpenHelper的onCreate方法。
说明一下:
dbHelper.getWritableDatabase()和dbHelper.getReadableDatabase()
返回值都是SQLiteDatabase对象,通过SQLiteDatabase对象都可以增删改查。
----
1)增
QLiteDatabase db2 = dbHelper.getReadableDatabase(); //ContentValues是键值对结构 ContentValues values = new ContentValues(); values.put("name", name); values.put("age", age); //返回值为新插入的行ID,发生错误时返回-1 long id=db2.insert("mitt_tb", null, values); db2.close();
2)删
SQLiteDatabase db = dbHelper.getReadableDatabase(); int rows = db.delete("mitt_tb", "id=? and name=?", new String[]{String.valueOf(id),name}); //db.delete("mitt_tb", "id="+id+" and name="+name, null); System.out.println("删除了"+rows+"条记录。"); db.close();
3)改
SQLiteDatabase db = dbHelper.getReadableDatabase(); ContentValues values = new ContentValues(); values.put("name", "zhangsan"); int rows = db.update("mitt_tb", values, "id=?", new String[]{2+""}); System.out.println("更新了"+rows+"条记录."); db.close();
4)查
SQLiteDatabase db = dbHelper.getReadableDatabase(); //第一个参数为表名, //第二个参数为查询的列名,如果是查询所有,则可以直接写null //第三个参数为查询条件 //第四个参数为查询参数 //第五个参数为按照什么分组 //第六个参数为对sql的having语句 //第七个参数为按照哪列排序,排序有两种asc,desc;asc为 //从上往下递增,desc为从上往下递减。如:"order by id desc" Cursor cursor = db.query("mitt_tb", new String[]{"id","name","age"}, null, null, null, null, null); cursor.moveToFirst(); while(!cursor.isAfterLast()){ int id = cursor.getInt(0);//0表示第一列,getInt表示返回结果为int String name = cursor.getString(1);//1表示第二列,getString表示放回结果为String int age = cursor.getInt(2);//2表示第三列,getInt表示返回结果为int tv.setText(tv.getText()+"\n"+id+","+name+","+age); cursor.moveToNext(); } cursor.close(); db.close(); //cursor迭代 cursor.moveToFirst(); while(!cursor.isAfterLast()){ cursor.moveToNext(); } while(cursor.moveToNext()){ }