17

列が CLOB データ型である Oracle データベースに XML ファイルの内容を書き込む必要があります。どうすればいいですか?

4

10 に答える 10

29

最も簡単な方法は、単純に

stmt.setString(position, xml);

メソッド (Java メモリに簡単に保持できる「小さい」文字列用)、または

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();
}
于 2011-04-05T09:00:28.730 に答える
11

時代遅れ以下のLukas Ederの回答を参照してください。

約 100 行のコードで ;-)以下に例を示します。

要点: 他の JDBC ドライバーとは異なり、Oracle のドライバーは と のReaderパラメーターInputStreamとしての使用をサポートしていませんINSERTSELECT代わりに、CLOBFOR UPDATE書き込む必要があります。ResultSet

このコードをヘルパー メソッド/クラスに移動することをお勧めします。そうしないと、残りのコードが汚染されます。

于 2011-04-05T09:01:09.510 に答える
4

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();
    }
  }
于 2013-03-21T20:10:10.020 に答える
4

このコードは私のために働いた。私は 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();
}
于 2014-03-11T13:26:55.157 に答える
3

clob を文字列に変換する:

Clob clob=rs.getClob(2);      
String str=(String)clob.getSubString(1,(int)clob.length());      
System.out.println("Clob Data is : "+str);
于 2011-06-20T12:37:01.293 に答える
2

この目的のために、接続結果セットを作成する必要があります

ResultSet.TYPE_SCROLL_SENSITIVE、ResultSet.CONCUR_UPDATABLE

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();
}

注:行を選択するために記述されたクエリの最後に update の語句を追加することが重要です...

上記のコードに従って、XML ファイルを挿入します。

于 2011-04-05T09:08:36.343 に答える
2

あなたは以下のコードでそれをうまくやることができます.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);

私はこのようにしましたが、うまく機能しています。

于 2011-10-25T07:29:19.770 に答える