Bonjour,
Je crée une petite surcouche au connecteur JDBC mais je rencontre un gros souci.Avec l'utilisation de du setObjet apret vérification du type
Voir la méthode
public boolean addArg(int i,Object o){
dans la class ci-dessous
Voici ma class de surcouche
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
package oms.data.processing.cloud.usage;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Types;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import oms.conf.LoadConf;
import oms.conf.LoadConf.Bdds;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
public class ConnectPrincipale {
private Connection con;
private PreparedStatement preInstruction = null;
public final DateFormat dateFormatMysql = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public ConnectPrincipale() {
Bdds infoBdd = LoadConf.Bdds.getInfo("principale");
System.out.println(infoBdd);
try {
this.con = (Connection) DriverManager.getConnection(infoBdd.urlConnection+infoBdd.bdd,infoBdd.user,infoBdd.password);
} catch (SQLException ex) {
System.err.println("==> SQLException: ");
while (ex != null) {
System.out.println("Message: " + ex.getMessage ());
System.out.println("SQLState: " + ex.getSQLState ());
System.out.println("ErrorCode: " + ex.getErrorCode ());
ex = ex.getNextException();
System.out.println("");
}
}
}
public ArrayList<Object> execute(){
ArrayList<Object> arss = new ArrayList<Object>();
ResultSet rs;
try {
if(preInstruction != null){
rs = this.preInstruction.executeQuery();
for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
arss.add(rs.getArray(i));
}
}
} catch (SQLException ex) {
System.err.println("==> SQLException: ");
while (ex != null) {
System.out.println("Message: " + ex.getMessage ());
System.out.println("SQLState: " + ex.getSQLState ());
System.out.println("ErrorCode: " + ex.getErrorCode ());
ex = ex.getNextException();
System.out.println("");
}
}
return arss;
}
public Boolean execute(String requete){
Boolean valide=false;
try {
Statement instruction = (Statement) this.con.createStatement();
if(instruction.execute(requete)){
valide = true;
}
} catch (SQLException ex) {
System.err.println("==> SQLException: ");
while (ex != null) {
System.out.println("Message: " + ex.getMessage ());
System.out.println("SQLState: " + ex.getSQLState ());
System.out.println("ErrorCode: " + ex.getErrorCode ());
ex = ex.getNextException();
System.out.println("");
}
}
return valide;
}
public boolean preReq(String requete){
boolean valide = false;
try {
PreparedStatement preInstruction = (PreparedStatement) this.con.prepareStatement(requete);
valide = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return valide;
}
/**
* Fonction permettant d'ajouter un argument sans se préocupé du type d'obj
* @param i Pointeur a l'de l'argument
* @param o Objet
* @return boolean
*/
public boolean addArg(int i,Object o){
boolean valide = true;
try {
if(o instanceof String){
this.preInstruction.setObject(i,o.toString(),Types.VARCHAR);
System.out.println(i+" ^ "+o);
}else if (o instanceof Date) {
Date d = (Date) o;
Timestamp time = new Timestamp(d.getTime());
System.out.println(i+" ^ "+d+" <=> "+time);
this.preInstruction.setObject(i,time,Types.TIMESTAMP);
}else if (o instanceof Integer) {
this.preInstruction.setInt(i, (Integer) o);
System.out.println(i+" ^ "+o);
}else{
System.out.println("Rien na marché "+i+" ^ "+o);
}
} catch (SQLException ex) {
System.err.println("==> SQLException: ");
while (ex != null) {
System.out.println("Message: " + ex.getMessage ());
System.out.println("SQLState: " + ex.getSQLState ());
System.out.println("ErrorCode: " + ex.getErrorCode ());
ex = ex.getNextException();
System.out.println("");
}
}
return (Boolean) valide;
}
public boolean close(){
Boolean valide=false;
try{
this.con.close();
}catch (Exception e) {
System.out.println("Problème de fermeture de la connection.");
}
return valide;
}
} |
Voici l'utilisation :
1 2 3 4 5 6 7 8 9
|
ConnectPrincipale theData = new ConnectPrincipale();
theData.preReq("INSERT INTO SampleProgressDates(date,nombre_element_traiter,nombre_element_perdu) VALUES ( ? , ? , ?)");
@SuppressWarnings("deprecation")
Date d = new Date(1990, 8, 13, 20, 10, 11);
theData.addArg(1,d);
theData.addArg(2,22);
theData.addArg(3,15);
//theData.execute(); |
Voici l'erreur:
1 2 3 4 5 6
|
Exception in thread "main" java.lang.NullPointerException
at oms.data.processing.cloud.usage.ConnectPrincipale.addArg(ConnectPrincipale.java:129)
at oms.data.processing.cloud.usage.SampleProgressDate.saveBdd(SampleProgressDate.java:29)
at oms.exec.test.TestMysql.<init>(TestMysql.java:16)
at oms.exec.run.main(run.java:77) |
j'ai tester pas mal de cas de figure il se trouve que l'erreur arrive lors de l'utilisation de this.preInstruction.setObject();
Et me retourne l'erreur java.lang.NullPointerException.
J'avoue ne pas bien comprendre ce qui dérange :s es que le fait que la connection sois géré dans un objet appart et non dans l'objet courant peut poser problème ?
Partager