我正在尝试在Android中执行以下SQL查询:
String names = "'name1', 'name2"; // in the code this is dynamically generated
String query = "SELECT * FROM table WHERE name IN (?)";
Cursor cursor = mDb.rawQuery(query, new String[]{names});
Run Code Online (Sandbox Code Playgroud)
但是,Android不会使用正确的值替换问号.我可以执行以下操作,但是,这不能防止SQL注入:
String query = "SELECT * FROM table WHERE name IN (" + names + ")";
Cursor cursor = mDb.rawQuery(query, null);
Run Code Online (Sandbox Code Playgroud)
如何解决此问题并能够使用IN子句?
在类MediaStore.Files类中,它提到了,
媒体提供程序表,包含媒体存储中所有文件的索引,包括非媒体文件.
我有兴趣查询像PDF这样的非媒体文件.
我正在使用CursorLoader来查询数据库.对于构造函数的第二个参数需要一个开放的参数,它是容易得到媒体类型的音频,图像和视频为他们每个人都有一个EXTERNAL_CONTENT_URI,并INTERNAL_CONTENT_URI为它们定义的常量.
对于MediaStore.Files,没有这样定义的常量.我尝试使用该getContentUri()方法但无法找出参数值volumeName.我尝试给出"/ mnt/sdcard"以及将设备连接到我的系统时出现的卷名但是徒劳无功.
我在Google网上论坛上看到了类似的问题但尚未解决.
编辑:我也尝试使用Uri.fromFile(新文件("/ mnt/sdcard /"))和Uri.parse(新文件("/ mnt/sdcard").toString()),但这也没有用.