Recherche multi-criteres dans une BD

Fermé
rainbow89 Messages postés 121 Date d'inscription lundi 8 mars 2010 Statut Membre Dernière intervention 16 novembre 2015 - 21 sept. 2011 à 18:51
Bonjour,
je developpe une application de gestion d'appel d'offre et parmi les formulaires qui me sont demande , un formulaire de recherche multi-criteres.
au fait je developpe en Java/JDBC avec Swing,...
J'ai plusieurs champs dans mon formulaire de recherche , mais tous ces champs peuvent ne pas etre tous saisis en une seule fois pour effectuer une recherche.
Mais le probleme c que quand je ne saisis pas un champ , on me renvoie une erreur de nullpointer.de plus je n'arrive pas a croiser mes criteres
en fait g 4 champs d'ou 16 possibilites comment faire? Voici mon code:




public class FormSearch extends JFrame{

private static ResultSet rs;
private Formulaire f;
private JPanel p;

public FormSearch(){




JButton b1= new JButton("Rechercher");
Font fo = new Font("Comic Sans MS",Font.BOLD|Font.ITALIC,12);
b1.setFont(fo);
b1.setForeground(Color.RED);


//JLabel mt=new JLabel("Montant");
JLabel l=new JLabel(" Recherche Des Appels D'offre ");
Font font = new Font("Comis Sans MS",Font.BOLD|Font.ITALIC,14);
l.setFont(font);
l.setForeground(Color.RED);
p=new JPanel();

f = new Formulaire();
p.add(l);
f.add("N°AO",15);//0
f.add("N°Client",15);//1
f.add("Date",15);//2
f.add("Montant De",7);// 3
f.add("A ",7);//4
f.synchronZones();
f.addB(b1);


((JPanel)getContentPane()).setLayout(new FlowLayout());
((JPanel)getContentPane()).add(p);
((JPanel)getContentPane()).add(f);
setTitle("Formulaire De Recherche");

Color C = new Color(238,213,183);
setBackground(C);
setResizable(true);
setSize(420,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


b1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub


int nao=0;
int ncl=0;
float m1=0;
float m2=0;
java.sql.Date sqlDate=null;

if(!f.getTextAt(f.getLabelTextAt(0)).equals(""))
{
nao=Integer.parseInt(f.getTextAt(f.getLabelTextAt(0)));//Num Appel D'offre
}

if(!f.getTextAt(f.getLabelTextAt(1)).equals(""))
{ncl=Integer.parseInt(f.getTextAt(f.getLabelTextAt(1)));//Num Client
}
if(!f.getTextAt(f.getLabelTextAt(3)).equals(""))
{m1=Float.parseFloat(f.getTextAt(f.getLabelTextAt(3)));//1 ere fourchette Montant
}
if(!f.getTextAt(f.getLabelTextAt(4)).equals(""))
{
m2=Float.parseFloat(f.getTextAt(f.getLabelTextAt(4)));//2 eme fourchette Montant
}

if (!f.getTextAt(f.getLabelTextAt(2)).equals(""))
{
SimpleDateFormat dt=new SimpleDateFormat("yyyy-MM-dd");
//Conversion en java.util.Date
java.util.Date date = null;
try {
date = dt.parse(f.getTextAt(f.getLabelTextAt(2)));//Date
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
sqlDate = new java.sql.Date(date.getTime());
}


//ResultSet rs=null;

try{
Class.forName("com.mysql.jdbc.Driver");
Connection co=DriverManager.getConnection("jdbc:mysql://localhost:3306/uniforce","root","root");
Statement stm = co.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query;




String na=f.getTextAt(f.getLabelTextAt(0));
String nc=f.getTextAt(f.getLabelTextAt(1));
String d=f.getTextAt(f.getLabelTextAt(2));
String m=f.getTextAt(f.getLabelTextAt(3));
String mm=f.getTextAt(f.getLabelTextAt(4));
//si premier champ numAo est vide
if (na!=null)
{



//P1
if(nc==null && d==null && m==null)
{
query="SELECT * FROM reponses where NumAO =?";
PreparedStatement prepare = co.prepareStatement(query);

//co.prepareCall(arg0) procedure stockee
//CallableStatement cs = conn.prepareCall("{call SHOW_FOURNISSEURS}");
//ResultSet rs = cs.executeQuery();

prepare.setInt(1, nao);
rs = prepare.executeQuery();
}
else
//P2
if(nc==null && d!=null && m==null)
{
//query = (nao !=null)?"SELECT * FROM reponses where NumAO =? and Date=?":"SELECT * FROM reponses where NumAO =? and Date=?";

query="SELECT * FROM reponses where NumAO =? and Date=?";

PreparedStatement prepare = co.prepareStatement(query);
prepare.setInt(1, nao);
prepare.setDate(2, sqlDate);
rs = prepare.executeQuery();
//P3
}
if(nc!=null && d==null )
{
query="SELECT * FROM reponses where NumAO =? and Nclient=? ";
PreparedStatement prepare = co.prepareStatement(query);

prepare.setInt(1, nao);
prepare.setInt(2, ncl);
rs = prepare.executeQuery();

}
//P4
if(nc!=null && d!=null && m!=null)
{
query = "SELECT * FROM reponses where NumAO = ? and Nclient = ? and Date = ? and Montant between ? and ?";

PreparedStatement prepare = co.prepareStatement(query);

prepare.setInt(1, nao);
prepare.setInt(2, ncl);
prepare.setDate(3, sqlDate);
prepare.setFloat(4,m1);
prepare.setFloat(5,m2);

rs = prepare.executeQuery();
}

}

}
catch(SQLException s)
{

String error=s.getMessage();
JOptionPane.showMessageDialog(null,"Erreur: "+error,"Warning",JOptionPane.WARNING_MESSAGE);

}

catch(ClassNotFoundException y)
{ String error= y.getException().toString();
JOptionPane.showMessageDialog(null,"Erreeur: " +error,"Warning",JOptionPane.WARNING_MESSAGE);
}



//Affichage des reponses commerciales
try {

while(rs.next())
{
System.out.print(rs.getInt(1)+" ");
System.out.print(rs.getInt(2)+" ");
System.out.print(rs.getDate(3)+" ");
System.out.print(rs.getString(4)+" ");
System.out.print(rs.getString(5)+" ");
System.out.print(rs.getFloat(6)+" ");
System.out.print(rs.getFloat(7)+" ");
System.out.print(rs.getString(8)+" ");
System.out.println(" ");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}



}
});