SQL 本地数据库
先写一个数据库帮助器:
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 本地数据库的更多相关文章
- (二)HTML5 - Web SQL 本地数据库
简介 WEB SQL Database即本地的SQLite数据库,使用的方式和方法和SQLite基本相同 判断浏览器是否支持 if (!window.openDatabase) { alert('Da ...
- HTML5 — Wed SQL 本地数据库示例
1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF- ...
- SQL Server 本地数据库登录不上 解决方法
sql本地数据库登录不了的话.先看看自己计算机 服务 SQL server (MSSQLSERVER) 没有打开的话,请打开. 今天说的情景模式是 你误删了windows登录:禁用了sa登录:s ...
- HTML5教程之html 5 本地数据库(Web Sql Database)
HTML5的Web SQL Databases(html5 本地数据库)的确很诱惑人,当你发现可以用与mysql查询一样的查询语句来操作本地数据库时,你会发现这东西挺有趣的.今天,我们一起来了解HTM ...
- 【HTML5】HTML5本地数据库(Web Sql Database)
Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...
- 本地数据库(SQL Server)远程连接服务器端服务器
本地数据库(SQL Server 2012) 连接外网服务器的数据库,外网的服务器端需要做如下配置: 1. 首先是要打开 数据的配置管理工具 2. 配置相关的客户端协议,开启TCP/IP 3. 数据库 ...
- 怎样将SQL Azure数据库备份到本地或者Storage
怎样备份SQL Azure数据库到本地或者云存储Storage,可以使用SQL Database Import Export 的功能. 具体操作如下: 用SSMS链接SQL Azure数据库 注意:服 ...
- Sql server之路 (三)添加本地数据库SDF文件
12月25日 今天搞了半天 添加本地数据库Sdf文件到项目里.总是出现问题. 安装环境 Vs2008 没有安装的环境 1.Vs2008 sp1 2. 适用于 Windows 桌面的 Microsoft ...
- 使用SSMS 2014将本地数据库迁移到Azure SQL Database
使用SQL Server Management Studio 2014将本地数据库迁移到Azure SQL Database的过程比较简单,在SSMS2014中,有一个任务选项为“将数据库部署到Win ...
随机推荐
- VS2003在解决方案范围内搜索卡死问题的解决
在Win7系统上使用VS2003的时候,在解决方案范围内搜索某个内容的时候,VS会卡死. 这是一个兼容性问题,Win7系统对VS2003的兼容性不好, 网上有人讲了一种解决方法是: 在vs2003的图 ...
- Linux中的Wheel组的作用
原文:http://www.360doc.com/content/11/0505/10/4644186_114496525.shtml Linux中的Wheel组的作用(用自己的话翻译的) (原文) ...
- bootsrap Collapse用法
collapse用处还是挺多的. 使用方法先看看bootstrap官方文档:https://v3.bootcss.com/javascript/#collapse You can use a link ...
- 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
Minidao 1.6.2 版本发布,轻量级Java持久化框架(Hibernate完美助手) Minidao产生初衷? 采用Hibernate的J2EE项目都有一个痛病,针对复杂业务SQL,hiber ...
- Java中==号与equals()方法的区别
String str1 = new String("abc"); String str2 = new String("abc"); System.out.pri ...
- APP-7-百度地图移动轨迹
1.代码部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...
- vue 源码阅读记录
0.webpack默认引入的是vue.runtime.common.js,并不是vue.js,功能有略微差别,不影响使用 1.阅读由ts编译后的js: 入口>构造函数 >定义各类方法 &g ...
- js判断网页是否加载完毕
1. document.onreadystatechange = function () { if(document.readyState=="complete") { docum ...
- ElasticSearch match, match_phrase, term区别
1.term结构化字段查询,匹配一个值,且输入的值不会被分词器分词. 比如查询条件是: { "query":{ "term":{ "foo" ...
- leetcode ex3 找出穿过最多点的直线 Max Points on a Line
题目 https://oj.leetcode.com/problems/max-points-on-a-line/ 答案与分析 http://www.aiweibang.com/yuedu/18326 ...