SQLiteはBLOBデータ型をサポートしています。 Sqlitejdbc driverはResultSet#getBlob()メソッドをサポートしていませんが、BLOBはサポートされています。 ResultSet#getBytes()メソッドを使用するだけです。ここではサンプルコードは(私はそれをシンプルにするために、このコードでは、適切な例外処理を入れていない):
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
public class SQLiteTest {
public static void main(String[] args) throws SQLException,
ClassNotFoundException {
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager
.getConnection("jdbc:sqlite:test.db");
Statement statement = connection.createStatement();
createTable(statement);
insertBlob(connection);
byte[] bytes = query(statement);
System.out.println(Arrays.toString(bytes));
statement.close();
connection.close();
}
private static void createTable(Statement statement) throws SQLException {
statement.execute("CREATE TABLE test (data BLOB)");
}
private static void insertBlob(Connection connection) throws SQLException {
PreparedStatement pStatement = connection
.prepareStatement("INSERT INTO test VALUES (?)");
pStatement.setBytes(1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
pStatement.execute();
pStatement.close();
}
private static byte[] query(Statement statement) throws SQLException {
ResultSet rs = statement.executeQuery("SELECT data FROM test");
byte[] bytes = rs.getBytes(1);
return bytes;
}
}
を私は、)(ただし、それはNULL終端されている方法をGetBytesメソッドを使用していますので、私は唯一の小さな取得していますデータのビット。この関数をサポートするsqliteドライバを知っていますので、BLOBの長さを取得できますか? –
こんにちはErik、BLOBにどうやってnullを入れたのか分かりません。 Javaでは(このような状況ではNullPointerExceptionが発生するため)不可能です。別の言語のプログラムがありますか? – hakyer
私はこれとは別の道を行く必要があると思う。ハキエル、ありがとう! –