Java: How to insert CLOB into oracle database

前端 未结 10 1136
情话喂你
情话喂你 2020-12-03 03:32

I need to write an XML file content into oracle database where the column is of CLOB datatype. How will I do that?

相关标签:
10条回答
  • 2020-12-03 04:02

    OUTDATED See Lukas Eder's answer below.

    With about 100 lines of code ;-) Here is an example.

    The main point: Unlike with other JDBC drivers, the one from Oracle doesn't support using Reader and InputStream as parameters of an INSERT. Instead, you must SELECT the CLOB column FOR UPDATE and then write into the ResultSet

    I suggest that you move this code into a helper method/class. Otherwise, it will pollute the rest of your code.

    0 讨论(0)
  • 2020-12-03 04:05

    You can very well do it with below code, i am giving you just the code to insert xml hope u are done with rest of other things..

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

    I have done like this and it is working fine.

    0 讨论(0)
  • 2020-12-03 04:14

    passing the xml content as string.

    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();
        }
      }
    
    0 讨论(0)
  • 2020-12-03 04:16

    Try this , there is no need to set its a 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) {
    
    
                            }
                        }  
                    }
        }
    
    0 讨论(0)
提交回复
热议问题