2016-09-11 1 views
0

J'ai une application Web qui doit stocker ses données sur des tables spécifiques en fonction des entrées de l'utilisateur. par exemple. Si un utilisateur saisit le code «A», ses données seront enregistrées dans DatabaseA, tandis que si un utilisateur saisit le code «B», les données seront enregistrées dans DatabaseB. J'ai besoin de savoir s'il y a moyen de manipuler l'instruction préparée afin de simplement concaténer le code dans la fin de la chaîne d'instruction préparée.Méthodes de concaténation d'une chaîne dans une instruction préparée

J'ai 3 tables, MachineProblem2A, 2B et 2C. est-il un moyen de simplement concaténer le code dans la fin de ma chaîne sql ci-dessous?

 String sql="select * from MachineProblem2"; 
     PreparedStatement pstmnt= conn.prepareStatement(sql); 

J'ai essayé différentes manières comme "select * from MachineProblem2" + employeeCode mais il ne fonctionne pas. J'ai essayé "select * from MachineProblem2" .concat (employeeCode) ça ne marche pas aussi bien. J'ai même essayé une fonction que j'ai créée là où il y a des instructions conditionnelles et qui dépend du code employé, par ex. si (employeeCode.equals ("A") return "select * from MachineProblem2A"

tout cela me donne soit un exception de pointeur nul ou java.lang.InstantiationException: employeeRecords de haricots ne se trouvent pas dans les erreurs de portée.

Je reçois pointeur NULL sur sqlRet() et getAllRecords(), mais les entrées de données ont été stockées correctement sur les tables désignées. Je vais avoir un problème de les récupérer pour la sortie.

private String sqlInsert(){ 
    if(employeeCode.equals("A") && employeeSales > 2500){ 
     return "insert into MachineProblem2A(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)"; 
    }else if(employeeCode.equals("B") && employeeSales > 2000){ 
     return "insert into MachineProblem2B(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)"; 
    }else if(employeeCode.equals("C") && employeeSales > 1500){ 
     return "insert into MachineProblem2C(EmployeeName, EmployeeCode, EmployeeSales, EmployeeGross, EmployeeCommission, EmployeeResult)"+ "values(?,?,?,?,?,?)"; 
    } return null; 

}  
private String sqlRet(){ 
    if(employeeCode.equals("A") && employeeSales > 2500){ 
     return "select * from MachineProblem2A"; 
    }else if(employeeCode.equals("B") && employeeSales > 2000){ 
     return "select * from MachineProblem2B"; 
    }else if(employeeCode.equals("C") && employeeSales > 1500){ 
     return "select * from MachineProblem2C"; 
    } return null; 

} 

private void insertRecord(Connection conn){ 

    try{ 


     PreparedStatement pstmnt= conn.prepareStatement(sqlInsert()); 
     pstmnt.setString(1, employeeName); 
     pstmnt.setString(2, employeeCode); 
     pstmnt.setDouble(3, employeeSales); 
     pstmnt.setDouble(4, gross); 
     pstmnt.setDouble(5, commission); 
     pstmnt.setDouble(6, result); 

     //now commit to database 
     pstmnt.executeUpdate(); 

    }catch(SQLException sqle){ 
     sqle.printStackTrace(); 
    } 

} 


// get records 

    public ResultSet getAllRecords(Connection conn){ 
    ResultSet records = null; 

    try{ 


     PreparedStatement pstmntA= conn.prepareStatement(sqlRet()); 

     records= pstmntA.executeQuery(); 



    }catch(SQLException sqle){ 
     sqle.printStackTrace(); 
    } 
    return records; 
} 

// Erreur //

java.lang.NullPointerException 
edu.ust.iics.employee.model.EmployeeBean.sqlRet(EmployeeBean.java:183) 
edu.ust.iics.employee.model.EmployeeBean.getAllRecords(EmployeeBean.java:225) 
edu.ust.iics.employee.controller.EmployeeHistoryServlet.doPost(EmployeeHistoryServlet.java:35) 
edu.ust.iics.employee.controller.EmployeeHistoryServlet.doGet(EmployeeHistoryServlet.java:28) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
+0

Vous disposez de trois bases de données ou trois tableaux? –

+0

Désolé, 3 tables. corrigée. – Renzz

+0

Bien. Pouvez-vous fournir trois colonnes à partir de trois tables. Veuillez fournir trois noms de tables avec leurs noms de colonne –

Répondre

0


Vous pouvez utiliser ci-dessous requête

SELECT T1.COLUMN_NAME || T2.COLUMN_NAME || T3.COLUMN_NAME 
FROM 
TABLE_1 T1, TABLE_2 T2, TABLE_3 T3 
WHERE T1.PRIMARY_KEY_COLUMN = T2.PRIMARY_KEY_COLUMN 
AND 
T1.PRIMARY_KEY_COLUMN = T3.PRIMARY_KEY_COLUMN 

Dites-moi seulement vous avez besoin comme requête SQL ou Java

+0

Je ne pense pas que ce soit demandé ... ces 3 tables semblent dans la question semblent être une mauvaise tentative de sharding, pas de tables connectées logiquement, de sorte que vous pourriez avoir une requête de jointure sur eux. – Robert

+0

Oui, j'ai compris. Va vous aider –