2017-05-17 1 views
1

J'ai un problème avec JDBC. toute la configuration est correcte. c'est la classe:Erreur Java JDBC Java avec message de savon

package eai.serviceImpt; 
import java.rmi.RemoteException; 
import java.sql.*; 
import org.apache.axis2.AxisFault; 
import eai.payCore.Payement; 
import eai.serviceInvocation.Compte_managerCallbackHandler; 
import eai.serviceInvocation.Compte_managerStub; 
import eai.serviceInvocation.Compte_managerStub.GetCompteIdetifiant; 
import eai.serviceInvocation.Compte_managerStub.GetCompteIdetifiantResponse; 

public class PayementManager { 

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
static final String DB_URL = "jdbc:mysql://localhost:3306/payement"; 
static final String USER = "root"; 
static final String PASS = ""; 
Connection conn = null ; 
PreparedStatement stmt = null; 


public int manageSolde(String log , String pass , int sold) throws 
RemoteException{ 

    Compte_managerStub stub = new Compte_managerStub 
     ("http://localhost:8021/axis2/services/compte_manager"); 
    GetCompteIdetifiant request = new GetCompteIdetifiant(); 

    request.setLog(log); 
    request.setPass(pass); 

    GetCompteIdetifiantResponse response = 
    stub.getCompteIdetifiant(request); 
    Compte_managerStub.Compte compte = response.get_return(); 


    if (compte == null) 
     {return -1;} //if account does not exist 
    else{ 
     if (sold < 0) {return -2;} //le prix est inférieur à 0 
     else{ 
      int id_payement=compte.getId_payement(); 
       try{ 
        //STEP 2: Register JDBC driver 
        Class.forName("com.mysql.jdbc.Driver"); 

        //STEP 3: Open a connection 
        conn = DriverManager.getConnection(DB_URL, USER, PASS); 

        //STEP 4: Execute a query 


        String sql = "SELECT login , password , solde FROM payem 
    WHERE id_payement = ?"; 
        stmt = conn.prepareStatement(sql); 
        stmt.setInt(1, id_payement); 
        ResultSet rs = stmt.executeQuery(); 
        //STEP 5: Extract data from result set 

        String login = rs.getString("login"); 
        String password = rs.getString("password"); 
        int solde =rs.getInt("solde"); 
        rs.close(); 
        //2éme verification 
        if (log.equals(login) && pass.equals(password)){ 
         if (sold > solde){ 
          stmt.close(); 
          conn.close(); 
          return -4 ; //solde insuffisant 

         } 
          else{ 
          solde = solde - sold; 
         //update in our database 
         String sql1 = "UPDATE payem SET solde = ? WHERE 
id_payement = ?"; 
         stmt = conn.prepareStatement(sql); 

         stmt.setInt(1, solde); 
         stmt.setInt(2, id_payement); 
         stmt.executeQuery(); 
         stmt.close(); 
         conn.close(); 
         return solde; 

         } 
        } 
        else{ 
         stmt.close(); 
         conn.close(); 
         return -3; //2éme verification du compte 

        } 


       } 
       catch(SQLException se){ 
        //Handle errors for JDBC 
        se.printStackTrace(); 
       return id_payement;// 2 time to avoid try problem 
       }catch(Exception e){ 
        //Handle errors for Class.forName 
        e.printStackTrace(); 
       return id_payement; // 2 time to avoid try problem 
       }finally{ 
        //finally block used to close resources 

        try{ 
        if(stmt!=null) 
         conn.close();} 

        catch(SQLException se){} 

        try{ 
        if(conn!=null) 
         conn.close();} 
        catch(SQLException se){ 
        se.printStackTrace(); 
        } 
       } 

     } 
     //return -5; 
    } 


    } 

    } 

Cette classe implémente un service web de soap avec manageSolde est l'opération. J'utilise SoapUI pour tester mes services Web. Je reçois une bonne réponse d'autres instructions if, mais quand j'essaie de tester le stelment if où j'ai les instructions SQL, le programme execut catch statement.so, je pense que le problème dans JDBC ou instruction SQL.

c'est ma table dans ma base de données: enter image description here

Répondre

0

Vous devez utiliser rs.next() par exemple:

ResultSet rs = stmt.executeQuery(); 
if(rs.next()){ 
    String login = rs.getString("login"); 
    String password = rs.getString("password"); 
    int solde =rs.getInt("solde"); 
} 

Deuxièmement, vous utilisez la même requête dans la deuxième déclaration:

String sql1 = "UPDATE payem SET solde = ? WHERE id_payement = ?"; 
stmt = conn.prepareStatement(sql); 
//       ^^-----------------It should be sql1 
1

Premier changement sql-sql1 dans votre code comme suit:

//update in our database 
String sql1 = "UPDATE payem SET solde = ? WHERE id_payement = ?"; 
stmt = conn.prepareStatement(sql1);