2012-02-07 3 views
1

私は、BLOBデータを含むSQLiteデータベースを照会しているJava Webサービスを持っています。私はサービスのコンシューマがデータを処理するだけで挿入/更新/削除できるように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

を私は、)(ただし、それはNULL終端されている方法をGetBytesメソッドを使用していますので、私は唯一の小さな取得していますデータのビット。この関数をサポートするsqliteドライバを知っていますので、BLOBの長さを取得できますか? –

+0

こんにちはErik、BLOBにどうやってnullを入れたのか分かりません。 Javaでは(このような状況ではNullPointerExceptionが発生するため)不可能です。別の言語のプログラムがありますか? – hakyer

+0

私はこれとは別の道を行く必要があると思う。ハキエル、ありがとう! –