先写一个数据库帮助器:

public class MyDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "M-Evolution.db"; //数据库名称
private static final int DB_VERSION = 1; //数据库的版本号
private static MyDBHelper myDBHelper = null; //数据库帮助器的实例
private SQLiteDatabase myDB = null; //数据库的实例
public static final String TABLE_NAME_PRODUCTION = "Production"; //表的名称 public MyDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION); //根据版本号决定是否执行onUpgrade函数
} public MyDBHelper(Context context, int version) {
super(context, DB_NAME, null, version);
} //利用单例模式获取数据库帮助器的唯一实例
public static MyDBHelper getInstance(Context context, int version){
if(version > 0 && myDBHelper == null){
myDBHelper = new MyDBHelper(context,version);
}else if(myDBHelper == null){
myDBHelper = new MyDBHelper(context);
}
return myDBHelper;
} //打开数据库的读连接
public SQLiteDatabase openReadLink(){
if(myDB == null || !myDB.isOpen()){
myDB = myDBHelper.getReadableDatabase();
}
return myDB;
} //打开数据库的写连接
public SQLiteDatabase openWriteLink(){
if (myDB == null || !myDB.isOpen()){
myDB = myDBHelper.getWritableDatabase();
}
return myDB;
} public void closeLink(){
if(myDB != null && myDB.isOpen()){
myDB.close();
myDB = null;
}
} @Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String drop_sql = "DROP TABLE IF EXISTS "+TABLE_NAME_PRODUCTION+";";
sqLiteDatabase.execSQL(drop_sql);
String create_sql = "CREATE TABLE IF NOT EXISTS "+TABLE_NAME_PRODUCTION+"(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
"name VARCHAR(10)," +
"weight FLOAT," +
"height LONG," +
"word TEXT);";
sqLiteDatabase.execSQL(create_sql);
} //修改数据库,执行表结构变更语句
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { }
}

注意:

1、onCreate在安装完APP后只会执行一次(删除后再次安装才会执行),增加DB_VERSION的值会执行onUpgrad函数。

2、onCreate函数中不要将db给close掉,不然的话,构建函数中获取数据库会报错。

3、如果是多个SQLiteOpenHelper类,那么只会执行其中一个类的onCreate;所以,若有多个表需要建立,则只编写一个SQLiteOpenHelper类。

接着另写一个类对数据库帮助器进行操作,完成“增删查改”,这里只展示“增删查改”的部分代码:

public void insert(int id, String name){
SQLiteDatabase db = getWritableDatabase();
String insert_sql = "INSERT INTO "+TABLE_NAME+"(id,name) values("+String.valueOf(id)+",'"+name+"');";
// 这里注意name两边要有单引号
db.execSQL(insert_sql);
db.close();
//第二种方法:
// SQLiteDatabase db = getWritableDatabase();
// ContentValues values = new ContentValues();
// values.put("id", id);
// values.put("name", name);
// db.insert(TABLE_NAME, null, values);
// db.close();
} public void update(int id, String name) {
SQLiteDatabase db = getWritableDatabase();
String update_sql = "UPDATE "+TABLE_NAME+" SET name = '"+name+"' WHERE id = "+String.valueOf(id);
db.execSQL(update_sql);
db.close();
//第二种方法:
// SQLiteDatabase db = getWritableDatabase();
// String whereClause = "id = ?"; // 主键列名 = ?
// String[] whereArgs = { String.valueOf(id) }; // 主键的值
// ContentValues values = new ContentValues();
// values.put("name", name);
// db.update(TABLE_NAME, values, whereClause, whereArgs);
// db.close();
} public void delete(int id) {
SQLiteDatabase db = getWritableDatabase();
String delete_sql = "DELETE FROM "+TABLE_NAME+" WHERE id = "+String.valueOf(id);
db.execSQL(delete_sql);
db.close();
//第二种方法:
// SQLiteDatabase db = getWritableDatabase();
// String whereClause = "id = ?"; // 主键列名 = ?
// String[] whereArgs = { String.valueOf(id) }; // 主键的值
// db.delete(TABLE_NAME, whereClause, whereArgs);
// db.close();
} public List<String[]> getAllItem(){
SQLiteDatabase db = getReadableDatabase();
List<String[]> list = new ArrayList<>();
String query_sql = "SELECT * FROM "+TABLE_NAME+";";
Cursor cursor = db.rawQuery(query_sql,null);
if (cursor.moveToFirst()){
do {
String[] item = {cursor.getString(0), cursor.getString(1)};
list.add(item);
}while(cursor.moveToNext());
}
return list;
} public void clear(){
db = getWritableDatabase();
String delete_sql = "DROP TABLE IF EXISTS "+TABLE_NAME;
db.execSQL(delete_sql);
db.close();
}
public class MyProductionDB{
public static final String TABLE_NAME_PRODUCTION = "Production"; //表的名称
private static final String KEY_PRODUCTION_ID = "production_id"; //主键:歌曲id
private static final String KEY_PRODUCTION_NAME = "production_name"; //歌曲名字
private static final String KEY_COMPOSER_ID = "composer_id"; //作者id
private static final String KEY_COMPOSER_NICKNAME = "composer_nickname"; //作者昵称
private static final String KEY_PRODUCTION_TIME = "production_time"; //歌曲创作时间:20190422134450
private static final String KEY_PRODUCTION_TYPE = "production_type"; //歌曲创作的方式:0标签,1哼歌,2热歌
private static final String KEY_PRODUCTION_INFO = "production_info"; //标签或者热歌名字等信息
private static final String TAG = "MyProductionDB"; private MyDBHelper myDBHelper; public MyProductionDB(Context context) {
myDBHelper = MyDBHelper.getInstance(context);
} public void insert(MyProduction myProduction){
SQLiteDatabase db = myDBHelper.openReadLink();
String sql_query = "SELECT * FROM "+TABLE_NAME_PRODUCTION+" WHERE "+KEY_PRODUCTION_ID+"='"+myProduction.getProduction_id()+"';";
Cursor cursor = db.rawQuery(sql_query, null);
if(cursor.moveToFirst()){
cursor.close();
myDBHelper.closeLink();
update(myProduction);
}
else{
myDBHelper.closeLink();
db = myDBHelper.openWriteLink();
String sql_insert = String.format("INSERT INTO %s (%s,%s,%s,%s,%s,%s) VALUES('%s','%s','%s','%s',%d,'%s');",
TABLE_NAME_PRODUCTION,KEY_PRODUCTION_ID,KEY_PRODUCTION_NAME,KEY_COMPOSER_ID,KEY_COMPOSER_NICKNAME,KEY_PRODUCTION_TIME,KEY_PRODUCTION_TYPE,KEY_PRODUCTION_INFO,
myProduction.getProduction_id(),myProduction.getProduction_name(),myProduction.getComposer_id(), TimeUtils.dateToStr(myProduction.getProduction_time(),"yyyyMMddhhmmss"),myProduction.getProduction_type(),myProduction.getProduction_info());
db.execSQL(sql_insert);
myDBHelper.closeLink();
}
} public void update(MyProduction myProduction){
SQLiteDatabase db = myDBHelper.openWriteLink();
String sql_update = String.format("UPDATE %s SET %s='%s',%s='%s',%s='%s',%s=%d,%s='%s' WHERE %s='%s';", TABLE_NAME_PRODUCTION,
KEY_PRODUCTION_NAME,myProduction.getProduction_name(),
KEY_COMPOSER_ID,myProduction.getComposer_id(),
KEY_COMPOSER_NICKNAME,myProduction.getComposer_nickname(),
KEY_PRODUCTION_TIME,TimeUtils.dateToStr(myProduction.getProduction_time(),"yyyyMMddhhmmss"),
KEY_PRODUCTION_TYPE,myProduction.getProduction_type(),
KEY_PRODUCTION_INFO,myProduction.getProduction_info(),
KEY_PRODUCTION_ID,myProduction.getProduction_id());
db.execSQL(sql_update);
myDBHelper.closeLink();
} public void delete(String production_id){
SQLiteDatabase db = myDBHelper.openWriteLink();
String sql_delete = "DELETE FROM "+TABLE_NAME_PRODUCTION+" WHERE "+KEY_PRODUCTION_ID+"='"+production_id+"';";
db.execSQL(sql_delete);
myDBHelper.closeLink();
} public void clear(){
SQLiteDatabase db = myDBHelper.openWriteLink();
String delete_sql = "DELETE FROM "+TABLE_NAME_PRODUCTION+";";
db.execSQL(delete_sql);
myDBHelper.closeLink();
}
}

SQL 本地数据库的更多相关文章

  1. (二)HTML5 - Web SQL 本地数据库

    简介 WEB SQL Database即本地的SQLite数据库,使用的方式和方法和SQLite基本相同 判断浏览器是否支持 if (!window.openDatabase) { alert('Da ...

  2. HTML5 — Wed SQL 本地数据库示例

    1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF- ...

  3. SQL Server 本地数据库登录不上 解决方法

    sql本地数据库登录不了的话.先看看自己计算机 服务 SQL server  (MSSQLSERVER)  没有打开的话,请打开. 今天说的情景模式是  你误删了windows登录:禁用了sa登录:s ...

  4. HTML5教程之html 5 本地数据库(Web Sql Database)

    HTML5的Web SQL Databases(html5 本地数据库)的确很诱惑人,当你发现可以用与mysql查询一样的查询语句来操作本地数据库时,你会发现这东西挺有趣的.今天,我们一起来了解HTM ...

  5. 【HTML5】HTML5本地数据库(Web Sql Database)

    Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...

  6. 本地数据库(SQL Server)远程连接服务器端服务器

    本地数据库(SQL Server 2012) 连接外网服务器的数据库,外网的服务器端需要做如下配置: 1. 首先是要打开 数据的配置管理工具 2. 配置相关的客户端协议,开启TCP/IP 3. 数据库 ...

  7. 怎样将SQL Azure数据库备份到本地或者Storage

    怎样备份SQL Azure数据库到本地或者云存储Storage,可以使用SQL Database Import Export 的功能. 具体操作如下: 用SSMS链接SQL Azure数据库 注意:服 ...

  8. Sql server之路 (三)添加本地数据库SDF文件

    12月25日 今天搞了半天 添加本地数据库Sdf文件到项目里.总是出现问题. 安装环境 Vs2008 没有安装的环境 1.Vs2008 sp1 2. 适用于 Windows 桌面的 Microsoft ...

  9. 使用SSMS 2014将本地数据库迁移到Azure SQL Database

    使用SQL Server Management Studio 2014将本地数据库迁移到Azure SQL Database的过程比较简单,在SSMS2014中,有一个任务选项为“将数据库部署到Win ...

随机推荐

  1. beego orm 时间相差八小时

    使用beego框架,前端调用api插入一条数据到mysql,时间差了8个小时,fuck!!! 解决办法: 在db的url后面加上时区- dbDataSource = root:test@tcp(192 ...

  2. FDQuery 怎么能插入NULL参数

    [FireDAC][Phys][MSSQL]-335. Parameter [fieldAA] data type is unknown. Hint: specify TFDParam.DataTyp ...

  3. Others-常用数学符号大全

    常用数学符号读法大全 大写 小写 英文注音 国际音标注音 中文注音 Α α alpha alfa 阿耳法 Β β beta beta 贝塔 Γ γ gamma gamma 伽马 Δ δ deta de ...

  4. C语言复习:结构体

    结构体专题 01.结构体类型定义及结构体变量定义     char c1,char c2, char name[62]; int age     char name[62]; int age,char ...

  5. Zabbix实现自动发现端口并监控

    1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...

  6. jenkins系列_使用scp命令进行远程文件复制遇到的坑

    转自:https://blog.csdn.net/kingboyworld/article/details/78905553 一.场景介绍 项目为微服务项目,使用jenkins进行统一部署.基本思路是 ...

  7. [namespace]PHP命名空间的使用基础

    -------------------------------------------------------------------------------------------------- 一 ...

  8. 使用DOM的方法获取所有li元素,然后使用jQuery()构造函数把它封装为jQuery对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. k近邻算法(KNN)

    k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. from sklearn.model_selection ...