I don't have a lot of experience with SWT, but after browsing the Javadocs I think I found a (partial) solution.
First of all, you need a BLOB field in the database. The data type may be called differently (e.g. binary in SQL Server), but in general that's all BLOB - binary large object. Using JDBC you can use PreparedStatement's setBinaryStream, setBlob or setBytes method to set the data.
So all you then need to do is convert the Image into an InputStream or byte[]. And that's what the Javadocs helped me find for you.
If you take a look at class
Image there is a method called getImageData(). This returns an ImageData instance. That has a public byte[] field called data. You can use that to store the image in the database.
Retrieval is a bit harder but still doable. From the ResultSet use getBinaryStream to get an InputStream. Use this to create a new ImageData instance. Then create a new Image using this ImageData instance and a Device instance. I'm sorry to say that's the bit where my (theoretical) solution falls short. I have no idea how to get an instance from that class.
Edit: sorry, I just re-read your code, and you have already solved the storing issue (and the getting the Device

). You have made one mistake: the ImageData instance returned by personImage.getImageData() is no longer connected to the Image:
Returns an ImageData based on the receiver Modifications made to this ImageData will not affect the Image.
So all you need to do (I think) is replace lines 154-156: