zoukankan      html  css  js  c++  java
  • java 万能转换器 输入SQL 直接得到ArrayList

    //java万能List转换器
        public  static <T> ArrayList<T> ToList(Class<T> clazz,String sql) throws Exception
        {
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Appscomm",user="sa",password="123456"; 
            Connection conn= DriverManager.getConnection(url,user,password); 
            Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
            ResultSet rs=stmt.executeQuery(sql); 
             ArrayList<T> list=new ArrayList<T> ();
            try {  
                ResultSetMetaData metaData=rs.getMetaData();
                T obj = clazz.newInstance();//创建一个对象
                Field[] propertys=  obj.getClass().getDeclaredFields();  //获取 所有属性
                
                ArrayList<String> Columns=new  ArrayList<String> ();//获取 数据库列
                for(int column=1;column<=metaData.getColumnCount();column++) {    Columns.add(metaData.getColumnName(column));  }
            
                 while(rs.next()) {
                    obj = clazz.newInstance();
                    for(Field p: propertys){
                         String colunmName=p.getName();
                         if(p.isAnnotationPresent(DBColumn.class)) {colunmName=p.getDeclaredAnnotation(DBColumn.class).Name();}//针对数据库字段和 程序属性字段不是一一对应情况
                         if(Columns.contains(colunmName)) {
                              String method="set"+p.getName();
                             Class<?> type = p.getType(); 
                             String typeName=type.getName();
                             String value=rs.getString(colunmName);
                             Method m = obj.getClass().getMethod(method,type);  
                             if(value=="" ||value==null || value.equalsIgnoreCase("null")) {
                                 value="0";
                             }
                             if(typeName.equals("float")) {
                                  m.invoke(obj,Float.parseFloat(value));  continue;
                             }
                             if(typeName.equals("java.lang.String")) {
                                  m.invoke(obj,value);    continue;
                             }
                             if(typeName.equals("int")) {
                                   m.invoke(obj,Integer.valueOf(value));      continue;
                             }
    //....还有其他的数据类型,这里 抛砖引玉,自己添加 } } list.add(obj); } }
    catch (Exception e) { e.printStackTrace(); } finally { rs.close(); stmt.close(); conn.close(); } return list; }

    注解代码

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
     @interface DBColumn {
         String Name();
    }

    Model代码

    class Record
    {
        int StudentNo;
         @DBColumn(Name="StudentName1")
        String StudentName;//数据库是StudentName1,用注解替代
        float Chinese;
        float Math;
        float English;
        float TotalScore;
       
        public int getStudentNo() {
            return StudentNo;
        }
        
        public void setStudentNo(int studentNo) {
            StudentNo = studentNo;
        }
        public String getStudentName() {
            return StudentName;
        }
        
        public void setStudentName(String studentName) {
            StudentName = studentName;
        }
        public float getChinese() {
            return Chinese;
        }
        public void setChinese(float chinese) {
            Chinese = chinese;
        }
        public float getMath() {
            return Math;
        }
        public void setMath(float math) {
            Math = math;
        }
        public float getEnglish() {
            return English;
        }
        public void setEnglish(float english) {
            English = english;
        }
        public float getTotalScore() {
            return TotalScore;
        }
        public void setTotalScore(float totalScore) {
            TotalScore = totalScore;
        }
    }

    调用

    ArrayList<Record>  RecordList= ToList(Record.class,"select * from Record");
            for(Record r : RecordList) {
                System.out.println("Id = " + r.getStudentNo() + ", UserName = " + r.getStudentName()
                + ", Chinese = " + r.getChinese() + ",  Math = " + r.getMath()
                + ", English = " + r.getEnglish()+ "totalScore = " + r.getTotalScore());
            }
            
  • 相关阅读:
    [在Windows上使用Unix工具]MKS
    [MySQL]导入导出
    《Excel与VBA程序设计》写作计划
    由Google Map API想开去
    《Excel与VBA程序设计》第七章
    转载:东拉西扯:产业链
    Google ToolBar 3.0 Beta试用
    UI和界面可用性设计
    《Excel与VBA程序设计》第一章
    关于通过COM自动化调用Excel的效率问题
  • 原文地址:https://www.cnblogs.com/HCCZX/p/8632952.html
Copyright © 2011-2022 走看看