先写一个数据库帮助器:

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 本地数据库的更多相关文章

  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. 03-body标签中相关标签-2

    主要内容: 列表标签 <ul>.<ol>.<dl>表格标签 <table>表单标签 <form> 一.列表标签 列表标签分为三种. 无序列表 ...

  2. APP-8.2-Postman应用

    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...

  3. 继承标签extend

    写页面的时候,整体框架是相同的,只有content区是不同的,所以就有了继承的概念: 在content 里面加一个 {%block content%} {% endblock %} 其他框架的继承: ...

  4. gevent mysql

    使用gevent实现mysql并发时,每个greenlet应该独享一个mysql连接,否则,不同的greenlet之间会相互影响. ultramysql doesn't allow you to ma ...

  5. 1047B_Cover Points

    B. Cover Points time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  6. c++复习:STL之理论基础

    1 STL(标准模板库)理论基础 1.1基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之 ...

  7. VC中BSTR、Char和CString类型的转换

    1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char chArray[] = "This is ...

  8. 如何创建Servlet

    //Servlet的生命周期:从Servlet被创建到Servlet被销毁的过程 //一次创建,到处服务 //一个Servlet只会有一个对象,服务所有的请求 /* * 1.实例化(使用构造方法创建对 ...

  9. js高级-面向对象继承

    一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...

  10. Winform 各种属性、方法、控件

    窗体是程序与用户交互的可视界面,窗体也是对象,窗体类定义了生成窗体的模版,实例化一个窗体类就产生了一个窗体. .NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有 ...