Maison >Java >javaDidacticiel >Comment utiliser la technologie de réflexion Java pour connecter la programmation orientée objet et les opérations SQL ?

Comment utiliser la technologie de réflexion Java pour connecter la programmation orientée objet et les opérations SQL ?

PHPz
PHPzavant
2023-04-23 14:19:08983parcourir

Exemple de code :

public class SqlUtil extends BaseApplogic {
   public List excuteQuery(String sql, Object[] paras, Object voo)
           lance AppException {
       DBPersistenceManager dbpm = this.getFnmsDBPM();
       List list=new ArrayList();
       essayez {
DataSet ds = (DataSet) dbpm.executeQuery(sql, paras);
           
           DataSetMetaData dsmd = ds.getDataSetMetaData();
           
           Field[] fd = voo.getClass().getDeclaredFi elds();
           String className = voo.getClass ().getName();
           int size = fd.length;
           Méthode md[]=new Method[size];
           //构造method[]
           for (int i = 0; i < size; i++) {
               Attribut attr=dsmd.getAttribute(fd[i].getName().toUpperCase());
               if (null != attr) {
                   Champ f = voo.getClass().getDeclaredField(f d[i].getName( ));
                   String type = f.getType().getName();
                   Class[] types=getTypes(type);  
                   String methodName=getSetterName(fd[i].getName());
                   md[i] = voo.getClass().getMethod(
                           methodName,types);
               }
           }
           
           pendant que(ds.next()) {
               Object o = Class.forName(className).newInstance();
               for (int i = 0; i < size; i++) {
                   if(null!=md[i]){
                    //调用
                      Attribut attr=dsmd.getAttribute(fd[i].getName().toUpperCase());
                       if (null==attr) continuer;
                       Object[] pa=new Object[]{ds.getString(attr.getAttrName()) )};
                       md[i].invoke(o,pa);
                               }
               list.add(o);
        }
       } catch (DrmException drme) {
           this.handleException(drme);
       } catch ( Exception e) {
           this.handleException(e);// 新增加的异常处理
           if (dbpm != null) {
               dbpm.close();
           }
       }
       liste de retour ;

    }   // () );

   }

   // 取类型
   public static Class[] getTypes(String type) {
       if (type.equals("java.lang.String")) {
           return new Class[] { String.class };
       } else if (type.equals("int")) {
           return new Class[] { Integer.TYPE };
          else if (type.equals("long")) {
           return new Class[] {Long.TYPE};
} Else if (type.equals ("float") {
Return New class [] {float.type};
} else {
system.out.println ("pas de type de ce type!");
Return null; Bleak }

}
}

La méthode excuteQuery passe trois paramètres. Le premier est l'instruction SQL à interroger, le second est le tableau de paramètres et le troisième est le type d'objet à renvoyer.

La valeur de retour est une liste, et chaque objet de la liste est le type d'objet que vous avez transmis.

Après un tel packaging, SQL et les objets sont naturellement encapsulés. Il n'est pas nécessaire de connaître chaque requête, puis resultset.next(), puis getString(), puis setXxx();

Bien sûr, c'est juste. La pointe de l'iceberg dans l'utilisation des métadonnées et de la technologie de réflexion d'objets Java.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer