多数 DBMS都具有交互式创建和管理数据库表的工具,表也可以直接用 SQL语句操纵。这里我主要结合移动端数据库SQLite 来讲解相关的表操作。
SQLite 的操作方式可以看做是一种更简单的文件操作方式。
SQL
创建表
对于不同的 DBMS,要编写不同的表创建脚本,因为有些DBMS数据类型的支持不一样。
- 建表,允许为Null 和不允许为Null的字段
CREATE TABLE `oderlist_new` (
`id` INTEGER NOT NULL,
`goodsName` TEXT,
`quantity` integer,
`item_price` real,
`orderNo` text,
`userId` INTEGER,
`userName` TEXT,
`orderTime` TEXT,
`supplierId` INTEGER,
PRIMARY KEY(`id`)
);
- 建表的时候指定默认值
CREATE TABLE `oderlist_new` (
`id` INTEGER NOT NULL,
`goodsName` TEXT,
`quantity` integer default 1,
`item_price` real,
`orderNo` text,
`userId` INTEGER,
`userName` TEXT,
`orderTime` TEXT,
`supplierId` INTEGER,
PRIMARY KEY(`id`)
);
更新表
1、应该尽量避免在表中包含数据时对其进行更新,而应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动;
2、可以新增字段,但是不要删除和修改字段。
ALTER TABLE 表名
ADD 字段 字段类型(字段长度限制)
- 对新的订单表增加一个supplierName字段,长度设为255
alter table oderlist_new
add supplierName text(255)
执行结果
注意:
使用 ALTER TABLE 要极为小心,应该在进行改动前做完整的备份(表 结构和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的 列,也许无法删除它们。类似地,如果删除了不应该删除的列,可能 会丢失该列中的所有数据。
删除表
DROP TABLE 表名
- 删除刚才创建的订单表
DROP TABLE oderlist_new
执行结果
重命名表
每个 DBMS对表重命名的支持有所不同。
DB2、MariaDB、MySQL、Oracle和 PostgreSQL用户使用 RENAME 语句;
SQL Server用户使用sp_rename 存储过程;
SQLite用户使用 ALTER TABLE 语句。
SQLite in Android
SQLiteDatabase
//1、SQLiteDatabase 数据库对象的操作
//创建或打开数据库
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase();
//打开数据库
SQLiteDatabase.openDatabase();
//执行SQL,没有返回值
db.execSQL();
//插入数据
db.insert();
//更新数据
db.update();
//删除数据
db.delete();
//查询
Cursor cursor = db.query();
Cursor rawCursor = db.rawQuery();
//开启事务
db.beginTransaction();
//结束事务
db.endTransaction();
//当前上下文是否处于事务中
db.inTransaction();
//2、Cursor 游标对象的操作
//游标的移动,正数向下移动,负数向上移动
cursor.move();
//移动到第一行
cursor.moveToFirst();
//移动到最后一行
cursor.moveToLast();
//移动到下一行
cursor.moveToNext();
//移动到上一行
cursor.moveToPrevious();
//移动到指定行
cursor.moveToPosition();
//游标移动到对应行之后,就可以通过游标实体的get方法去获取对应列的值了
SQLiteOpenHelper
https://developer.android.google.cn/reference/android/database/sqlite/SQLiteOpenHelper
用于创建、升级、打开SQLiteDatabase
//3、SQLiteOpenHelper 管理数据库的工具类
SQLiteOpenHelper helper = new MySQLiteOpenHelper();
//以读写的方式打开数据库
SQLiteDatabase readableDatabase = helper.getReadableDatabase();
//以写的方式打开数据库
SQLiteDatabase writableDatabase = helper.getWritableDatabase();
//关闭打开的SQLite数据库
helper.close();
...
/**
* 1、实际项目中很少使用SQLiteDatabase的方法来打开数据库
* 2、一般都是继承SQLiteOpenHelper类,来管理SQLiteDatabase
* 3、通过SQLiteOpenHelper来获取SQLiteDatabase实例来进行相关数据库操作
*/
private class MySQLiteOpenHelper extends SQLiteOpenHelper{
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//初次生成数据库时的回调
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//数据库版本发生改变时的回调
}
}
网友评论