JDBC:使用 Java 应用程序“操作”数据库的一门技术
1.获取数据库连接
//获取数据库的连接
public static Connection getConnection() throws Exception{
//1.获取数据库连接的基本信息
//1.1 创建 Properties 的对象,以流的形式,将配置文件中的基本信息读入程序
Properties info = new Properties();
info.load(new FileInputStream("jdbc.properties"));
//1.2 提供 4 个基本信息:url、driverClass、user、password
String url = info.getProperty("url");
String driverClass = info.getProperty("driverClass");
String user = info.getProperty("user");
String password = info.getProperty("password");
//2.加载驱动
Class.forName(driverClass);
//3.使用 DriverManager 的 getConnection(url,user,password)方法
Connection conn = DriverManager.getConnection(url, user, password);
2.Statement 与 与 ResultSet
//通用的 INSSERT UPDATE DELETE 方法
public void update(String sql) {
// 1.获取数据库的连接
Connection conn = null;
Statement st = null;
try {
conn = JDBCUtils.getConnection();
// 2.提供一个 Statement 对象,将 sql 传递给数据库中执行
st = conn.createStatement();
st.execute(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 3.关闭 Statement 对象及连接
JDBCUtils.close(null, st, conn);
}
}
// 通用的查询方法,返回一个对象(version 1.0)
public <T> T get(String sql, Class<T> clazz) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
T t = null;
try {
t = clazz.newInstance();
conn = JDBCUtils.getConnection();
st = conn.createStatement();
rs = st.executeQuery(sql);
/*
* 通过ResultSet调用getMetaData()返回一个结果集的元数据:ResultSetMetaData
*
* 1.getColumnCount():返回结果集的列数
* 2.getColumnLabel():返回列的别名
*/
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
if (rs.next()) {
for (int i = 0; i < columnCount; i++) {
Object columnVal = rs.getObject(i + 1);// 相应列的值
//String columnName = rsmd.getColumnName(i + 1);
String columnName = rsmd.getColumnLabel(i + 1);
//使用 PropertyUtils 将指定对象 t 的指定属性 columnName 设置为指定的值
columnVal
PropertyUtils.setProperty(t, columnName, columnVal);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, st, conn);
}
return t;
}
// 通用的返回多个对象的查询操作(version 1.0)
public <T> List<T> getInstances(String sql,Class<T> clazz){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
List<T> list = new ArrayList<T>();
try {
conn = JDBCUtils.getConnection();
st = conn.createStatement();
rs = st.executeQuery(sql);
/*
* 通过ResultSet调用getMetaData()返回一个结果集的元数据:ResultSetMetaData
*
* 1.getColumnCount():返回结果集的列数
* 2.getColumnLabel():返回列的别名
*/
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()) {
T t = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
Object columnVal = rs.getObject(i + 1);// 相应列的值
//String columnName = rsmd.getColumnName(i + 1);
String columnName = rsmd.getColumnLabel(i + 1);
//使用 PropertyUtils 将指定对象 t 的指定属性 columnName 设置为指定的值
columnVal
PropertyUtils.setProperty(t, columnName, columnVal);
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, st, conn);
}
return list;
}