我想检索一个base64映像,在oracle DB中存储为CLOB。这样做。我尝试了Retrieve base64 image stored as a CLOB from derby with Worklight adapter
中提到的方法这里使用的驱动程序类是: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。
答案 0 :(得分:0)
TLDR:oracle.sql.CLOB
与java.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转换为二进制文件。