//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());
}

java 万能转换器 输入SQL 直接得到ArrayList的更多相关文章

  1. Java JDBC下执行SQL的不同方式、参数化预编译防御

    相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...

  2. Java代码审计连载之—SQL注入

    前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...

  3. 输入sql语句,将结果写入到xml文件

    import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import j ...

  4. Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统

    Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...

  5. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  6. 第4章 Java接收用户输入

    第4章 Java接收用户输入 1.输入 使用Scanner工具类可以换取用户输入的数据Scanner类位于java.util包中,使用时需要导入此包使用步骤: 1.导入java.util.Scanne ...

  7. Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to oracle.sql.CLOB

    错误现象: [framework] 2016-05-26 11:34:53,590 -INFO  [http-bio-8080-exec-7] -1231863 -com.dhcc.base.db.D ...

  9. java 获取键盘输入常用的两种方法

    java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...

随机推荐

  1. JVM线程状态,park, wait, sleep, interrupt, yeild 对比

    ---恢复内容开始--- JVM线程状态 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAIT ...

  2. AESUtil 加密

    package com.hxqc.basic.dependency.util; import org.apache.commons.lang.StringUtils; import sun.misc. ...

  3. Java集合源码 -- List列表

    List概述 List是一个有序,可重复的集合,可以在List的中间插入和移除元素,根据整数索引访问元素 下图是List集合的框架图 下面是对上图的简单介绍 AbstractCollection: 提 ...

  4. PAT——1020. 月饼

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...

  5. java中的作用域

    在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友 ...

  6. 书单list

    2018年对我来说是个踩到狗屎的一年,不能说运气差,只能说过去所有的不良决策后果都集中到2018年爆发了,希望新的一年,都好起来.书单很短,买的确实很多,真的惭愧. 昨日世界 南渡北归 上学记 回忆录 ...

  7. JavaScript编写学生查询系统

    const readline = require('readline-sync')//引用readline-sync //用户名,密码 let user = [{ username: 'yang', ...

  8. Java中的引用:强引用、软引用、弱引用、幻象引用(虚引用)

    Java语言中,除了原始数据类型的变量(八大基本数据类型),其他都是引用类型,指向各种不同的对象. 理解引用对于我们掌握Java对象生命周期和JVM内部相关机制都是有帮助的. 不同的应用类型,不同之处 ...

  9. Token ,Cookie和Session的区别

    在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...

  10. #leetcode刷题之路47-全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列.示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] 之前的https://www.cnblogs.com/ ...