连接数据库并进行增删改查

更新时间:2020-09-09 14:05:20点击次数:216次
封装数据库连接增删改和查询
创建一个JDBCUtil类,记得导入jar包
public class JDBCUtil {
//本地数据库
private final static String URL = "jdbc:mysql://localhost:3306/bj";
//用户名
private final static String USER = "root";
//密码
private final static String PWD = "123456";
//使用静态代码块,每次JDBCUtil类加载时就会加载驱动
static {
try {
// 1、加载驱动:通过反射方式找具体类
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 数据库连接
* @return
*/
public static Connection geConnection() {
Connection connection = null;
try {
//2、创建连接对象 url=jdbc:mysql://localhost:3306/bj
connection = DriverManager.getConnection(URL, USER, PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}

/**
* 数据库增删改
* @param sql  数据库的sql语句
* @param params Object类型数组
* @return
*/
public static int myUpdate(String sql, Object[] params) {
Connection connection = null;
// 3、创建声明语句对象,使用PreparedStatement防止sql注入
PreparedStatement pStatement = null;
connection = geConnection();
//没有修改成功则返回-1
int result = -1;
try {
pStatement = connection.prepareStatement(sql);
//判断数组是否为null或者为长度为0的数组
if (params != null && params.length>0) {
for (int i = 0; i < params.length; i++) {
//从1添加数据库每个字段
pStatement.setObject(i + 1, params[i]);
}
}
//执行sql,返回一个int类型的值,返回的是影响的行数
result = pStatement.executeUpdate();
return result;
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}

/**
* 数据库查询
* @param sql
* @param params
* @return
*/
public static ResultSet myQuery(String sql, Object[] params) {
Connection connection = null;
PreparedStatement pStatement = null;
//如果查询不到即返回null
ResultSet rSet=null;
connection = geConnection();
try {
pStatement = connection.prepareStatement(sql);
if (params != null && params.length>0) {
for (int i = 0; i < params.length; i++) {
pStatement.setObject(i + 1, params[i]);
}
}
//返回一个结果集。
rSet= pStatement.executeQuery();
return rSet;
} catch (SQLException e) {
e.printStackTrace();
}
return rSet;
}
/**
* 关闭资源
* @param pStatement
* @param resultSet
*/
public static void closeUtil(PreparedStatement pStatement,ResultSet resultSet) {
try {
if(pStatement !=null){
pStatement.close();
}
if(resultSet != null){
pStatement.close();
}
if(geConnection()!=null){
geConnection().close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

创建一个数据库user


创建一个Main测试增删改类
public class Main {
public static void main(String[] args) {
//修改数据的sql,每有一个?Object类型数组需要传入一个值,且需要对应
String sql="update user set user_pwd=? where user_name=?";
Object[] params={"123456nice","张三"};

//删除的sql
// String sql="delete from user  where user_name=? and user_pwd=?";
// Object[] params={"管理员","123456"};

//增加的sql
// String sql="insert into user(id,user_name,user_pwd) values(?,?,?)";
// Object[] params={11,"张三","123456nice"};

//执行sql
int result= JDBCUtil.myUpdate(sql, params);
if(result>0){
System.out.println("成功  影响行数为: "+result);
}
}
}

修改数据的结果:成功 影响行数为: 2


创建一个Main测试查询类
public class Main {
public static void main(String[] args) {
String sql2 = "select * from user ";
//Object[] params={"123456nice","张三"};
ResultSet resultSet = JDBCUtil.myQuery(sql2, null);
// 使用集合取值
// ArrayList里面存放map
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
// 判断当前是否存在值
while (resultSet.next()) {
// 使用HashMap进行键值存值
Map<String, Object> map = new HashMap<String, Object>();
// 键->对数据库的字段说明 值->数据库对应字段的值
map.put("id", resultSet.getInt("id"));// int类型使用getInt
map.put("user_name", resultSet.getString("user_name"));
map.put("user_pwd", resultSet.getString("user_pwd"));
list.add(map);
}
// foreach
for (Map<String, Object> map : list) {
System.out.println(map);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

查询结果,还可以通过其他方法取值
{user_name=猎人, id=1, user_pwd=123456}
{user_name=张三, id=2, user_pwd=123456nice}
{user_name=张酸酸, id=3, user_pwd=789456}
{user_name=张刘2, id=4, user_pwd=1234789}
{user_name=张三, id=11, user_pwd=123456nice}
{user_name=张三, id=1123, user_pwd=123456nice}

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息