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 ...
随机推荐
- 死磕salt系列-salt入门
saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...
- Ping服务
什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新. Ping服务使用方法 你可以采取手动通知和自动通知两种方式使用p ...
- 7、Dubbo-配置(2)
重试次数 通常配合timeout超时设置进行配置 <dubbo:reference "> </dubbo:reference> <dubbo:service i ...
- WEB安全 php+mysql5注入防御(一)
注入利用函数: concat()函数将多个字符串连接成一个字符串 database() 当前数据库,用途:获取数据 version() 数据库版本,用途:利用版本特性,如5.0版本下的informat ...
- priority_queue详解
priority_queue是一个安排好的顺序存储的队列,队首是优先级最高的元素. Template<class T , class Container = vector<T> , ...
- ROS2 MAC OS Install
ROS2 MAC OS Install(非原创),安装过程记录一下 注意: (1)如果安装了anaconda,请将~/.bash_profile文件中的export PATH="/anaco ...
- ArcSDE 数据迁移 Exception from HRESULT: 0x80041538问题及解决方案
一.问题描述 1.采用gdb模板文件,在ArcSDE(数据服务器)中批量创建数据库表(数据迁移)时,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法T ...
- java学习笔记 --- 多线程(多线程的控制)
1.线程休眠 public static void sleep(long millis) public class ThreadSleep extends Thread { @Override ...
- 关于日期的一些常用方法的封装——dates.js
针对自己在日常用到的一些日期方法,整理成一个js日期插件,插件定义了一个dates全局对象,继承了Date函数,相当于在Date函数上做了一些扩展. 这个插件会不断更新,所有我之后用到的关于日期的自定 ...
- Linux下Java性能监控
Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...