2017-05-17 2 views
1

JDBCに問題があります。すべての構成が正しいです。これはクラスです:Java SQL JDBCエラー - SOAPメッセージあり

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


    } 

    } 

このクラスは、manageSoldeでsoap Webサービスを実装しています。操作です。 SoapUIを使用してWebサービスをテストしています。私は他のif文から良い応答を得ますが、SQL文をどこに置いているのかをテストしようとすると、プログラムのexecut catch statement.soはJDBCまたはSQL文の問題だと思います。

これは私のデータベースの私のテーブルです:あなたのコード内sql1enter image description here

答えて

0

あなたが例えばrs.next()を使用する必要があります。

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

2番目のステートメントで同じクエリを使用しています。

​​
1

まず変更sql次のように:

//update in our database 
String sql1 = "UPDATE payem SET solde = ? WHERE id_payement = ?"; 
stmt = conn.prepareStatement(sql1); 
関連する問題