2016-12-21 3 views
0

BLOB 업데이트에 문제가 있습니다. BLOB/Tryinng과 관련된 모든 항목을 업데이트하려면 BLOB/Tryinng과 관련된 모든 것을 꺼내면 실행하지 않는 것이 pst.executeUpdate입니다. Blob은 ID, 이름, 주소 등 모든 것을 업데이트합니다. 모든 기능이 있어야합니다. 문제는 Blob과 같습니다.Java/JDBC/SQLite - BLOB 업데이트 문제

updateEmployee.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
      Connection connection = null; 
      PreparedStatement pst = null; 

      try { 

       Class.forName("org.sqlite.JDBC"); 
       connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite"); 
       connection.setAutoCommit(false); 



       int idVal = Integer.parseInt(idTextField.getText()); 
       String nameVal= nameTextField.getText(); 
       String genderVal = genderTextField.getText(); 
       String dobVal = dobTextField.getText(); 
       String addressVal = addressTextField.getText(); 
       String postcodeVal = postcodeTextField.getText(); 
       String ninVal = ninTextField.getText(); 
       String jobVal = jobtitleTextField.getText(); 
       String startDateVal = startdateTextField.getText(); 
       String salaryVal = salaryTextField.getText(); 
       String emailVal = emailTextField.getText(); 
       //Icon photoBlob = photoLabel.getIcon(); 
       InputStream img = new FileInputStream(s); 
       String sql = "UPDATE employees set ID= '"+ idVal+"', Name = '"+ nameVal +"', Gender ='"+ genderVal+"', DOB='"+ dobVal+"', Address ='"+ addressVal+"', Postcode ='"+ postcodeVal+"', NIN ='"+ ninVal+"', JobTitle='"+ jobVal+"', StartDate ='"+ startDateVal+"', Salary ='"+ salaryVal+"', Email='"+ emailVal+"', Images='"+ img+" WHERE ID= '"+ idVal+"'"; 

       pst = connection.prepareStatement(sql); 
       pst.setInt(1,Integer.parseInt(idTextField.getText())); 
       pst.setString(2, nameTextField.getText()); 
       pst.setString(3, genderTextField.getText()); 
       pst.setString(4, dobTextField.getText()); 
       pst.setString(5, addressTextField.getText()); 
       pst.setString(6, postcodeTextField.getText()); 
       pst.setString(7, ninTextField.getText()); 
       pst.setString(9, startdateTextField.getText()); 
       pst.setString(10, salaryTextField.getText()); 
       pst.setString(11, emailTextField.getText()); 
       pst.setBytes(12, readFile(s)); 

       pst.executeUpdate(); 




       System.out.println("Employee Updated"); 
       JOptionPane.showMessageDialog(null, "Employee has successfully been updated");    


       connection.commit(); 
       pst.close(); 
       connection.close(); 
      } 
      catch (Exception e1) { 

       if(idTextField.getText().equals("")){ 
        JOptionPane.showMessageDialog(null, "Please Ensure An Employee Has Been Selected"); 
       } 
      } 
     }}); 

편집 -

나는 그러나, 삽입 및 BLOB 파일을 삭제뿐만 아니라 검색 할 수 있습니다. 이 업데이트만으로도 나에게 문제가되고있다.

+1

가, 다시 리드 SQL 문으로 어떤 상황의 CONCATENATE 매개 변수 값에 따라 않도록하세요 SQL 주입 공격. 그것을 읽고 PreparedStatement와 setParameter를 사용하십시오. 언젠가는 제 신용 카드 나 암호를 해킹하는 것에 대한 책임을지지 않습니다. –

+0

@ TonyBenBrahim 그렇다면 ..... – TheNotoriousCoder

답변

1

SQL 명령 텍스트가 매개 변수화 된 쿼리에 유효하지 않습니다. 대신에 새겨 져 값으로 동적 SQL 명령 문자열 ...

String sql = "UPDATE employees set ID= '"+ idVal+"', Name = '"+ nameVal +"', Gender ='"+ genderVal+"', DOB='"+ dobVal+"', Address ='"+ addressVal+"', Postcode ='"+ postcodeVal+"', NIN ='"+ ninVal+"', JobTitle='"+ jobVal+"', StartDate ='"+ startDateVal+"', Salary ='"+ salaryVal+"', Email='"+ emailVal+"', Images='"+ img+" WHERE ID= '"+ idVal+"'"; 

을 만드는 ... 당신은 매개 변수 자리 표시 자로 물음표 명령 문자열 ...

String sql = "UPDATE employees set ID = ?, Name = ?, Gender = ?, DOB = ?, Address = ?, Postcode = ?, NIN = ?, JobTitle = ?, StartDate = ?, Salary = ?, Email = ?, Images = ? WHERE ID = ?; 

를 사용한다. .. 그리고 .setInt, .setString, .setBytes을 사용하여 매개 변수 값을 설정하십시오.

(또한 ... WHERE ID = ?을 사용하는 경우 실제로 SET은 "ID"값에 중복되어 있습니다.)

+0

답해 주셔서 감사합니다. 실행 측면에서는 작동하지만 데이터베이스는 업데이트하지 않습니다. – TheNotoriousCoder

+0

'executeUpdate'는 영향을받는 행의 개수를 나타내는'int' 값을 반환해야합니다. 그래서 그것이 0이 아닌지 확인하십시오. 또한 정확한 수의 매개 변수를 올 Y 른 순서로 지정했고 올 Y 른 유형인지 확인하십시오. –

+0

BLOB에 여전히 문제가 있지만 괜찮습니다. 나는 그것을 업데이트하는 것에 대해 걱정할 필요가 없다. – TheNotoriousCoder