我们在使用Java连接数据库中需要用JDBC进行连接,为了简化代码,我将那些重复的代码进行封装起来,方便直接调用,增强代码可读性,简化写法。
为什么使用JDBC连接数据库?
使用JDBC连接数据库无论是什么数据库,只是引入的jar包不同,代码无需改变,方便移植和维护
(1) 首先准备四个静态参数(用户名 ,密码 ,驱动加载链接,数据库链接)
private static String user = "sa";
private static String password = "sql123";
private static String url = "jdbc:sqlserver://192.168.137.74;databaseName=GraduateSystemTx";
private static String src= "com.microsoft.sqlserver.jdbc.SQLServerDriver";
如需更改数据库只要把这四个参数进行修改,不影响后续代码。
(2) 写一个方法为getConnection获取链接也就是获取Connection对象
/**
* 加载驱动,获取连接
* @return boolean 是否加载成功
*/
private static Connection getConnection(){
try {
//加载驱动
Class.forName(src);
//获取连接得到Connection对象
Connection connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
-
加载驱动,调用上面定义的驱链接
-
获取Connection对象
(3) 写一个方法用处是关闭链接
private static void close(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
try {
if (resultSet != null) {
resultSet.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
-
链接关闭是按倒序进行。
-
首先关闭ResultSet对象
-
其次是PreparedStatement对象
-
最后关闭Connection对象
-
先判断是否为空在进行关闭操作,防止出现异常
(4) 写一个方法利用反射将rs对象值转化为object列表
public static List<Object> RsChangePo(ResultSet rs,Object object){
List<Object> list= new ArrayList<Object>();
Class<?> class1 = object.getClass();
Field[] fields = class1.getDeclaredFields();
try {
while (rs.next()){
for (int i = 0; i < fields.length; i++) {
fields[i].set(object, rs.getObject(fields[i].getName()));
}
list.add(object);
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
-
该方法传递一个ResultSet和Object对象
-
创建一个Objct对象列表
-
获取Object对象的Class对象
-
反射获取成员字段
-
利用while遍历ResultSet对象
-
在循环中遍历成员字段,对object对象赋值
-
将Object对象添加到Object对象列表中
-
返回Object对象列表
(5) 最后写一个方法调用上面的三个方法
public static List<Object> selectData(String sql,Object object){
List<Object> list = null;
try {
Connection connection = getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
list = RsChangePo(resultSet,object);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close(connection,preparedStatement,resultSet);
}
return list;
}
-
该方法传递一个SQL字符串和一个Object对象
-
调方法getConnection获取Connection
-
获取PreparedStatement对象
-
执行sql获取ResultSet对象
-
调用方法获取Object对象
-
在finally中关闭连接