OS X上的SQLite JDBC将BLOB中的空字节数组存储和检索为null
我很惊讶,我在谷歌上找不到关于这个的任何东西 我在应用程序中使用Sqlite jdbc 3.7.2。在Windows上,当我在BLOB字段中存储空字节数组时,SQLite列中的值为空。如果我在MacOS上也这样做,它将为空 在MacOS上,我现在得到很多NullPointerException,因为从DB返回的是null值,而不是空字节数组 我发现的唯一类似问题是 有没有人经历过同样的问题?有没有一个简单的方法来改变它 以下是表格结构:OS X上的SQLite JDBC将BLOB中的空字节数组存储和检索为null,sqlite,jdbc,null,bytearray,is-empty,Sqlite,Jdbc,Null,Bytearray,Is Empty,我很惊讶,我在谷歌上找不到关于这个的任何东西 我在应用程序中使用Sqlite jdbc 3.7.2。在Windows上,当我在BLOB字段中存储空字节数组时,SQLite列中的值为空。如果我在MacOS上也这样做,它将为空 在MacOS上,我现在得到很多NullPointerException,因为从DB返回的是null值,而不是空字节数组 我发现的唯一类似问题是 有没有人经历过同样的问题?有没有一个简单的方法来改变它 以下是表格结构: CREATE TABLE IF NOT EXISTS My
CREATE TABLE IF NOT EXISTS MyTable(uid INTEGER, aNum INTEGER, bNum INTEGER, aText TEXT, cNum INTEGER, dNum INTEGER, data BLOB, mask BLOB, bdata BLOB, PRIMARY KEY(uid, aNum, bNum, aText))
以下是插入的语句:
INSERT INTO MyTable VALUES(?,?,?,?,?,?,?,?,?)
在Java中,我这样做是为了将数据存储在sqlite中:
String query="INSERT INTO MyTable VALUES(?,?,?,?,?,?,?,?,?)";
PreparedStatement ret = this._connection.prepareStatement(query)
preparedStatement.setInt(1, 123);
//...
preparedStatement.setBytes(7, new byte[0]);
preparedStatement.setBytes(8, new byte[]{(byte)1,(byte)2});
preparedStatement.setBytes(9, new byte[]{(byte)2,(byte)3});
preparedStatement.execute();
要检索它,请执行以下操作:
现在数据为空,而不是空字节数组,但仅在OSX上。
谢谢显示存储空字节数组的代码。@CL.我按照您的要求添加了代码。
[此处的空字节数组]
不是有效的Java。@CL.;-)干得好。我甚至还为您注释了“…”,在uid=123的MyTable中,selecttypeof(data)的输出是什么?您是否在OSX上执行Java代码?
final byte[] data = resSet.getBytes(7);