lazycat818
lazycat818
  • 发布:2026-01-15 15:36
  • 更新:2026-01-15 15:37
  • 阅读:21

android.database.sqlite.SQLiteDatabase.rawQuery(sql,args)第二个参数java类型是String[]

分类:uts

android.database.sqlite.SQLiteDatabase.rawQuery(sql,args)第二个参数java类型是String[],uts应该传入什么类型?
android.database.sqlite.SQLiteDatabase.execSQL(sql,args)第二个参数java类型是Object[] ,用:
const args : (any | null)[] = [];
...
execSQL(sql,args.toArray())即可,但toArray()返回数组的元素是any,该怎么转换?

const args : string[] = ['abc'];
cursor = db.rawQuery(sql, args);
返回错误:参数类型不匹配:实际类型为 'UTSArray<String>',预期类型为 'Array<(out) String!>!'

2026-01-15 15:36 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

在 UTS 中处理 Android SQLite API 的参数类型问题时,核心在于 UTS 默认数组类型 UTSArray 与 Java 原生数组类型的差异。根据知识库文档,当 Android API 明确要求 String[]Object[] 类型时(如 rawQueryexecSQL),需使用 toTypedArray() 方法进行转换。

解决方案:

  1. 对于 rawQuery(sql, args)(要求 String[]):

    const args: string[] = ['value1', 'value2'];  
    cursor = db.rawQuery(sql, args.toTypedArray()); // 关键:使用 toTypedArray()
  2. 对于 execSQL(sql, args)(要求 Object[]):

    const args: (any | null)[] = [1, 'text', null];  
    db.execSQL(sql, args.toTypedArray()); // 同样使用 toTypedArray()

原理说明:

  • UTS 中 string[] 实际是 UTSArray<string>,而 Android API 需要 Java 原生 Array<String>
  • toTypedArray() 会将 UTSArray 转换为符合 Java 要求的强类型数组(如 Array<String>Array<Object>
  • 避免使用 toArray(),因其返回 any[] 无法满足类型检查要求

参考文档:UTS插件常见问题 - 如何生成android平台Array对象

内容为 AI 生成,仅供参考

要回复问题请先登录注册