封装jdbc的添加功能
-------------数据库添加功能,只需要传入对象实例------------------
package com.mysql;
public class mytest {
public static void main(String[] args) {
// Student student = new Student(23, "1", 1, 1, "1");
Course course = new Course(11, "美术");
// boolean result = new Add(student).isResult();
boolean result = new Add(course).isResult();
System.out.println(result);
}
}
-------------封装连接数据库的操作,传入对象,返回执行结果---------------
package com.mysql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Add {
private boolean result = false;
public Add(Object object) {
//得到在加载器中的类对象
Class<? extends Object> class1 = object.getClass();
MyAdd myAdd = new MyAdd(class1, object);
//参数个数
String[] para = myAdd.getPara();
//拼装的sql字符串
String sql = myAdd.getSql();
//得到的对象get各属性值
Object[] object1 = myAdd.getObject();
try {
//工厂类生产连接
Connection connection = new MyConnection().getConnection();
PreparedStatement prepareStatement = connection.prepareStatement(sql);
for (int i = 0; i < para.length; i++) {
prepareStatement.setObject(i + 1, object1[i]);
}
int executeUpdate = prepareStatement.executeUpdate();
if (executeUpdate == 1) {
result = true;
}
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//运行结果
public boolean isResult() {
return result;
}
}
-------------得到传入对象get方法结果,生成sql语句---------------------
public class MyAdd {//传入类的名字
private String name;
//传入类的变量
private String[] para;
//传入类的get方法得到的值
private Object[] object;
public MyAdd(Class<? extends Object> class1, Object object) {
// TODO Auto-generated constructor stub
// 得到传入类的变量( sno, sname, ssex, sage, sdept)
Field[] declaredFields = class1.getDeclaredFields();
int length = declaredFields.length;
String[] arr = new String[length];
for (int i = 0; i < length; i++) {
arr[i] = declaredFields[i].getName();
}
this.para = arr;
// 得到传入类的类名,并去掉包机构(Student)
String[] split = class1.getName().split("\\.");
this.name = split[split.length - 1];
// 得到传入类所有get方法,并得到值方法值
// invoke(反射)
this.object = new Object[para.length];
Method[] methods = class1.getDeclaredMethods();
for (int i = 0; i < para.length; i++) {
for (Method method : methods) {
String name1 = method.getName();
// 过滤出g开头的方法
if (name1.charAt(0) == 'g') {
String substring = name1.substring(3);
// 得到的方法没有顺序,通过构造函数的参数排序
if (substring.compareToIgnoreCase(para[i]) == 0) {
try {
// 得到get方法的值
this.object[i] = method.invoke(object, null);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
}
}
}
// 拼接sql语句
public String getSql() {
String sql = "insert into " + name + " values(?";
for (int i = 1; i < para.length; i++) {
sql += ",?";
}
sql += ")";
return sql;
}
public Object[] getObject() {
return object;
}
public String getName() {
return name;
}
public String[] getPara() {
return para;
}