# Store images in a database

**URL:** <https://forum.inductiveautomation.com/t/store-images-in-a-database/4589>\
**Category:** Ignition\
**Created:** [June 6, 2012, 4:01pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589 "2012-06-06T16:01:19Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 6, 2012, 4:01pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/1 "2012-06-06T16:01:19Z")

</div>

Hello,

How can I store images from my desktop (or another folder in my pc) in a database connected to Ignition from a project? can anybody help me, please? ![:prayer:](https://us1.discourse-cdn.com/inductiveautomation/original/1X/e5a7e3b63facc151ea73e3b45db7bdb3d4bdc316.gif ":prayer:")

---

<div class="post-metadata">

**Author:** ![James.Lorenz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/james.lorenz/32/3290_2.png) [@James.Lorenz](https://forum.inductiveautomation.com/u/James.Lorenz)\
**Post date:** [June 6, 2012, 5:01pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/2 "2012-06-06T17:01:59Z")

</div>

You can store/read images in a DB using a BLOB datatype, but for Ignition to handle that you will need to create temp files and use scripting functions in system.file. To get a better understanding of your situation, why are you referencing images directly from a database instead of using Ignition’s built in image handling functionality?

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [June 6, 2012, 8:03pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/3 "2012-06-06T20:03:40Z")

</div>

Just as a application example, I may store images from a vision system to track it with the part being made…

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 7, 2012, 9:29am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/4 "2012-06-07T09:29:38Z")

</div>

Hello!

I’m using the following script:

`filename = system.file.openFile() # Ask the user to open a file
if filename != None:
   filedata = system.file.readFileAsBytes(filename)
   system.db.runPrepUpdate("INSERT INTO Files (file_data) VALUES (?)", [filedata])`

And when I select a file and store it in a database (the column name is blob and the datatype is blob) i recieve this error mesage:

![](https://us1.discourse-cdn.com/inductiveautomation/original/2X/4/4074f0cf0c80ea557d100d2447009a3446067915.png)

Why is this happening? how could I solve that?

Thank for your answers

---

<div class="post-metadata">

**Author:** ![James.Lorenz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/james.lorenz/32/3290_2.png) [@James.Lorenz](https://forum.inductiveautomation.com/u/James.Lorenz)\
**Post date:** [June 7, 2012, 3:33pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/5 "2012-06-07T15:33:18Z")

</div>

Your script actually has the correct table name and column name, right? Also, I need the following from you:

- full error message (your image cuts off part of the error)
- what type of file you tried to open

Using the script you provided, I was successfully able to put an image into the database, I just had to change the table name and column name to what I was using.

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 11, 2012, 7:30am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/6 "2012-06-11T07:30:33Z")

</div>

Hello!

Yes, my script has the correct table name and column table name. I’m trying to store a png file. I attached a file with the full error message.

Thank you!  
[ErrorBlob.txt](https://us1.discourse-cdn.com/inductiveautomation/original/2X/1/1eee0c0e1441a9ffa8f16faa72ba9a9cfd7c6dc9.txt) (5.84 KB)

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 11, 2012, 7:34am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/7 "2012-06-11T07:34:55Z")

</div>

I attach what I get if I cast it into a string.  
[array.txt](https://us1.discourse-cdn.com/inductiveautomation/original/2X/9/94fa727d14cbccb4c82c686fdb2333618da1af79.txt) (39 KB)

---

<div class="post-metadata">

**Author:** ![Travis.Cox](https://avatars.discourse-cdn.com/v4/letter/t/b9bd4f/32.png) [@Travis.Cox](https://forum.inductiveautomation.com/u/Travis.Cox)\
**Post date:** [June 11, 2012, 3:07pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/8 "2012-06-11T15:07:22Z")

</div>

Which database are you using? Sometimes you have to cast the value as the appropriate data type. For example, if you are using Microsoft SQL Server you may have to do the following:`CAST(? AS VARBINARY(MAX))`

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 12, 2012, 6:24am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/9 "2012-06-12T06:24:02Z")

</div>

Hello,

I’m using mysql and the type of column is BLOB

---

<div class="post-metadata">

**Author:** ![James.Lorenz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/james.lorenz/32/3290_2.png) [@James.Lorenz](https://forum.inductiveautomation.com/u/James.Lorenz)\
**Post date:** [June 12, 2012, 3:39pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/10 "2012-06-12T15:39:55Z")

</div>

The error said it occurred on line 6, but the script that you posted is only 4 lines, can you post your whole script? Thanks.

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 13, 2012, 7:49am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/11 "2012-06-13T07:49:24Z")

</div>

Hello,

This is the whole script:

[code]path = system.file.openFile()

if path != None:  
bytes = system.file.readFileAsBytes(path)  
event.source.parent.getComponent(‘Label 1’).text = str(bytes)  
system.db.runPrepUpdate(“INSERT INTO blob2 (blob) VALUES (?)”, (bytes))[/code]

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 13, 2012, 7:56am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/12 "2012-06-13T07:56:46Z")

</div>

@Travis.Cox, Do I have to cast the value for mysql?

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [June 13, 2012, 9:57am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/13 "2012-06-13T09:57:33Z")

</div>

I was able to duplicate this.

The value for the PrepUpdate should be a list (enclosed in brackets instead of parentheses). BTW, this needs to be updated in the manual’s example for the readFileAsBytes section.

[code]path = system.file.openFile()

if path != None:  
bytes = system.file.readFileAsBytes(path)  
event.source.parent.getComponent(‘Label 1’).text = str(bytes)  
system.db.runPrepUpdate(“INSERT INTO blobtest (blobdata) VALUES (?)”, [bytes])[/code]

Doing that gets around the coercion issue, but this error now pops up (can’t just be an easy fix, right?) 😆

[code]Traceback (innermost last):  
File “event:actionPerformed”, line 6, in ?  
java.lang.Exception: Error executing system.db.runPrepUpdate(INSERT INTO blobtest (blobdata) VALUES (?), [[B@1420e20], , , false)

```
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:293)

at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:218)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java)

at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:313)

at org.python.core.PyObject. __call__ (PyObject.java)

at org.python.core.PyObject.invoke(PyObject.java)

at org.python.pycode._pyx11.f$0(<event:actionPerformed>:6)

at org.python.pycode._pyx11.call_function(<event:actionPerformed>)

at org.python.core.PyTableCode.call(PyTableCode.java)

at org.python.core.PyCode.call(PyCode.java)

at org.python.core.Py.runCode(Py.java)

at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:394)

at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:139)

at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:247)

at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:55)

at $Proxy0.actionPerformed(Unknown Source)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$000(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

```

Caused by: com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: Gateway Error 601: Cannot run prepared statement when Designer is in read-only mode.

```
at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:280)

at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:276)

at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.runPrepStmt(GatewayInterface.java:443)

at com.inductiveautomation.ignition.client.script.ClientDBUtilities._runPrepStmt(ClientDBUtilities.java:71)

at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:216)

... 54 more

```

java.lang.Exception: java.lang.Exception: Error executing system.db.runPrepUpdate(INSERT INTO blobtest (blobdata) VALUES (?), [[B@1420e20], , , false)

```
at org.python.core.Py.JavaError(Py.java)
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:293)
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:218)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java)
at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:313)
at org.python.core.PyObject. __call__ (PyObject.java)
at org.python.core.PyObject.invoke(PyObject.java)
at org.python.pycode._pyx11.f$0(<event:actionPerformed>:6)
at org.python.pycode._pyx11.call_function(<event:actionPerformed>)
at org.python.core.PyTableCode.call(PyTableCode.java)
at org.python.core.PyCode.call(PyCode.java)
at org.python.core.Py.runCode(Py.java)
at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:394)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:139)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:247)
at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:55)
at $Proxy0.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

```

Ignition v7.2.11 (b209)  
Java: Sun Microsystems Inc. 1.6.0\_30  
[/code]

---

<div class="post-metadata">

**Author:** ![James.Lorenz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/james.lorenz/32/3290_2.png) [@James.Lorenz](https://forum.inductiveautomation.com/u/James.Lorenz)\
**Post date:** [June 13, 2012, 3:45pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/14 "2012-06-13T15:45:17Z")

</div>

SamJaimes, you shouldn’t need to cast for MySQL.

JordanCClark is correct, fixing the end of the prepUpdate call to [bytes] should fix that error. Jordan, it looks like the reason your getting your error is because your designer is in read only mode, if you change it to full read/write that error will go away.

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 14, 2012, 7:53am UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/15 "2012-06-14T07:53:23Z")

</div>

I tried what JordanCClarck suggested and this is what I got:

[code]Traceback (most recent call last):  
File “event:actionPerformed”, line 6, in   
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:322)  
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:245)  
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
at java.lang.reflect.Method.invoke(Unknown Source)

java.lang.Exception: java.lang.Exception: Error executing system.db.runPrepUpdate(INSERT INTO blob2 (blob) VALUES (?), [[B@163d01d], , , false)

```
at org.python.core.PyException.fillInStackTrace(PyException.java:70)
at java.lang.Throwable.<init>(Throwable.java:181)
at java.lang.Exception.<init>(Unknown Source)
at java.lang.RuntimeException.<init>(Unknown Source)
at org.python.core.PyException.<init>(PyException.java:46)
at org.python.core.PyException.<init>(PyException.java:43)
at org.python.core.Py.JavaError(Py.java:481)
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:322)
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:245)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:186)
at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:455)
at org.python.core.PyObject. __call__ (PyObject.java:404)
at org.python.core.PyObject. __call__ (PyObject.java:408)
at org.python.pycode._pyx10.f$0(<event:actionPerformed>:6)
at org.python.pycode._pyx10.call_function(<event:actionPerformed>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1261)
at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:539)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:152)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:261)
at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:55)
at $Proxy13.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

```

Caused by: java.lang.Exception: Error executing system.db.runPrepUpdate(INSERT INTO blob2 (blob) VALUES (?), [[B@163d01d], , , false)  
… 56 more  
Caused by: com.inductiveautomation.ignition.client.gateway\_interface.GatewayException: Unable to read response from Gateway.  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.newGatewayException(GatewayInterface.java:302)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.getResponse(GatewayInterface.java:388)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.sendMessage(GatewayInterface.java:238)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.sendMessage(GatewayInterface.java:229)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.runPrepStmt(GatewayInterface.java:544)  
at com.inductiveautomation.ignition.client.script.ClientDBUtilities.\_runPrepStmt(ClientDBUtilities.java:72)  
at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:243)  
… 54 more  
Caused by: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x1) was found in the CDATA section.  
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)  
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)  
at com.inductiveautomation.ignition.client.gateway\_interface.GatewayInterface.getResponse(GatewayInterface.java:386)  
… 59 more

Ignition v7.4.2 (b953)  
Java: Sun Microsystems Inc. 1.6.0\_24  
[/code]

For sure i’m doing something wrong, but I don’t know what. What I’m trying is:

1 - Button with this script:

[code]path = system.file.openFile()

if path != None:  
bytes = system.file.readFileAsBytes(path)  
event.source.parent.getComponent(‘Label 1’).text = str(bytes)  
system.db.runPrepUpdate(“INSERT INTO blobtest (blobdata) VALUES (?)”, [bytes])[/code]  
2 - Selecting ‘Dibujo.PNG’ from the Desktop  
3 - Inserting it in a database with two columns: Index(int) and Blob(Blob)

---

<div class="post-metadata">

**Author:** ![SamJaimes](https://avatars.discourse-cdn.com/v4/letter/s/a6a055/32.png) [@SamJaimes](https://forum.inductiveautomation.com/u/SamJaimes)\
**Post date:** [June 14, 2012, 3:41pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/16 "2012-06-14T15:41:44Z")

</div>

This is the file i’m trying to store:

![](https://us1.discourse-cdn.com/inductiveautomation/original/2X/e/e6972498ba78a695652567a92cbda6664aaa0e10.PNG)

I made it using paint just to try storing in databases.

---

<div class="post-metadata">

**Author:** ![dave.fogle](https://avatars.discourse-cdn.com/v4/letter/d/43a26b/32.png) [@dave.fogle](https://forum.inductiveautomation.com/u/dave.fogle)\
**Post date:** [June 14, 2012, 4:28pm UTC](https://forum.inductiveautomation.com/t/store-images-in-a-database/4589/17 "2012-06-14T16:28:49Z")

</div>

Just to post the resolution, the blob column had been named 'blob' which was causing the query to throw an error. Once the column name was changed everything began to work as expected.
