1
我有一個Java Web服務查詢包含blob數據的SQLite數據庫。我正在返回sql語句,以便服務的使用者只需插入/更新/刪除即可處理數據。我的問題是當我得到BLOB數據時,sqlite-jdbc驅動程序說getBlob函數沒有實現。所以我的問題是可以做到的?有沒有更好的驅動程序或方法來完成這項任務?Java-SQLite Web服務返回Blob
謝謝!
我有一個Java Web服務查詢包含blob數據的SQLite數據庫。我正在返回sql語句,以便服務的使用者只需插入/更新/刪除即可處理數據。我的問題是當我得到BLOB數據時,sqlite-jdbc驅動程序說getBlob函數沒有實現。所以我的問題是可以做到的?有沒有更好的驅動程序或方法來完成這項任務?Java-SQLite Web服務返回Blob
謝謝!
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;
}
}
我使用getBytes()方法,但它是NULL終止,所以我只是越來越小數據位。你知道任何支持這個函數的sqlite驅動程序,所以我可以得到blob的長度嗎? – 2012-02-07 21:43:38
嗨艾瑞克,我不知道你是如何將null放入BLOB的。這在Java中是不可能的(因爲在這種情況下你得到了NullPointerException)。你有不同的語言程序? – hakyer 2012-02-07 22:07:06
我想我將不得不採取與此不同的方式。謝謝你的時間Hakyer! – 2012-02-07 22:14:32