//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. Linux和Unix的区别

    Linux      Unix 免费        收费 开源        不开源 硬件无要求   有要求 IBM Sun Hp 主流的Linux的发型版本: RedHat Fedora  Mand ...

  2. Java对文件的读取方式以及它们的优缺点

    Java常用的对文件的读取方式基本包括: BufferedReader -> readLine(): 按行读取文件,直到读取内容==null FileInputStream -> read ...

  3. python 打包文件

    tarfile import tarfile tar = tarfile.open("sk_camera_6018.tar","w") tar.add(full ...

  4. 五子棋项目总结 JavaScript+jQuery(插件写法)+bootstrap(模态框)

    Html部分(界面): 1.五子棋棋盘由canvas完成: 2.两个按钮,样式由bootstrap完成: 3.菜单按钮对应的模态框,可以选择游戏模式:玩家自由对战,和电脑对战,还可以指定谁先执子和哪个 ...

  5. QTP基本方法3-----截屏

    1.桌面截屏 Desktop.captureBitMap  path[,bolean] path:保存路径,可选择绝对路径或相对路径 相对路径是保存在脚本保存的目录下编号最大的res目录下. bole ...

  6. http_post_data发送数据的获取方式

    private function http_get_data($url){ $ch = curl_init($url) ; curl_setopt($ch, CURLOPT_RETURNTRANSFE ...

  7. C# windows服务安装及卸载

    --C# windows服务安装及卸载   保存BAT文件  执行即可 @SET FrameworkDir=%WINDIR%\Microsoft.NET\Framework@SET Framework ...

  8. linux 进程间通信方式

    管道: 它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信消息队列: 用于运行于同一台机器上的进程间通信,它和管道很相似,是一个在系统内核中 ...

  9. linux下安装php扩展amqp

    1 安装扩展必要依赖 rabbitmq-c 安装包地址:https://github.com/alanxz/rabbitmq-c/releases wget -c https://github.com ...

  10. 用JavaScript中jQuery编写放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...