Flutter sqflite中AND语句的使用方法咨询
在sqflite中使用AND条件执行查询的方法
嗨,别发愁啦!sqflite里使用AND条件和标准SQL的写法是完全一致的,只是在Flutter代码里执行的时候有几种更安全、更规范的实现方式,我给你详细说说:
方法1:使用rawQuery执行完整SQL语句
你原本写的SQL语句本身是正确的,直接用rawQuery执行就行,但强烈推荐用占位符?来传递参数,避免SQL注入风险,也不用手动处理字符串转义:
Future<List<Map<String, dynamic>>> fetchMatchingData() async { // 先获取数据库实例 Database db = await openDatabase('your_db_name.db'); String targetVal1 = "some_string"; String targetVal2 = "another_string"; // 带占位符的SQL查询 final results = await db.rawQuery( 'SELECT * FROM table_name WHERE column_1 = ? AND column_2 = ?', [targetVal1, targetVal2], // 占位符对应的参数列表 ); return results; }
方法2:使用封装好的query方法
sqflite提供了更简洁的query方法,你可以在where参数里写AND条件,然后通过whereArgs传值:
Future<List<Map<String, dynamic>>> fetchMatchingDataWithQuery() async { Database db = await openDatabase('your_db_name.db'); String targetVal1 = "some_string"; String targetVal2 = "another_string"; final results = await db.query( 'table_name', // 表名 where: 'column_1 = ? AND column_2 = ?', // WHERE条件 whereArgs: [targetVal1, targetVal2], // 条件对应的参数 ); return results; }
小提示
其实sqflite完全兼容标准SQL语法,所以你之前想写的SELECT * FROM table_name WHERE column_1 = "some_string" AND column_2 = "another_string";本身是有效的,但直接把字符串硬编码进去或者拼接变量会有安全隐患,所以上面两种用占位符的方式才是最佳实践哦~
内容的提问来源于stack exchange,提问作者Reuben Siama
相关产品推荐
相关产品推荐

