如何在 Android Studio 中使用 Mariadb/J-Connector 将所选图片上传到外部 Mariadb?

问题描述

我正在为我的毕业论文编写应用程序,而我的合作伙伴有一个外部 Mariadb。我可以轻松地在 mariadb 上获取和设置数据,但是每当我们尝试上传图片时,都会遇到以下问题,我不知道是怎么回事。

在我的 SetData Kotlin 类中,我有以下代码

val query =
                "INSERT INTO Profiles (p_name,notification,unit,p_picture) VALUES ('$nam',$noti,$uni,$pic)"
            val stmt: Statement = connect!!.createStatement()
            val rs: ResultSet = stmt.executeQuery(query)

对于将所选图片转换为位图,byteArrays & co。我有这些行:

bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver,imageUri)

var bos = ByteArrayOutputStream()
    bitmap!!.compress(Bitmap.CompressFormat.PNG,100,bos)
    val bArray = bos.toByteArray()
    var p_picture: String = Base64.encodetoString(bArray,Base64.DEFAULT)

然后调用我的函数,在其中传输已经提到的“查询”的参数:

setData.setValues(p_name,p_notification,p_unit,p_picture)

在没有图片的情况下工作(在这种情况下 p_picture 为空)一切正常,数据库现在有一个实体。但是,如果对选定的图片尝试相同的操作,我会在“查询”行中收到以下错误

2021-02-10 17:11:13.899 5974-5974/com.example.dbtesting E/Error 1: (conn=149) 您的 sql 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 'nFS9W5McSY8lBsBvccmsItlfr82Y1mTSrKRfs0/6/09jspHZfN0kqzIzLu4OYB9ORJBTD23N7mJk

附近使用的正确语法

我已经查看了关于 SOF 的其他问题,但没有人想要同样的事情,他们总是用 PHP 来做,而我们与外部数据库有“直接”连接。

Sideinformation:数据库图片的数据类型是BLOP。

所以我的问题很简单,我该怎么做,语法是正确的。也许其他数据类型?也许以不同的方式做?但老实说,我们不会使用 PHP,因为除了这个额外的小功能外,它可以正常工作。

提前致谢!

解决方法

解决方案是使用preparedStatements,像我在我的问题中使用的那样简单的SQL注入,你不会成功。通过使用preparedStatements,现在可以使用setBinaryStream 和getBinaryStream 等函数,并且可以/将用于从外部数据库上传/下载BLOB。我希望有些人在阅读我的答案时会顿悟。 @danblack 的评论对我帮助很大,因为我专注于 PrepareStatements 并找到了一些有用的信息。