如何从存储在Oracle DB中的CLOB列中检索图像

时间:2016-01-20 03:23:18

标签: sql oracle clob

我想检索一个base64映像,在oracle DB中存储为CLOB。这样做。我尝试了Retrieve base64 image stored as a CLOB from derby with Worklight adapter

中提到的方法

https://www.ibm.com/developerworks/community/blogs/dhuyvett/entry/jsonstore_revisited_in_worklight_v6_part_1_the_adapter?lang=en

这里使用的驱动程序类是:oracle.jdbc.driver.OracleDriver。 使用的查询: select * from table_name;

适配器中的代码: var clob = response.resultSet [0] .CLOB_COL; var bytes = clob.getSubString(1,clob.length());

错误: Ecma错误:TypeError:在对象oracle.sql.CLOB中找不到函数getSubString。

2 个答案:

答案 0 :(得分:0)

TLDR:oracle.sql.CLOBjava.sql.CLOB不同。您引用的网站谈论第二种类型,但您正在使用第一种类型。

Oracle JDBC documentation可以看出,oracle.sql.CLOB类型没有方法getSubString也没有getBytes

但是,java.sql.CLOB有您正在寻找的getSubString方法,因为您可以看到in the doc。即使它们看起来非常相似,但它们是来自不同库的不同类型。您需要做的是使用Oracle API中的toJdbc方法将Oracle CLOB转换为Java CLOB。返回的对象将具有您需要的getSubString方法。

因此,从技术上讲,这应该有效:

var clob = response.resultSet[0].CLOB_COL.toJdbc(); // Oracle -> Java
var bytes = clob.getSubString(1, clob.length());

编辑完整性:您还对getBytes方法感到困惑,java.sql.BLOB方法仅存在于import UIKit class TableCell: UITableViewCell { @IBOutlet weak var constraintRedBarWidth: NSLayoutConstraint! @IBOutlet weak var labelTitle: UILabel! @IBOutlet weak var viewBarArea: UIView! @IBOutlet weak var viewRedBar: UIView! } class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var tableData : [CGFloat] = [1, 0.90, 0.70, 0.80,0.50] //percentages override func viewDidLoad() { super.viewDidLoad() } @IBAction func btnReloadTable(sender: AnyObject) { tableView.reloadData() } } extension ViewController: UITableViewDelegate, UITableViewDataSource { func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return tableData.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("TableCell") as! TableCell cell.labelTitle.text = "Item \(indexPath.row + 1)" cell.constraintRedBarWidth.constant = 1 cell.layoutIfNeeded() cell.constraintRedBarWidth.constant = cell.viewBarArea.frame.width * tableData[indexPath.row] UIView.animateWithDuration(0.5, animations: { cell.layoutIfNeeded() }) return cell } } 中。 BLOB和CLOB也有不同的类型。对所有类型和库都要非常小心。它们看起来都一样,但都有自己的API。特别是当您从网络上获取代码时,您确实需要知道您正在使用的类型。

答案 1 :(得分:0)

您可以直接在ResultSet对象上调用getString(),然后在Java中从BASE64转换为二进制文件。