Java: 오라클 데이터베이스에 CLOB를 삽입하는 방법
열이 CLOB 데이터 유형인 오라클 데이터베이스에 XML 파일 내용을 작성해야 합니다.어떻게 해야 하나요?
가장 쉬운 방법은 간단히 사용하는 것입니다.
stmt.setString(position, xml);
메소드(자바 메모리에 쉽게 보관할 수 있는 "작은" 문자열), 또는
try {
java.sql.Clob clob =
oracle.sql.CLOB.createTemporary(
connection, false, oracle.sql.CLOB.DURATION_SESSION);
clob.setString(1, xml);
stmt.setClob(position, clob);
stmt.execute();
}
// Important!
finally {
clob.free();
}
시대에 뒤떨어진 아래 루카스 에더의 대답을 참조하십시오.
약 100줄의 코드로 ;-) 여기 예시가 있습니다.
요점:다른 JDBC 드라이버와 달리 Oracle 드라이버는 다음을 지원하지 않습니다.Reader
그리고.InputStream
의 조건으로서INSERT
대신, 당신은 해야 합니다.SELECT
그CLOB
기둥.FOR UPDATE
그리고 나서 편지를 씁니다.
이 코드를 도우미 메소드/클래스로 이동하는 것이 좋습니다.그렇지 않으면 코드의 나머지 부분이 오염됩니다.
이 코드는 저에게 효과가 있었습니다.저는 ojdbc6-11.2.0.2.jar를 사용합니다.
java.sql.Connection con;
javax.xml.bind.Marshaller marshaller;
Clob xmlClob = con.createClob();
try {
try (Writer xmlClobWriter = xmlClob.setCharacterStream(1)) {
m.marshal(jaxbObject, xmlClobWriter);
} // xmlClobWriter.close();
try (PreparedStatement stmt = con.prepareStatement("INSERT INTO table (xml) values(?)")) {
stmt.setClob(1, xmlClob);
stmt.executeUpdate();
}
} finally {
xmlClob.free();
}
xml 컨텐츠를 문자열로 전달합니다.
table1
ID int
XML CLOB
import oracle.jdbc.OraclePreparedStatement;
/*
Your Code
*/
void insert(int id, String xml){
try {
String sql = "INSERT INTO table1(ID,XML) VALUES ("
+ id
+ "', ? )";
PreparedStatement ps = conn.prepareStatement(sql);
((OraclePreparedStatement) ps).setStringForClob(1, xml);
ps.execute();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
}
클로브를 문자열로 변환하는 중:
Clob clob=rs.getClob(2);
String str=(String)clob.getSubString(1,(int)clob.length());
System.out.println("Clob Data is : "+str);
이를 위해 연결 결과 세트를 만들어야 합니다.
결과 집합.TYPE_SCROLL_Sensitive, 결과 집합.CONCUR_UPDATE
Connection con=null;
//initialize connection variable to connect to your database...
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String query="Select MYCLOB from TABLE_NAME for update";
con.setAutoCommit(false);
ResultSet resultset=stmt.executeQuery(query);
if(resultset.next()){
oracle.sql.CLOB clobnew = ((OracleResultSet) rss).getCLOB("MYCLOB");
PrintWriter pw = new PrintWriter(clobnew.getCharacterOutputStream() );
BufferedReader br = new BufferedReader( new FileReader( new File("filename.xml") ) );
String lineIn = null;
while( ( lineIn = br.readLine() ) != null )
pw.println( lineIn );
pw.close();
br.close();
}
con.setAutoCommit(true);
con.commit();
}
참고: 행을 선택하기 위해 작성된 쿼리 끝에 업데이트를 위한 구문을 추가하는 것이 중요합니다.
위의 코드에 따라 XML 파일을 삽입합니다.
당신은 아래 코드로 그것을 매우 잘 할 수 있습니다, 저는 당신에게 xml을 삽입할 코드만 제공합니다. 당신이 다른 일들을 끝냈기를 바랍니다.
import oracle.xdb.XMLType;
//now inside the class......
// this will be to convert xml into string
File file = new File(your file path);
FileReader fileR = new FileReader(file);
fileR.read(data);
String str = new String(data);
// now to enter it into db
conn = DriverManager.getConnection(serverName, userId, password);
XMLType objXml = XMLType.createXML(conn, str);
// inside the query statement put this code
objPreparedstatmnt.setObject(your value index, objXml);
저는 이렇게 했고 잘 작동하고 있습니다.
저도 비슷한 문제가 있었어요.테이블 열 중 하나를 varchar2에서 CLOB로 변경했습니다.자바 코드를 변경할 필요가 없었습니다.적어도 다음 버전의 Oracle 및 jdbc 드라이버를 사용하는 경우 setString(...)만 setClob() etch로 set 메서드를 변경할 필요가 없도록 유지했습니다.
나는 오라클 11g와 드라이버 ojdbc6-11.2.0.4.jar에서 시도했습니다.
CLOB를 설정할 필요가 없습니다.
public static void main(String[] args)
{
try{
System.out.println("Opening db");
Class.forName("oracle.jdbc.driver.OracleDriver");
if(con==null)
con=DriverManager.getConnection("jdbc:oracle:thin:@192.9.200.103:1521: orcl","sas","sas");
if(stmt==null)
stmt=con.createStatement();
int res=9;
String usersSql = "{call Esme_Insertsmscdata(?,?,?,?,?)}";
CallableStatement stmt = con.prepareCall(usersSql);
// THIS THE CLOB DATA
stmt.setString(1,"SS¶5268771¶00058711¶04192018¶SS¶5268771¶00058712¶04192018¶SS¶5268772¶00058713¶04192018¶SS¶5268772¶00058714¶04192018¶SS¶5268773¶00058715¶04192018¶SS¶5268773¶00058716¶04192018¶SS¶5268774¶00058717¶04192018¶SS¶5268774¶00058718¶04192018¶SS¶5268775¶00058719¶04192018¶SS¶5268775¶00058720¶04192018¶");
stmt.setString(2, "bcvbcvb");
stmt.setString(3, String.valueOf("4522"));
stmt.setString(4, "42.25.632.25");
stmt.registerOutParameter(5,OracleTypes.NUMBER);
stmt.execute();
res=stmt.getInt(5);
stmt.close();
System.out.println(res);
}
catch(Exception e)
{
try
{
con.close();
} catch (SQLException e1) {
}
}
}
}
LobBasic 샘플에서 CLOB, BLOB, NLOB 데이터 유형을 사용하는 예를 살펴보겠습니다.
언급URL : https://stackoverflow.com/questions/5549450/java-how-to-insert-clob-into-oracle-database
'programing' 카테고리의 다른 글
서버에 연결 대화 상자에서 캐시된 서버 이름을 제거하는 방법은 무엇입니까? (0) | 2023.07.10 |
---|---|
R 데이터 파일의 주요 차이점은 무엇입니까? (0) | 2023.07.10 |
ggplot2에서 채우기 색상에 질감을 추가하는 방법 (0) | 2023.07.10 |
개체에 대한 모든 속성 목록 가져오기 (0) | 2023.07.05 |
Android Studio 업그레이드 시 "기본 활동을 찾을 수 없음" (0) | 2023.07.05 |