通过JDBC完成Java和数据库之间的连接
1、数据库的连接属性
driver = "com.mysql.jdbc.Driver";
url= "jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf8";
//root是登录数据库的用户名
user = "root";
//123456是登录数据库的密码
password = "123456";
2、获取连接
//获取连接对象
public static Connection getConnection(){
//定义数据库的连接对象
Connection con = null;
//由于加载驱动类会爆出ClassNotFoundException(类找不到异常)
//使用驱动管理器类(DriverManager)获取连接对象(Connection)会爆出SQLException(SQL语句异常)
try {
//加载驱动类
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return con;
}
3、关闭数据库对象
//关闭数据库对象
public static void closeAll(Connection con, Statement st, ResultSet rs){
//关闭数据库连接对象
if(rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//关闭命令执行对象
if(st!=null){
try {
st.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//关闭结果集对象
if(con!=null){
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
4、通用设置参数
//通用设置参数
public static void setParams(PreparedStatement ps, Object[] params){
//如果没有参数,这直接返回
if(params==null)
return;
//循环设置参数
for(int i=0;i< params.length;i++){
try {
ps.setObject(i+1,params[i]);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
5、通用增删改
//通用增删改
public static int executeUpdate(String sql, Object[] params){
int res = -1;
//定义数据库连接对象
Connection con = null;
//定义预编译命令执行对象
PreparedStatement ps = null;
try{
//获取连接
con = getConnection();
//创建预编译命令执行对象
ps = con.prepareStatement(sql);
//设置参数
setParams(ps,params);
//执行增删给语句,返回数据库硬性的行数
res = ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
//关闭连接对象
closeAll(con,ps,null);
}
return res;
}
6、通用查询
//通用查询
public static List<Map> executeQuery(String sql, Object[] params){
//定义List,存储查询结果(表)
List<Map> list = new ArrayList<Map>();
//定义数据库连接对象
Connection con = null;
//定义预编译命令执行对象
PreparedStatement ps = null;
//定义结果集对象
ResultSet rs = null;
try{
//获取连接对象
con = getConnection();
//创建预编译命令执行对象
ps = con.prepareStatement(sql);
//设置参数
setParams(ps,params);
//执行查询操作,返回结果集对象
rs = ps.executeQuery();
//获取结果集结构对象
//rsmd:读取结果集结构
ResultSetMetaData rsmd = rs.getMetaData();
//获取查询结果的列数
int colCount = rsmd.getColumnCount();
//遍历每一行,封装数据到List
//rs:读取结果集内容
while(rs.next()){
//定义Map存储当前行的个个列
Map map = new HashMap();
//循环存储每一列
for(int i=1;i<=colCount;i++){
//获取当前列的列名
String colName = rsmd.getColumnName(i);
//获取当前列的值
Object colValue = rs.getObject(i);
//将当前列,存储到Map集合中
map.put(colName,colValue);
}
//将当前行存储到List中
list.add(map);
}
}catch (Exception e){
e.printStackTrace();
}finally{
closeAll(con,ps,rs);
}
return list;
}