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());
}
java 万能转换器 输入SQL 直接得到ArrayList的更多相关文章
- Java JDBC下执行SQL的不同方式、参数化预编译防御
相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...
- Java代码审计连载之—SQL注入
前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...
- 输入sql语句,将结果写入到xml文件
import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import j ...
- Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统
Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- 第4章 Java接收用户输入
第4章 Java接收用户输入 1.输入 使用Scanner工具类可以换取用户输入的数据Scanner类位于java.util包中,使用时需要导入此包使用步骤: 1.导入java.util.Scanne ...
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 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 ...
- java 获取键盘输入常用的两种方法
java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...
随机推荐
- unittest:2 执行多条用例,仅执行一次setUp和tearDown
对象方法setUp()和tearDown() 每个用例执行前后都会被调用.但是有另外一种场景:setUp之后执行完所有用例,最后调用一次tearDown.比如打开网页,多条用例分别验证网页上的元素正确 ...
- Linux的CPU相关知识
超线程和多线程的区别? 超线程从硬件层面理解,即一个CPU的部件(可以理解为核)同时执行多条指令,表现就是同时执行多个线程.多线程是软件层面的概念,比如CPU只有一个核,通过线程调度可以在一个时间段内 ...
- iOS js 使用与JSContext
JSContext:js执行环境,包含了js执行时所需要的所有函数和对象: js执行时,会在执行环境搜索需要的函数然后执行,或者保存传入的变量或函数: JSContext *jsContext = [ ...
- P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...
- 如何高效的写出markdown笔记
重置用户名和密码 安利一个小工具donet-cnblog可以同步图片到cnblog中,同时生成对应的Markdown笔记.写博客的时候我们可以本地写,用这个工具同步到cnblog上能够大大节省我们的时 ...
- No.5 - 纯 CSS 制作绕中轴旋转的立方体
body{ background-color: #000; margin:; padding:; } main{ perspective: 800px; } .cube{ transform-styl ...
- Luogu_4197 Peaks
P4197 Peaks 并不会克鲁斯卡尔重构树,于是就写了离线算法. 使用了最小生成树,启发式合并treap 在最小生成树,克鲁斯卡尔算法 时 ,将询问一块处理.便可以保证询问时边的要求.然后利用平衡 ...
- JNI由浅入深_2_C语言基础
*含义 1.乘法 3*5 2.定义指针变量 int * p://定义了一个名字叫p的变量,能够存放int数据类型的地址 3.指针运算符, //如果p是一个已经定义好的指针变量则*p表示以p的内容为地址 ...
- RAC日常维护命令
olsnodes -n 查看节点个数 crs_stat -t 查看RAC中各节点的资源状态 crs_stat -p 查看RAC的节点的配置 crsctl命令: 对于crsctl命 ...
- Web—09-正则表达式
正则表达式 1.什么是正则表达式: 能让计算机读懂的字符串匹配规则. 2.正则表达式的写法: var re=new RegExp('规则', '可选参数'); var re=/规则/参数; 3.规则中 ...