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 ...
随机推荐
- KMPlayer 一打开总是出现右面的窗口 导航区 怎样设置不会自动打开
两步骤第一,右键-外观-标致-管理 删除默认标致 第二,打开hosts文件,位置在 C:\Windows\System32\drivers\etc 在最下面一行加入 127.0.0.1 player. ...
- JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台
JEECG 3.7.3新春版本发布 - 微云快速开发平台 导读 ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...
- APP-11-视觉技术-通用文字识别
1.Postman测试 2.参数 https://cloud.baidu.com/doc/OCR/OCR-API.html#.EC.DF.48.27.9B.69.A4.2C.54.1B.DC.95.6 ...
- DJango之视图函数
一)Django WEB框架 2) request.path和request.get_full_path() 是请求的路径 3)render:页面渲染 4)redirect:页面跳转 3)模板语法: ...
- docker之container
转自:https://www.cnblogs.com/jsonhc/p/7760144.html 运行一个container的本身就是开启一个具有独立namespace的进程 进程有自己的网络,文件系 ...
- 3:while、for 循环语句
循环就是重复的做一件事情.python 中的循环语句有 while 和 for. while 循环 while 循环必须得有一个计数器,否则会变成一个死循环. # 例如这段代码,这段程序运行之后会一直 ...
- 获取jdk支持的编码类型
//获取jdk支持的编码类型 Map<String,Charset> maps = Charset.availableCharsets(); for(Map.Entry<String ...
- WINDOWS之CMD命令
用法 1.切换盘符 2.切换到指定盘符后 在使用命令 cd +路径 一般介绍DOS命令,切换工作目录都是用CD命令,但是我在win7下的DOS中使用CD D:\却一直无法转到D盘. 后来在网上查找,发 ...
- php预定义字符
Php中预定义字符的处理: 1,htmlspecialchars()把一些预定义的字符转换为 HTML 实体. 函数原型:htmlspecialchars(string,quotestyle,char ...
- Implementing a Dispose method
[Implementing a Dispose method] 1.实现System.IDsiposable.Dispose()方法.不能将此方法设置为virtual,子类不能override此方法. ...