2016-05-22 3 views
-1

Mon erreur:i essayer d'insérer l'image dans ma base de données 9i en utilisant java mais je une erreur

java.lang.AbstractMethodError: Method oracle/jdbc/driver/OraclePreparedStatement.setBlob(ILjava/io/InputStream;)V is abstract 
    at oracle.jdbc.driver.OraclePreparedStatement.setBlob(OraclePreparedStatement.java) 
    at controller.control_gambar.addGambar(control_gambar.java:35) 

Mon code:

protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    HttpSession session = request.getSession(); 
    Login login = (Login) session.getAttribute("login"); 


    { 
     String message = null; 

     String question = request.getParameter("question"); 
     String status = request.getParameter("status"); 
     String teacher_id = login.getCuba(); 
     String level_id = request.getParameter("level_id"); 
     String topic_id = request.getParameter("topic_id"); 
     String[] answer = request.getParameterValues("mytext"); 

     System.out.println("mana dia hg mai sat" + topic_id); 
     System.out.println("mana dia hg mai sat" + level_id); 
     System.out.println("mana dia hg mai sat" + status); 

     String[] pegang = request.getParameterValues("marks"); 

     int[] markah = new int[pegang.length]; 
     for (int i = 0; i < pegang.length; i++) { 
      markah[i] = Integer.parseInt(pegang[i]); 
      System.out.println("marka:" + markah[i]); 
     } 

     for (int index = 0; index < markah.length; index++) { 
      System.out.println(markah[index]); 

     } 
     //for insert question 
     question_sub question_sub1 = new question_sub(); 


     question_sub1.setQuestion(question); 
     question_sub1.setStatus(status); 
     question_sub1.setTeacher_id(teacher_id); 
     question_sub1.setLevel_id(level_id); 
     question_sub1.setTopic_id(topic_id); 


     //for insert answer 
     answer question_sub3 = new answer(); 
     question_sub3.setAnswer(answer); 
     question_sub3.setMark(markah); 

     //for insert gambar 
     Part filePart =request.getPart("image"); 
     testimage testimage1=new testimage(); 
     InputStream inputStream=null; 

     if(filePart != null){ 
      System.out.println(filePart.getName()); 
      System.out.println(filePart.getSize()); 
      System.out.println(filePart.getContentType()); 

      inputStream =filePart.getInputStream(); 

     } 
     testimage1.setGambar(inputStream); 

     testimage1.setId("abc"); 
     try { 
      Facade facade = new Facade(); 

      ArrayList<sub_topic> sub_topicssss = facade.getsub_topic(); 
      sub_topic[] temp = new sub_topic[sub_topicssss.size()]; 
      request.setAttribute("sub_topicssss",sub_topicssss.toArray(temp)); 

      ArrayList<subject> subjectttt = facade.getsubject(); 
      subject[] tempp = new subject[subjectttt.size()]; 
      request.setAttribute("subjectttt",subjectttt.toArray(tempp)); 




      int status1 = facade.addquestion_sub(question_sub1); 
      int status2 = facade.addanswer(question_sub3); 
      int status3 =facade.addGambar(testimage1); 


      if (status1 != -1) { 
       message = "<h2 style='color:red'>Success</h2>"; 
      } else { 
       message = "<h2>Fail</h2>"; 
      } 

      if (status2 != -1) { 
       message = "<h2 style='color:red'>Success</h2>"; 
      } else { 
       message = "<h2>Fail</h2>"; 
      } 

      if (status3 != -1) { 
       message = "<h2 style='color:red'>Success</h2>"; 
      } else { 
       message = "<h2>Fail</h2>"; 
      } 








      facade.closeConnection(); 
     } catch (SQLException e) { 

      e.printStackTrace(); 
      request.setAttribute("message", 
        "<h2 style='color:red'>" + e.getMessage() + "</h2>"); 
      request.getRequestDispatcher("WEB-INF/addquestion.jsp") 
      .forward(request, response); 

     } finally { 

      request.setAttribute("message", message); 
      request.getRequestDispatcher("WEB-INF/addquestion.jsp").forward(request, response); 
     } 
    } 
} 

dans mon contrôleur

   public int addGambar(testimage testimage1) throws SQLException { 

    //Blob img; 
    //byte [] imgdata=null; 

    Connection connection = facade.getConnection(); 

    PreparedStatement ps = connection.prepareStatement("insert into testimage (id,gambar) values (?,empty_blob()) returning gambar into ?"); 
    ps.setString(1,testimage1.getId()); 
    ps.setBlob(2, testimage1.getGambar()); 


    System.out.println("nie dalam controller gambar"); 
    System.out.println(testimage1.getId()); 
    System.out.println("nie dalam controller gambar"); 
    int status4 = ps.executeUpdate(); 
    return status4; 
} 
+0

Tapez google "Comment insérer une image dans une base de données en utilisant java". Vous trouverez beaucoup de réponses utiles. –

+0

je le trouve déjà dans google et essayer de l'utiliser dans mon code .... mais ça ne marche pas je ne sais pas pourquoi il échoue ... pls aide moi – zqirifQ

+0

Votre code est difficile à comprendre. Sur quel site vous le trouvez? Je peux vous suggérer d'autres exemples courants. –

Répondre

1

L'erreur message signifie que vous utilisez un ancien pilote JDBC avant setBlob(int, InputStream) a été ajouté (Java 6).

Utilisez un pilote JDBC plus récent, par ex. à partir de 11g R2. Un pilote plus récent peut toujours parler à un serveur 9i.

Assurez-vous simplement d'utiliser un fichier ojdbc6.jar (ou supérieur).

+0

J'utilise ojdbc14_g.jar – zqirifQ

+1

@zqirifQ Comme je l'ai dit, trop vieux. 'ojdbc14' est compatible avec Java 1.4, mais vous utilisez une méthode qui a été ajoutée dans Java 6, vous avez donc besoin de' ojdbc6' (ou 'ojdbc7'). Ou arrêtez d'utiliser la nouvelle méthode, mais pourquoi rester coincé dans l'ancien Java 1.4 fois, lorsque la mise à niveau du pilote est si facile? – Andreas