gpt4 book ai didi

java - 使用 JDBC 在 Oracle 数据库上创建 Java

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:58 26 4
gpt4 key购买 nike

我正在尝试使用 JDBC 在 oracle 数据库上创建 Java 源对象。

我要创建的源如下:

create or replace and resolve java source named "BlobIO" as package dbjava;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.io.*;


public class BlobIO {

/**
* Stores a blob into a local file (or even UNC-path)
* @param blob The blob locator that should be stored in a file
* @param filename The filename to write to
* @param bufferSize The buffer size for data transfer
* @return 1 if successful, 0 if failed
*/
public static int blobToFile(java.sql.Blob blob, String filename, int bufferSize)
{
OutputStream os = null;
InputStream is = null;
boolean fail = true;
try {

is = blob.getBinaryStream();
os = new FileOutputStream(filename);
int amountRead = 0;
byte[] buffer = new byte[bufferSize];
while ((amountRead = is.read(buffer, 0, buffer.length)) != -1) {
os.write(buffer, 0, amountRead);
}
is.close();
os.flush();
os.close();
fail = false;
} catch (IOException ex) {
new File(filename).delete();
System.err.println("Could not store blob to file.");
System.err.println("File : " + filename);
System.err.println("Reason : " + ex.getClass().getName() + " : " + ex.getMessage());
fail = true;
} catch (SQLException ex) {
new File(filename).delete();
System.err.println("Could not store blob to file.");
System.err.println("File : " + filename);
System.err.println("Reason : " + ex.getClass().getName() + " : " + ex.getMessage());
fail = true;
} finally {
try {is.close();} catch (Exception ex) {}
try {os.flush();} catch (Exception ex) {}
try {os.close();} catch (Exception ex) {}
}
return fail? 0:1;
}

/**
* Stores a blob into a local file (or even UNC-path)
* @param query The query that should select ONLY the blob field
* @param filename The filename to write to
* @param bufferSize The buffer size for data transfer
* @return 1 if successful, 0 if failed
*/
public static int blobToFile(String query, String filename, int bufferSize) {
try {
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(query);
InputStream is;


if (rset.next())
{
int ret = blobToFile(rset.getBlob(1), filename, bufferSize);
if (rset.next())
{
new File(filename).delete();
System.err.println("Could not store blob to file.");
System.err.println("Blob query : " + query);
System.err.println("File : " + filename);
System.err.println("Reason : too many rows");
rset.close();
stmt.close();
return 0;
} else {
rset.close();
stmt.close();
return ret;
}
} else {
System.err.println("Could not store blob to file.");
System.err.println("Blob query : " + query);
System.err.println("File : " + filename);
System.err.println("Reason : no records retrieved by query");
rset.close();
stmt.close();
return 0;
}
} catch (Exception e) {
System.err.println(e.getMessage());
return 0;
}

}

}
/

我尝试使用 execute 方法处理 CallableStatement,这给了我 error: "Missing IN/OUT parameters"当我尝试在普通 Statement 对象上使用 execute 方法时,出现错误:“

Non supported SQL92 token at position: 262"

有人知道我做错了什么吗?似乎也无法在谷歌上找到任何东西。

编辑:这是我用来尝试执行脚本的代码(字符串 sql 包含您在上面看到的脚本,变量 connConnection对象。

CallableStatement stat = conn.prepareCall(sql);
stat.setEscapeProcessing(false);
stat.execute();

如果我尝试使用 Statement,它是这样的:

Statement stat = conn.createStatement();
stat.execute(sql);

最佳答案

好吧最终找到了问题,它需要是 CallableStatementsetEscapeProcessing(false)

关于java - 使用 JDBC 在 Oracle 数据库上创建 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16141737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com