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 ...
随机推荐
- MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
大表分表后每个表的结构相同,可以用sql的union 比如a,b表结构相同可以通过union来联接 select * from aunion allselect * from bwhere.... 其 ...
- Firefox What's New 太难找了
Firefox每次更新版本,不知道更新了什么,找不到Waht‘s New,做个记录! 1.点击mozilla下拉 2.最左侧 MOZILLA>SUPPORT>Firefox 3.https ...
- Mysql索引,有哪几种索引,什么时候该(不该)建索引;SQL怎么进行优化以及SQL关键字的执行顺序
索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 1.按照索引列值的唯一性,索引可分为唯一索引和非唯一索引 非唯一索引:B树索引 crea ...
- 小程序登录&授权&获取用户信息
一 .登录 时序图如下: wx.login() 获取js_code 示例代码: App({ onLaunch: function() { wx.login({ success: ...
- es6新特性之箭头函数
<script> { // es3,es5 var evens = [1, 2, 3, 4, 5]; var odds = evens.map(function (v) { return ...
- 打开Delphi 10.2提示脚本错误的解决方法
HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\18.0\Known IDE Packages $(BDS)\Bin\CommunityToolbar240.bp ...
- python语言中的数据类型
一.内存管理 1.python解释器的垃圾回收机制 垃圾:当一个值上没有人绑定任何变量名时(当引用计数为0),该值就是一个垃圾. python解释器运行时会检测值的引用计数,当引用计数=0该值会被清除 ...
- mysql 忘记密码解决方案
Mysql 忘记root密码的完美解决方法 转载 2016-12-23 作者:MR.QiGao 我要评论 通常在使用Mysql数据库时,如果长时间没有登陆,或者由于工作交接完成度不高,会导 ...
- HTML 样式兼容不同设备类型
在项目中遇到在屏幕上显示的效果和打印时显示的效果不同,可以使用media属性来指定用于不同的媒介时使用的样式. media属性值: 值 描述 screen 计算机屏幕显示(默认) tty 电传打字机以 ...
- node 开始深入
一起学nodejs 讲师: matthew vscode+nodejs4.6 http://list.youku.com/albumlist/show/id_27966955.html?spm=a2h ...