【问题标题】:How to send the data CLOB AND BLOB types to the database from java如何从 java 将数据 CLOB 和 BLOB 类型发送到数据库
【发布时间】:2012-11-15 13:11:32
【问题描述】:

我需要使用 java 将一些 clob 和 blob 类型的数据插入到我的数据库中。但是通过使用下面显示的代码来完成这项任务

           import java.io.*;
           import java.sql.*;
           import java.util.*;
           public class InsertusrProf
           {
    public static Connection prepareConnection()throws ClassNotFoundException,SQLException
{
    String dcn="oracle.jdbc.driver.OracleDriver";
    String url="jdbc:oracle:thin:@JamesPJ-PC:1521:skprk";
    String usname="system";
    String pass="Theking123";
    Class.forName(dcn);
    return DriverManager.getConnection(url,usname,pass);
}
public static void InsTable(String uname,Blob photo1,Blob video1,Blob music1,Clob notes1,Clob messages1,String link,String frd,Clob cmt,String lik,String ulik,Blob shrs,Clob qst,Clob answ,Blob updt,String thms,Clob wrd,String langs,String rlgn,String prvc,String hbs,String fvt,String qlf,String comm,String grp,String pgs,Clob ntfcn,String rqst,Clob tps,String cty,String tg)throws ClassNotFoundException,SQLException
{
    StringBuilder sb=new StringBuilder(1024);;
    sb.append("insert into ").append(uname).append("(PHOTO,VIDEO,MUSIC,NOTES,MESSAGES,LINKS,FRIENDS,COMMENTS,LIKES,UNLIKES,SHARES,QSTNS,ANS,UPDATES,THEMS,WORDS,LANGUAGES,RELEGION,PRIVACY,HOBBIES,FAV,QULIFICATION,COMMUNITIES,GRPS,PAGES,NOTIFICATION,REQUESTS,TIPS,CITY,TAG)values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    String stmnt=sb.toString();
    Connection con=prepareConnection();
    PreparedStatement ps=con.prepareStatement(stmnt);
    ps.setString(1,uname);

    File fl=new File("photo1");
    FileInputStream fis=new FileInputStream(fl);
    ps.setBinaryStream(2,fis,(int)fl.length());

    File fl1=new File("music1");
    FileInputStream fis1=new FileInputStream(fl1);
    ps.setBinaryStream(3,fis1,(int)fl1.length());

    File fl2=new File("video1");
    FileInputStream fis2=new FileInputStream(fl2);
    ps.setBinaryStream(4,fis2,(int)fl2.length());

    File fl3=new File("shrs");
    FileInputStream fis3=new FileInputStream(fl3);
    ps.setBinaryStream(12,fis3,(int)fl3.length());

    File fl4=new File("updt");
    FileInputStream fis4=new FileInputStream(fl4);
    ps.setBinaryStream(15,fis4,(int)fl4.length());

    File fl5=new File(notes1);
    FileReader fr=new FileReader(fl5);
    ps.setCharacterStream(5,(int)fl5.length());

    File fl6=new File("messages1");
    FileReader fr1=new FileReader(fl6);
    ps.setCharacterStream(6,(int)fl6.length());

    ps.setString(7,"link");

    ps.setString(8,"frd");

    File fl7=new File("cmt");
    FileReader fr2=new FileReader(fl7);
    ps.setCharacterStream(9,(int)fl7.length());

    ps.setString(10,"lik");

    ps.setString(11,"ulik");

    File fl8=new File("qst");
    FileReader fr3=new FileReader(fl8);
    ps.setCharacterStream(13,(int)fl8.length());

    File fl9=new File("answ");
    FileReader fr4=new FileReader(fl9);
    ps.setCharacterStream(14,(int)fl9.length());

    ps.setString(16,"thms");

    File fl0=new File("wrd");
    FileReader fr5=new FileReader(fl0);
    ps.setCharacterStream(17,(int)fl0.length());

    ps.setString(18,"langs");

    ps.setString(19,"rlgn");

    ps.setString(20,"prvc");

    ps.setString(21,"hbc");

    ps.setString(22,"fvt");

    ps.setString(23,"qlf");

    ps.setString(24,"comm");

    ps.setString(25,"grp");

    ps.setString(26,"pgs");

    File fls=new File("ntfcn");
    FileReader fr=new FileReader(fls);
    ps.setCharacterStream(27,(int)fls.length());

    ps.setString(28,"rqst");

    File fls1=new File("tps");
    FileReader fr7=new FileReader(fls1);
    ps.setCharacterStream(29,(int)fls1.length());

    ps.setString(30,"cty");

    ps.setString(31,"tg");

    int i=executeUpdate();

    System.out.println("<<<<<<<Record Inserted Successfully>>>>>>> Count :"+i);

    con.close();
}
public static void main(String args[])throws Exception
{
    String uname="james";
    Blob photo1=img1.jpeg;
    Blob video1="Wildlife.wma";
    Blob music1="Lelepadi.mp3";
    Clob notes1="CreateTable.java";
    Clob messages1="CreateTable.java";
    String link="aaaaa";
    String frd="bbbb";
    Clob cmt="CreateTable.java";
    String lik="asadssfds";
    String ulik="zxzxxzcx";
    Blob shrs="img1.jpeg";
    Clob qst="CreateTable.java";
    Clob answ="CreateTable.java";
    Blob updt="img1.jpeg";
    String thms="bgfvdft";
    Clob wrd="CreateTable.java";
    String langs="erdgdfgf";
    String rlgn="bngfhgfh";
    String prvc="zxcsdw";
    String hbs="bgnbvc";
    String fvt="tgfhfghjfgh";
    String qlf="mklkopi";
    String comm="mbnfchgeshgw";
    String grp="bgyeadb";
    String pgs="hfhfj";
    Clob ntfcn="CreateTable.java";
    String rqst="ghfhgfh";
    Clob tps="CreateTable.java";
    String cty="jjkhgjghjk";
    String tg="qwewr";
    InsTable(uname,photo1,video1,music1,notes1,messages1,link,frd,cmt,lik,ulik,shrs,qst,answ,updt,thms,wrd,langs,rlgn,prvc,hbs,fvt,qlf,comm,grp,pgs,ntfcn,rqst,tps,cty,tg);
}
}

以上代码产生以下错误

 C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:45: error: no suitable   constructor found for File(Clob)
    File fl5=new File(notes1);
             ^
constructor File.File(URI) is not applicable
  (actual argument Clob cannot be converted to URI by method invocation conversion)
constructor File.File(File,String) is not applicable
  (actual and formal argument lists differ in length)
constructor File.File(String,String) is not applicable
  (actual and formal argument lists differ in length)
constructor File.File(String) is not applicable
  (actual argument Clob cannot be converted to String by method invocation conversion)
constructor File.File(String,File) is not applicable
  (actual and formal argument lists differ in length)
constructor File.File(String,int) is not applicable
  (actual and formal argument lists differ in length)
   C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:47: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(5,(int)fl5.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
 C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:51: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(6,(int)fl6.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
  C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:59: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(9,(int)fl7.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
    C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:67: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(13,(int)fl8.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
    C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:71: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(14,(int)fl9.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
   C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:77: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(17,(int)fl0.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
  C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:98: error: variable fr is already defined in method InsTable(String,Blob,Blob,Blob,Clob,Clob,String,String,Clob,String,String,Blob,Clob,Clob,Blob,String,Clob,String,String,String,String,String,String,String,String,String,Clob,String,Clob,String,String)
    FileReader fr=new FileReader(fls);
               ^
   C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:99: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(27,(int)fls.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
     C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:105: error: no suitable method found for setCharacterStream(int,int)
    ps.setCharacterStream(29,(int)fls1.length());
      ^
method PreparedStatement.setCharacterStream(int,Reader) is not applicable
  (actual argument int cannot be converted to Reader by method invocation conversion)
method PreparedStatement.setCharacterStream(int,Reader,long) is not applicable
  (actual and formal argument lists differ in length)
method PreparedStatement.setCharacterStream(int,Reader,int) is not applicable
  (actual and formal argument lists differ in length)
          C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:111: error: cannot find symbol
    int i=executeUpdate();
          ^
    symbol:   method executeUpdate()
      location: class InsertusrProf
       C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:120: error: cannot find symbol
    Blob photo1=img1.jpeg;
                ^
     symbol:   variable img1
         location: class InsertusrProf
         C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:121: error: incompatible types
    Blob video1="Wildlife.wma";
                ^
      required: Blob
        found:    String
       C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:122: error: incompatible types
    Blob music1="Lelepadi.mp3";
                ^
    required: Blob
     found:    String
      C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:123: error: incompatible types
    Clob notes1="CreateTable.java";
                ^
     required: Clob
     found:    String
  C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:124: error: incompatible types
    Clob messages1="CreateTable.java";
                   ^
       required: Clob
    found:    String
     C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:127: error: incompatible types
    Clob cmt="CreateTable.java";
             ^
    required: Clob
    found:    String
      C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:130: error: incompatible types
    Blob shrs="img1.jpeg";
              ^
        required: Blob
   found:    String
      C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:131: error: incompatible types
    Clob qst="CreateTable.java";
             ^
        required: Clob
        found:    String
       C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:132: error: incompatible types
    Clob answ="CreateTable.java";
              ^
      required: Clob
    found:    String
      C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:133: error: incompatible types
    Blob updt="img1.jpeg";
              ^
    required: Blob
       found:    String
   C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:135: error: incompatible types
    Clob wrd="CreateTable.java";
             ^
     required: Clob
    found:    String
     C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:145: error: incompatible types
    Clob ntfcn="CreateTable.java";
               ^
       required: Clob
      found:    String
     C:\Users\James P J\Documents\javaprog\skypark\InsertusrProf.java:147: error:  incompatible types
    Clob tps="CreateTable.java";
             ^
   required: Clob
    found:    String
24 errors

  Tool completed with exit code 1

我需要在InsTable方法中使用参数插入信息

我尝试使用不带引号的参数,例如

   File fl=new File(photo1);
       FileInputStream fis=new FileInputStream(fl);
    ps.setBinaryStream(2,fis,(int)fl.length());

但无奈

我在网上搜索了这个问题的解决方案,发现网站上提供了类似类型的代码:

  http://www.java2s.com/Tutorial/Java/0340__Database/BlobandClobdatatype.htm

如果有人知道解决这个问题。那么请帮助我

提前谢谢....

【问题讨论】:

    标签: java oracle jdbc blob clob


    【解决方案1】:

    我数了 30 个“?”您的答案中的 JDBC 查询字符串中的字符。但是,您只能绑定其中的 24 个。即使某些值是null,您仍然需要绑定它们。

    如果您打算在数据库中将它们设为null,则将null 值绑定到:

    // Could be Types.CLOB, Types.INTEGER, or something else
    ps.setNull(25, Types.VARCHAR);  
    

    【讨论】:

      【解决方案2】:

      您的参数“notes1”是Clob。我不知道您为什么要尝试使用 Clob 对象创建 File 对象。 “notes1”是文件名吗?那么它应该被声明为String,而不是Clob。它是否意味着包含文件名的Clob?然后你需要从 Clob 的字符流中读取文件名,即 BufferedReader r = new BufferedReader(notes1.getCharacterStream());

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        相关资源
        最近更新 更多