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 ...
随机推荐
- javascript,移动划过超链接鼠标变手型
用css控制鼠标样式的语法如下:<span style="cursor:*">文本或其它页面元素</span>把 * 换成如下15个效果的一种: 下面是对这 ...
- SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析
最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jquery ajax跨 ...
- call 和 apply
call和apply作用一样,都是为了转移this,区别在于传入参数的方式不同. this指当前方法所在的对象,如果方法的外面没有对象,则默认是window.由于闭包虽在调用的方法中,但是在创建的时候 ...
- Zeosdbo-Query使用
with DataModule1.Zlxz_zy_Query do begin Close; SQL.Clear; SQL.Add( ...
- Rafy源码解读 笔记(一) DbMigration
主要功能,提供数据库的升级回滚和变迁操作. 整个模块的都是通过DbMigrationContext这个类来体现的,回滚或升级由若干个子操作完成,每个子操作被封装成一个类MigrationOperati ...
- linux内核中的const成员是否可以修改?
本文的基础知识:由于前半部分内容是转的,且不知道原文出处,没法给出原文地址,大家自行百度 const的实现机制 const究竟是如何实现的呢?对于声明为const的内置类型,例如int,short,l ...
- Linux awk命令使用方法
awk是linux上非常好用的文本处理工具,常用于指定列的处理,包括获取指定列的内容.根据指定列匹配关系输出等文本处理.本文主要描述awk命令的基本语法.正则表达式与操作符的使用.常用内置变量的含义和 ...
- C# DataTable使用方法详解--删除表数据
在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 1.添加引用 1 u ...
- Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】
先简单说说RxJava的用途与价值 原文出处:Android RxJava 2 的用法 用途: 异步 (也就是开线程跳转) 价值: 面对复杂的逻辑,它依然 简洁 ,代码 易读 RxJava2 与 Rx ...
- spark pyspark 常用算法实现
利用Spark-mllab进行聚类,分类,回归分析的代码实现(python) http://www.cnblogs.com/adienhsuan/p/5654481.html 稀疏向量: 关于Spar ...