2012-02-07 62 views
1

我有一個Java Web服務查詢包含blob數據的SQLite數據庫。我正在返回sql語句,以便服務的使用者只需插入/更新/刪除即可處理數據。我的問題是當我得到BLOB數據時,sqlite-jdbc驅動程序說getBlob函數沒有實現。所以我的問題是可以做到的?有沒有更好的驅動程序或方法來完成這項任務?Java-SQLite Web服務返回Blob

謝謝!

回答

5

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; 
} 

} 
+0

我使用getBytes()方法,但它是NULL終止,所以我只是越來越小數據位。你知道任何支持這個函數的sqlite驅動程序,所以我可以得到blob的長度嗎? – 2012-02-07 21:43:38

+0

嗨艾瑞克,我不知道你是如何將null放入BLOB的。這在Java中是不可能的(因爲在這種情況下你得到了NullPointerException)。你有不同的語言程序? – hakyer 2012-02-07 22:07:06

+0

我想我將不得不採取與此不同的方式。謝謝你的時間Hakyer! – 2012-02-07 22:14:32