Android - NDK - sqlite

本文详细介绍了在Android中使用NDK进行SQLite数据库操作的步骤,包括开发需求、新建Native C++工程、配置CMakeLists.txt和build.gradle、编写native-lib.cpp文件以及Java端的集成。在操作过程中需要注意的问题和解决办法也一并给出,最后展示了数据库的增删查改操作实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(开发历程:关于AS开发NDK的博客并不多,资源也比较少。对于刚开始接触相关知识也是摸了很多次坑,自己慢慢摸索出来)

数据库的简单操作

1. 开发需要

  • libsqliteX.so
  • classes.jar
  • sqlite3.h

官方下载
提供下载

在这里插入图片描述

2. 新建 Native C++工程

在这里插入图片描述* 这里没有其他需求的话就一直next,最后finish
* 之后导入class.jar包及相关so库,把sqlite3.h(头文件)直接复制在.cpp文件的同一级目录。
如何导入jar包
下图为整个工程目录:
在这里插入图片描述

在这里插入图片描述

3. 配置

CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(sql SHARED native-lib.cpp )


add_library(sqliteX SHARED IMPORTED )
set_target_properties(
        sqliteX
        PROPERTIES IMPORTED_LOCATION
        ${
   CMAKE_SOURCE_DIR}/libs/arm64-v8a/libsqliteX.so)

find_library(log-lib log )

target_link_libraries(sql sqliteX
                       ${
   log-lib} )

build.gradle

//----------添加1--------------
ndk{
   
     abiFilters 'arm64-v8a'
    }


//-----------添加2--------------
sourceSets {
   
        main {
   
            jniLibs.srcDirs = ['libs']
        }
    }

在这里插入图片描述
在这里插入图片描述

4. native-lib.cpp

	#include "sqlite3.h"
	#include <stdio.h>
	#include <stdlib.h>
	#include "android/log.h"
	#define  LOG    "JNILOG"
	#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG,__VA_ARGS__)

	sqlite3 * db;
    char * pErrMsg = 0;
    int ret = 0;
    char* sql;
    sqlite3_stmt * stmt;
  • 打开数据库
	//数据库存放的位置(文件名)
    const char *filename = "storage//emulated//0//1//myText.db";
    /*
     * SQLITE_API int sqlite3_open(const char *filename, sqlite3 **ppDb);
     * 参数1: 数据库存放的位置(文件名)
     * 参数2: 关键数据类型(默认:sqlite3 *,不用管)
     *
     * 如果正常打开,ret为 0(SQLITE_OK)
     * 如果打开失败,ret为其他数
     * 文件名不需要一定存在,如果此文件不存在,sqlite 会自动建立它。
     * 如果它存在,就尝试把它当数据库文件来打开。
     * */
    LOGD("------------打开数据库--------------");
    ret = sqlite3_open(filename, &db);
    if ( ret != SQLITE_OK )
    {
   
        LOGD("打开失败失败,错误码:%d------错误原因:%s",ret,sqlite3_errmsg(db));
        return(-1);
    }
  • 创建表格
 	//创建一个表名叫:MyTet
    //有三个字段:id、name、isExistence
    sql = "create table myText(" \
           "id int primary key not null," \
           "name text not null," \
           "isExistence char(4) not null);";

    /*
     * 执行建表SQL
     * int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *,  char **errmsg );
     *
     * 参数1:关键数据
     * 参数2:sql语句,以/0结尾
     * 参数3:回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数
     * 参数4:void * 是你所提供的指针,你可以传递任何一个指针参数到这里,
     *                  这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL
     * 参数5:错误信息
     * */
    LOGD("------------建表--------------");
    ret = sqlite3_exec( db, sql, 0, 0, &pErrMsg );
    if ( ret != SQLITE_OK )
    {
   
        LOGD("创建表失败,错误码:%d--------错误原因:%s",ret,sqlite3_errmsg(db));
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值