【问题标题】:Java - SQLite Web Service Returning BlobJava - SQLite Web 服务返回 Blob
【发布时间】:2012-02-29 07:48:21
【问题描述】:

我有一个 Java Web 服务正在查询包含 blob 数据的 SQLite 数据库。我正在返回 sql 语句,以便服务的使用者可以插入/更新/删除而不处理数据。我的问题是当我获取 blob 数据时,sqlite-jdbc 驱动程序说 getBlob 函数没有实现。所以我的问题是可行的吗?有没有更好的驱动程序或方法来完成这项任务?

谢谢!

【问题讨论】:

    标签: java web-services sqlite blob


    【解决方案1】:

    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 的长度吗?
    • 您好 Erik,我不确定您是如何将 null 放入 BLOB 中的。在 Java 中这是不可能的(因为在这种情况下你会得到 NullPointerException)。你有不同语言的程序吗?
    • 我想我将不得不采取不同的方式来解决这个问题。感谢您抽出时间 Hakyer!
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2023-03-30
    • 2011-05-12
    • 1970-01-01
    • 2020-01-28
    • 2014-04-21
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多