public void testSelectAnyTab() throws Exception {
String sql = "select id userId,name userName from user_tab where id = ?";
User user = selectinfo(User.class, sql, 103);
System.out.println(user);
}
@Test
public void testUpdate(){
String sql = "update user_tab set name = ? where id = ?";
update(sql,"诸葛亮",102);
}
/**
* 通行的方法实现增删改
* @param sql 增删改语句
* @param args 占位符?个数不一定,根据sql占位符的个数,传入对应数量object
*/
public static int update(String sql,Object... args){
int temp = -1;
Connection conn = null;
PreparedStatement pst = null;
try{
//1.获取数据库连接
conn = getConnection();
//2.预编译sql语句
pst = conn.prepareStatement(sql);
//3.填充占位符
for (int i = 0; i < args.length; i++) {
pst.setObject(i+1,args[i]);
}
//4.执行
/*
pst.execute();如果是查询操作返回的是true
如果是更新操作返回的是false;
pst.executeUpdate();返回执行操作以后受影响的行数
*/
// pst.execute();
temp = pst.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
//5.释放资源
closeResource(conn,pst);
}
return temp;
}
/**
* 查询一条记录
* @param tClass 表对应的类对象
* @param sql 查询语句
* @param args 占位符,个数不定
* @param <T> 泛型
* @return 将查询的结果封装一个对象并返回
* @throws Exception
*/
public static <T> T selectinfo(Class<T> tClass, String sql, Object... args) throws Exception {
Connection conn = null;
PreparedStatement pst = null;
ResultSet res = null;
try{
//获取数据库连接
conn = getConnection();
//预编译sql语句
pst = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
pst.setObject(i+1,args[i]);
}
//执行sql语句
res = pst.executeQuery();
//获取结果集的元数据
ResultSetMetaData metaData = res.getMetaData();
//获取结果集列数
int colCount = metaData.getColumnCount();
//处理查询结果集
if (res.next()){
T t = tClass.newInstance();//利用反射