Java SQL JDBC错误 - 带有肥皂消息

时间:2017-05-17 03:40:28

标签: java mysql jdbc soap axis2

我在JDBC中遇到问题。所有配置都是正确的。这是班级:

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语句的良好响应,但是当我尝试测试if语句时,我有SQL语句程序执行catch语句。所以,我认为JDBC或SQL语句中的问题。

这是我数据库中的表:enter image description here

2 个答案:

答案 0 :(得分:1)

首先将代码中的sql更改为sql1,如下所示:

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

答案 1 :(得分: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");
}

其次,您在第二个Statement中使用相同的查询:

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