时间:2021-07-01 10:21:17 帮助过:5人阅读
使用PreparedStatement实现数据库中表数据的 ①增、删、改;
public static void update(String sql, Object... obj) {
Connection conn = null;
PreparedStatement ps = null;
try {
//1获取数据库连接
conn = JDBCUtil.connection();
//2.预编译sql语句,返回一个PreparedStatement的实例
ps = conn.prepareStatement(sql);
//3,填充占位符?
for (int i = 0; i < obj.length; i++) {
ps.setObject(i + 1, obj[i]);
}
//4,执行sql语句
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5,关闭资源
JDBCUtil.close(conn, ps);
}
}
通用的查询表中一条记录
/**
通用的查询操作,返回表中的一条记录,封装为相应类的一个对象
@param clazz :返回的对象所属的类。比如:Customer
@param sql :包含占位符的查询语句
@param args :填充占位符的实参值
@return clazz所对应的运行时类的一个对象
*/
public <T> T queryForInstance(Class<T> clazz,String sql,Object ... args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.获取数据库的连接
conn = JDBCUtils.getConnection();
//2.预编译sql语句,返回一个PreparedStatement的实例
ps = conn.prepareStatement(sql);
//3.填充占位符
for(int i = 0;i < args.length;i++){
ps.setObject(i + 1, args[i]);
}
//4.执行,返回一个结果集:ResultSet
rs = ps.executeQuery();
//5.处理结果集。(难点)
//结果集的元数据:ResultSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();//获取了结果集的列数
if(rs.next()){
//创建一个Class对应的运行时类的对象
T t = clazz.newInstance();
for(int i = 0;i < columnCount;i++){
Object columnVal = rs.getObject(i + 1);//获取的具体列的列值
String columnLabel = rsmd.getColumnLabel(i + 1);//获取列别名
//通过反射装配属性值给t对象
Field field = clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t, columnVal);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//7.关闭资源
JDBCUtils.close(rs, ps, conn);
}
return null;
}
通过结果集rs,获取每一条记录的数据。
if(rs.next()){//获取一行数据
//获取具体的每一列数据
//方式一:
// int id = rs.getInt(1);
// String name = rs.getString(2);
// String email = rs.getString(3);
// Date birth = rs.getDate(4);
//方式二:推荐
//形参是结果集中列的名字,即为表中列的别名。我们使用列的别名(columnLabel)获取相应的列
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("myemail");
Date birth = rs.getDate("birth");
......}
JDBC基础
标签: