package Tools;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JDBCDataBase {
/*
private :私有的,不可以随意被其他类访问和修改
final:常量,行规内规定,被final修饰的常量是不可以进行修改内容的操作
static:静态,该变量不再是这个类独有的,是作为公共变量使用,作用域为全局
*/
private final static String driver="com.mysql.jdbc.Driver"; // jdbc的驱动
private final static String url = "jdbc:mysql://localhost:3306/movie";// 访问数据库的地址
private final static String name = "root"; //访问数据库的账号
private final static String password = "123456"; //访问数据库的密码
static Connection connection = null; // 数据库连接对象
static PreparedStatement preparedStatement = null; // 数据库加载类
static ResultSet resultSet = null; // 查询结果集
static ResultSetMetaData resultSetMetaData = null;
// 建立数据库连接
public static void getCont(){
//加载数据库的驱动,使用java反射的技术
try {
Class.forName(driver);
connection = DriverManager.getConnection(url,name,password);
} catch (ClassNotFoundException e) {
// 使用catch可以将异常捕获,并写入日志文件中
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
/* 操作数据库:查找,添加,删除和更新
查找:查找一条数据,查找多条数
*/
public static Map getOne(String sql,Object... prams){
Map resultMap = new HashMap();
try {
getCont(); // 加载数据库连接,创建连接对象
// 预加载sql
preparedStatement = connection.prepareStatement(sql);
// 将prams中的查询条件的值,和sql语句中的?占位符进行替换
for (int i = 0; i < prams.length; i++) {
preparedStatement.setObject(i+1,prams[i]);
}
resultSet = preparedStatement.executeQuery();
// 从结果集中取到查询到的所有字段的名称:列名
resultSetMetaData = resultSet.getMetaData();
// 获取列数
int cont = resultSetMetaData.getColumnCount();
// 从结果集中取值
while (resultSet.next()){
// 将查询到的结果组装成一个map对象
for (int c = 1; c <= cont; c++) {
resultMap.put(resultSetMetaData.getColumnName(c),resultSet.getObject(c)); //列名,值
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
// 所有代码执行完成后对连接进行关闭
finally {
// 不管整个方法前面是否报错,在finally中的代码都必须依旧执行,和其他代码没有关系
try {
close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return resultMap;
}
// 查询多条数据
public static List<Map> getList(String sql, Object... prams){
List<Map> resultList = new ArrayList<>();
try {
getCont(); // 加载数据库连接,创建连接对象
// 预加载sql
preparedStatement = connection.prepareStatement(sql);
// 将prams中的查询条件的值,和sql语句中的?占位符进行替换
for (int i = 0; i < prams.length; i++) {
preparedStatement.setObject(i+1,prams[i]);
}
resultSet = preparedStatement.executeQuery();
// 从结果集中取到查询到的所有字段的名称:列名
resultSetMetaData = resultSet.getMetaData();
// 获取列数
int cont = resultSetMetaData.getColumnCount();
// 从结果集中取值
while (resultSet.next()){
Map resultMap = new HashMap();
// 将查询到的结果组装成一个map对象
for (int c = 1; c <= cont; c++) {
resultMap.put(resultSetMetaData.getColumnName(c),resultSet.getObject(c)); //列名,值
}
// 将每次封装好的map对象放入到list中
resultList.add(resultMap);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
// 所有代码执行完成后对连接进行关闭
finally {
// 不管整个方法前面是否报错,在finally中的代码都必须依旧执行,和其他代码没有关系
try {
close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return resultList;
}
/*添加,删除和更新*/
public static int doUpdate(String sql,Object... prams){
int cont = 0;
try {
// 创建数据库连接
getCont();
preparedStatement = connection.prepareStatement(sql); // 预加载sql
for (int i = 0; i < prams.length; i++) {
preparedStatement.setObject(i+1,prams[i]);
}
// cont 值为0表示更新成功,但是数据库没有发生改变
// cont 值大于0,表示添加,更新和删除成功,同时对数据库产生影响
// cont 值小于0,表示执行sql失败
cont = preparedStatement.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return cont;
}
public static void close() throws SQLException {
if (resultSet!=null){
resultSet.close();
}
if(preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null) {
connection.close();
}
}
}
Java连接MySQL数据库,JDBC详细代码
最新推荐文章于 2025-05-13 14:09:16 发布