Filed 类的使用方法以及java反射机制的案例

public class Student {
	private int studid;

	private String major;

	private double age;

	public Student() {
		super();
	}

	public Student(int studid, String major, double age) {
		super();
		this.studid = studid;
		this.major = major;
		this.age = age;
	}

	@Override
	public String toString() {
		return "";
	}

	public int getStudid() {
		return studid;
	}

	public void setStudid(int studid) {
		this.studid = studid;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	public double getAge() {
		return age;
	}

	public void setAge(double age) {
		this.age = age;
	}
}

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ProduceSQL {

	/*
	 * 通过JAVA的反射机制,给定一个Student的对象例如:
	 * 
	 * Student stud = new Student(1058, "计算机科学与技术", 22);
	 * 
	 * 需要根据给定的对象,构造出一条SQL语句:
	 * 
	 * insert into Student(studid,studname,age) values(1058,'计算机科学与技术',22);
	 * 
	 */
	public static void main(String[] args) {
		Student stud=new Student(1058,"计算机科学与技术", 22);
		productInsertSQL(stud);
	}

	public static String productInsertSQL(Student stud) {
		String result = "";
		StringBuffer sbuf = new StringBuffer();
		sbuf.append("insert into ");

		System.out.println("Dubug: ---->>> " + stud.getClass());
		int position = stud.getClass().toString().indexOf("com");
		String fullpackagename = "";
		if (position != -1) {
			fullpackagename = stud.getClass().toString().substring(position);
			System.out.println("Dubug: ---->>> " + fullpackagename);
		}

		String tablename = fullpackagename.substring(fullpackagename
				.lastIndexOf(".") + 1);

		sbuf.append(tablename + "(");
		Class cs = null;
		try {
			cs = Class.forName(fullpackagename);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Field field[] = cs.getDeclaredFields();
		for (int i = 0; i < field.length; i++) {
			String fieldname = field[i].getName();
			sbuf.append(fieldname + ",");
		}

		String mid = sbuf.toString();
		int lastpos = mid.lastIndexOf(",");
		if (lastpos != -1) {
			result = mid.substring(0, lastpos) + ")";
		}

		result += " values(";

		// 取值
		Method[] method = cs.getDeclaredMethods();
		StringBuffer valuesbuf = new StringBuffer();
		for (int i = 0; i < method.length; i++) {

			String methodname = method[i].getName();
			try {
				if (methodname.indexOf("get") != -1) {
					String tmpmethodname = method[i].getName();

					Method methodd = cs.getMethod(tmpmethodname, null);

					// 对反射对象底层的方法进行调用,获得调用该方法所得到的值
					Object returnobject = methodd.invoke(stud, null);
					String tmpvalue = "";
					if (returnobject.getClass().getSimpleName()
							.equals("String")) {
						tmpvalue = "'" + returnobject.toString() + "'";
					} else {
						tmpvalue = returnobject.toString();
					}

					valuesbuf.append(tmpvalue + ",");

				}
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		}
		result += valuesbuf.toString();

		int lastpos2 = result.lastIndexOf(",");
		if (lastpos2 != -1) {
			result = result.substring(0, lastpos2) + ")";
		}
		System.out.println(result);
		return result;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值