1.  

先写一个数据库帮助器:

  1. public class MyDBHelper extends SQLiteOpenHelper {
  2. private static final String DB_NAME = "M-Evolution.db"; //数据库名称
  3. private static final int DB_VERSION = 1; //数据库的版本号
  4. private static MyDBHelper myDBHelper = null; //数据库帮助器的实例
  5. private SQLiteDatabase myDB = null; //数据库的实例
  6. public static final String TABLE_NAME_PRODUCTION = "Production"; //表的名称
  7.  
  8. public MyDBHelper(Context context) {
  9. super(context, DB_NAME, null, DB_VERSION); //根据版本号决定是否执行onUpgrade函数
  10. }
  11.  
  12. public MyDBHelper(Context context, int version) {
  13. super(context, DB_NAME, null, version);
  14. }
  15.  
  16. //利用单例模式获取数据库帮助器的唯一实例
  17. public static MyDBHelper getInstance(Context context, int version){
  18. if(version > 0 && myDBHelper == null){
  19. myDBHelper = new MyDBHelper(context,version);
  20. }else if(myDBHelper == null){
  21. myDBHelper = new MyDBHelper(context);
  22. }
  23. return myDBHelper;
  24. }
  25.  
  26. //打开数据库的读连接
  27. public SQLiteDatabase openReadLink(){
  28. if(myDB == null || !myDB.isOpen()){
  29. myDB = myDBHelper.getReadableDatabase();
  30. }
  31. return myDB;
  32. }
  33.  
  34. //打开数据库的写连接
  35. public SQLiteDatabase openWriteLink(){
  36. if (myDB == null || !myDB.isOpen()){
  37. myDB = myDBHelper.getWritableDatabase();
  38. }
  39. return myDB;
  40. }
  41.  
  42. public void closeLink(){
  43. if(myDB != null && myDB.isOpen()){
  44. myDB.close();
  45. myDB = null;
  46. }
  47. }
  48.  
  49. @Override
  50. public void onCreate(SQLiteDatabase sqLiteDatabase) {
  51. String drop_sql = "DROP TABLE IF EXISTS "+TABLE_NAME_PRODUCTION+";";
  52. sqLiteDatabase.execSQL(drop_sql);
  53. String create_sql = "CREATE TABLE IF NOT EXISTS "+TABLE_NAME_PRODUCTION+"(" +
  54. "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +
  55. "name VARCHAR(10)," +
  56. "weight FLOAT," +
  57. "height LONG," +
  58. "word TEXT);";
  59. sqLiteDatabase.execSQL(create_sql);
  60. }
  61.  
  62. //修改数据库,执行表结构变更语句
  63. @Override
  64. public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
  65.  
  66. }
  67. }

注意:

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

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

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

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

  1. public void insert(int id, String name){
  2. SQLiteDatabase db = getWritableDatabase();
  3. String insert_sql = "INSERT INTO "+TABLE_NAME+"(id,name) values("+String.valueOf(id)+",'"+name+"');";
  4. // 这里注意name两边要有单引号
  5. db.execSQL(insert_sql);
  6. db.close();
  7. //第二种方法:
  8. // SQLiteDatabase db = getWritableDatabase();
  9. // ContentValues values = new ContentValues();
  10. // values.put("id", id);
  11. // values.put("name", name);
  12. // db.insert(TABLE_NAME, null, values);
  13. // db.close();
  14. }
  15.  
  16. public void update(int id, String name) {
  17. SQLiteDatabase db = getWritableDatabase();
  18. String update_sql = "UPDATE "+TABLE_NAME+" SET name = '"+name+"' WHERE id = "+String.valueOf(id);
  19. db.execSQL(update_sql);
  20. db.close();
  21. //第二种方法:
  22. // SQLiteDatabase db = getWritableDatabase();
  23. // String whereClause = "id = ?"; // 主键列名 = ?
  24. // String[] whereArgs = { String.valueOf(id) }; // 主键的值
  25. // ContentValues values = new ContentValues();
  26. // values.put("name", name);
  27. // db.update(TABLE_NAME, values, whereClause, whereArgs);
  28. // db.close();
  29. }
  30.  
  31. public void delete(int id) {
  32. SQLiteDatabase db = getWritableDatabase();
  33. String delete_sql = "DELETE FROM "+TABLE_NAME+" WHERE id = "+String.valueOf(id);
  34. db.execSQL(delete_sql);
  35. db.close();
  36. //第二种方法:
  37. // SQLiteDatabase db = getWritableDatabase();
  38. // String whereClause = "id = ?"; // 主键列名 = ?
  39. // String[] whereArgs = { String.valueOf(id) }; // 主键的值
  40. // db.delete(TABLE_NAME, whereClause, whereArgs);
  41. // db.close();
  42. }
  43.  
  44. public List<String[]> getAllItem(){
  45. SQLiteDatabase db = getReadableDatabase();
  46. List<String[]> list = new ArrayList<>();
  47. String query_sql = "SELECT * FROM "+TABLE_NAME+";";
  48. Cursor cursor = db.rawQuery(query_sql,null);
  49. if (cursor.moveToFirst()){
  50. do {
  51. String[] item = {cursor.getString(0), cursor.getString(1)};
  52. list.add(item);
  53. }while(cursor.moveToNext());
  54. }
  55. return list;
  56. }
  57.  
  58. public void clear(){
  59. db = getWritableDatabase();
  60. String delete_sql = "DROP TABLE IF EXISTS "+TABLE_NAME;
  61. db.execSQL(delete_sql);
  62. db.close();
  63. }
  1. public class MyProductionDB{
  2. public static final String TABLE_NAME_PRODUCTION = "Production"; //表的名称
  3. private static final String KEY_PRODUCTION_ID = "production_id"; //主键:歌曲id
  4. private static final String KEY_PRODUCTION_NAME = "production_name"; //歌曲名字
  5. private static final String KEY_COMPOSER_ID = "composer_id"; //作者id
  6. private static final String KEY_COMPOSER_NICKNAME = "composer_nickname"; //作者昵称
  7. private static final String KEY_PRODUCTION_TIME = "production_time"; //歌曲创作时间:20190422134450
  8. private static final String KEY_PRODUCTION_TYPE = "production_type"; //歌曲创作的方式:0标签,1哼歌,2热歌
  9. private static final String KEY_PRODUCTION_INFO = "production_info"; //标签或者热歌名字等信息
  10. private static final String TAG = "MyProductionDB";
  11.  
  12. private MyDBHelper myDBHelper;
  13.  
  14. public MyProductionDB(Context context) {
  15. myDBHelper = MyDBHelper.getInstance(context);
  16. }
  17.  
  18. public void insert(MyProduction myProduction){
  19. SQLiteDatabase db = myDBHelper.openReadLink();
  20. String sql_query = "SELECT * FROM "+TABLE_NAME_PRODUCTION+" WHERE "+KEY_PRODUCTION_ID+"='"+myProduction.getProduction_id()+"';";
  21. Cursor cursor = db.rawQuery(sql_query, null);
  22. if(cursor.moveToFirst()){
  23. cursor.close();
  24. myDBHelper.closeLink();
  25. update(myProduction);
  26. }
  27. else{
  28. myDBHelper.closeLink();
  29. db = myDBHelper.openWriteLink();
  30. String sql_insert = String.format("INSERT INTO %s (%s,%s,%s,%s,%s,%s) VALUES('%s','%s','%s','%s',%d,'%s');",
  31. TABLE_NAME_PRODUCTION,KEY_PRODUCTION_ID,KEY_PRODUCTION_NAME,KEY_COMPOSER_ID,KEY_COMPOSER_NICKNAME,KEY_PRODUCTION_TIME,KEY_PRODUCTION_TYPE,KEY_PRODUCTION_INFO,
  32. myProduction.getProduction_id(),myProduction.getProduction_name(),myProduction.getComposer_id(), TimeUtils.dateToStr(myProduction.getProduction_time(),"yyyyMMddhhmmss"),myProduction.getProduction_type(),myProduction.getProduction_info());
  33. db.execSQL(sql_insert);
  34. myDBHelper.closeLink();
  35. }
  36. }
  37.  
  38. public void update(MyProduction myProduction){
  39. SQLiteDatabase db = myDBHelper.openWriteLink();
  40. String sql_update = String.format("UPDATE %s SET %s='%s',%s='%s',%s='%s',%s=%d,%s='%s' WHERE %s='%s';", TABLE_NAME_PRODUCTION,
  41. KEY_PRODUCTION_NAME,myProduction.getProduction_name(),
  42. KEY_COMPOSER_ID,myProduction.getComposer_id(),
  43. KEY_COMPOSER_NICKNAME,myProduction.getComposer_nickname(),
  44. KEY_PRODUCTION_TIME,TimeUtils.dateToStr(myProduction.getProduction_time(),"yyyyMMddhhmmss"),
  45. KEY_PRODUCTION_TYPE,myProduction.getProduction_type(),
  46. KEY_PRODUCTION_INFO,myProduction.getProduction_info(),
  47. KEY_PRODUCTION_ID,myProduction.getProduction_id());
  48. db.execSQL(sql_update);
  49. myDBHelper.closeLink();
  50. }
  51.  
  52. public void delete(String production_id){
  53. SQLiteDatabase db = myDBHelper.openWriteLink();
  54. String sql_delete = "DELETE FROM "+TABLE_NAME_PRODUCTION+" WHERE "+KEY_PRODUCTION_ID+"='"+production_id+"';";
  55. db.execSQL(sql_delete);
  56. myDBHelper.closeLink();
  57. }
  58.  
  59. public void clear(){
  60. SQLiteDatabase db = myDBHelper.openWriteLink();
  61. String delete_sql = "DELETE FROM "+TABLE_NAME_PRODUCTION+";";
  62. db.execSQL(delete_sql);
  63. myDBHelper.closeLink();
  64. }
  65. }

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. KMPlayer 一打开总是出现右面的窗口 导航区 怎样设置不会自动打开

    两步骤第一,右键-外观-标致-管理 删除默认标致 第二,打开hosts文件,位置在 C:\Windows\System32\drivers\etc 在最下面一行加入 127.0.0.1 player. ...

  2. JEECG 3.7.3 新春版本发布,企业级JAVA快速开发平台

    JEECG 3.7.3新春版本发布 -  微云快速开发平台 导读           ⊙精美Echart报表 ⊙二维码生成功能 ⊙Online接口改造采用JWT机制 ⊙智能菜单搜索 ⊙代码生成器模板优 ...

  3. 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 ...

  4. DJango之视图函数

    一)Django WEB框架 2) request.path和request.get_full_path() 是请求的路径 3)render:页面渲染 4)redirect:页面跳转 3)模板语法: ...

  5. docker之container

    转自:https://www.cnblogs.com/jsonhc/p/7760144.html 运行一个container的本身就是开启一个具有独立namespace的进程 进程有自己的网络,文件系 ...

  6. 3:while、for 循环语句

    循环就是重复的做一件事情.python 中的循环语句有 while 和 for. while 循环 while 循环必须得有一个计数器,否则会变成一个死循环. # 例如这段代码,这段程序运行之后会一直 ...

  7. 获取jdk支持的编码类型

    //获取jdk支持的编码类型 Map<String,Charset> maps = Charset.availableCharsets(); for(Map.Entry<String ...

  8. WINDOWS之CMD命令

    用法 1.切换盘符 2.切换到指定盘符后 在使用命令 cd +路径 一般介绍DOS命令,切换工作目录都是用CD命令,但是我在win7下的DOS中使用CD D:\却一直无法转到D盘. 后来在网上查找,发 ...

  9. php预定义字符

    Php中预定义字符的处理: 1,htmlspecialchars()把一些预定义的字符转换为 HTML 实体. 函数原型:htmlspecialchars(string,quotestyle,char ...

  10. Implementing a Dispose method

    [Implementing a Dispose method] 1.实现System.IDsiposable.Dispose()方法.不能将此方法设置为virtual,子类不能override此方法. ...