[jython] insertar nulls en Access con jdbc (workaround)
Chema Cortes
pych3m4 en gmail.com
Mie Oct 22 13:34:02 CEST 2008
Tengo un problema al insertar datos SQL NULL en base de datos MsAccess
(con jython y bridge jdbc:odbc).
from com.ziclix.python.sql import zxJDBC as db
rutaMDB="C:/mydb.mdb"
URL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s"%rutaMDB
driver="sun.jdbc.odbc.JdbcOdbcDriver"
con=db.connect(URL,"","",driver)
...
Si ejecuto el insert directamente funciona bien:
cur.execute("INSERT INTO tabla (campo1) values (NULL)")
En cambio, si lo hago parametrizando da problemas:
cur.execute("INSERT INTO tabla (campo1) values (?)",(None,))
Error: error setting index [1] [SQLCode: 0]
[Microsoft][Controlador ODBC Microsoft Access]Tipo de datos SQL no
válido [SQLCode: 67], [SQLState: S1004]
No he encontrado información sobre este fallo y cómo solucionarlo.
Como necesitaba volcar datos desde SGDBs a ficheros MDBs, al final me
he hecho un "workaround" que parece apañar el problema:
def cursor_armoured(conn,coltypes):
from com.ziclix.python.sql import DataHandler
class PyHandler(DataHandler):
def __init__(self, handler, coltypes):
self.handler=handler
self.coltypes=coltypes
def setJDBCObject(self, stmt, index, obj):
md=stmt.getMetaData()
if obj is None:
stmt.setNull(index, self.coltypes[index-1])
else:
self.handler.setJDBCObject(stmt, index, obj)
cur=conn.cursor()
cur.datahandler=PyHandler(cur.datahandler,coltypes)
return cur
cur=cursor_armoured(con,(db.NULL,))
cur.execute("INSERT INTO tabla (campo1) values (?)",(None,))
He buscado por el código fuente de jython (zxJDBC) y no he encontrado
dónde parchearlo. ¿Alguna idea?
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es