标题:JDBC封装增删改查【可以实现查查任意的】
一、
* 0.将jar导入到项目中
* 1.建立连接
* 2.得到statement对象
* 3.设置占位符
* 4.执行
* 5.返回
二、
一个小技巧抑制住了错误【使得代码仍可以继续运行】:
try {
object = resultSet.getObject(fields[i].getName());
}catch(Exception e) {
System.out.println("管他的");
}
三、思想
- 建立连接
- 获得prepareStatement对象
- 设置占位符
- 执行
以上都差不多【增删改查】
重点是:
查询一条记录getBean(String sq,Object...params)
方法中使用了反射获取Admin对象,获取该对象的所有属性,
遍历所有属性,只要object = resultSet.getObject(fields[i].getName());
的值不为null【要抑制住错误】,就将该属性的值设置为对应的值。
遍历结束后,输出admin即可。
完整代码如下:
public class TestDemoCRUDUtils {
/**
* 0.将jar导入到项目中
* 1.建立连接
* 2.得到statement对象
* 3.设置占位符
* 4.执行
* 5.返回
*
* //java.lang.NoSuchMethodException: crazyjava.jdbc.Admin.<init>()可能传参错误,没有此方法
*/
/**
* 测试增删改
* @throws SQLException
*/
public int getUpdate(String sql,Object...params) throws SQLException {
//1.获取连接
Connection connection = TestDemoUtils.getConnection();
//2.获取对象
PreparedStatement prepareStatement = connection.prepareStatement(sql);
//3.设置占位符
for(int i=0;i<params.length;i++) {
prepareStatement.setObject(i+1, params[i]);
}
//4.执行sql语句
int update = prepareStatement.executeUpdate();
return update;
}
/**
* 测试查询 -->一个值
*/
public Object getScalar(String sql,Object...params) throws SQLException {
//1.获取连接
Connection connection = TestDemoUtils.getConnection();
//2.获取对象
PreparedStatement prepareStatement = connection.prepareStatement(sql);
//3.设置占位符
for(int i=0;i<params.length;i++) {
prepareStatement.setObject(i+1, params[i]);
}
//4.执行sql语句
ResultSet resultSet= prepareStatement.executeQuery();
resultSet.next();
Object object=resultSet.getObject(1);
return object;
}
/**
* 测试查询 -->一条记录 【需要用一个对象存储】
*/
public Admin getQueryBean(String sql,Object...params) throws Exception{
//1.获取连接
Connection connection = TestDemoUtils.getConnection();
//2.获取对象
PreparedStatement prepareStatement = connection.prepareStatement(sql);
//3.设置占位符
for(int i=0;i<params.length;i++) {
prepareStatement.setObject(i+1, params[i]);
}
//4.执行sql语句
ResultSet resultSet= prepareStatement.executeQuery();
resultSet.next();
Class clazz=Admin.class;
//获得所有属性
Field[] fields = clazz.getDeclaredFields();
//获得Admin类的对象
Admin admin=(Admin)clazz.getDeclaredConstructor().newInstance();//获得一个Admin对象,里面的值全部为空
//遍历属性
for(int i=0;i<fields.length;i++) {
fields[i].setAccessible(true);
Object object=null;
//恶人自有恶人磨,霸蛮///抑制住了所谓的错误
try {
object = resultSet.getObject(fields[i].getName());
}catch(Exception e) {
System.out.println("管他的");
}
if(null!=object) {
fields[i].set(admin,object);//Object是属性,我可以赋给其他类型的,强制转型
}
}
return admin;
}
/**
* 测试查询 -->多条记录 【需要用一个list存储】
*/
public List<Admin> getQueryBeanList(String sql,Object...params) throws Exception{
//1.获取连接
Connection connection = TestDemoUtils.getConnection();
//2.获取对象
PreparedStatement prepareStatement = connection.prepareStatement(sql);
//3.设置占位符
for(int i=0;i<params.length;i++) {
prepareStatement.setObject(i+1, params[i]);
}
//4.执行sql语句
ResultSet resultSet= prepareStatement.executeQuery();
List<Admin> list=new ArrayList<>();
while(resultSet.next()) {
Class clazz=Admin.class;
//获得所有属性
Field[] fields = clazz.getDeclaredFields();
//获得Admin类的对象
Admin admin=(Admin)clazz.getDeclaredConstructor().newInstance();//获得一个Admin对象,里面的值全部为空
//遍历属性
for(int i=0;i<fields.length;i++) {
fields[i].setAccessible(true);
Object object=null;
//恶人自有恶人磨,霸蛮
try {
object = resultSet.getObject(fields[i].getName());
}catch(Exception e) {
System.out.println("管他的");
}
if(null!=object) {
fields[i].set(admin,object);//Object是属性,我可以赋给其他类型的,强制转型
}
}
list.add(admin);
}
return list;
}
/**
*
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws Exception {
TestDemoCRUDUtils testDemoCRUDUtils = new TestDemoCRUDUtils();
//测试增删改
// int update = testDemoCRUDUtils.getUpdate("update admin set username=? where id=?", "ttt",2);
// System.out.println(update>0? "success":"failure");
//测试查询一个值
// Object object = testDemoCRUDUtils.getScalar("select count(*) from admin");
// System.out.println(object);
// //测试查询一条记录
// Admin admin = testDemoCRUDUtils.getQueryBean("select username from admin where id=?",2);
// System.out.println(admin);
//测试查询多条记录
List<Admin> list= testDemoCRUDUtils.getQueryBeanList("select username from admin");
System.out.println(list);
}
}