JDBC实现简单的增删改查

一、JDBC的简单介绍

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口 -----百度

JDBCjava 定义的一个规范,与关系型数据库交互的一个规范,不同的数据库厂商根据这个规范进行了不同的实现,例如 MySql 实现的链接, Oracle 实现的链接, 还有 SqlServer 实现的等等。有了这个规范方便了我们的程序员针对不同数据库的开发成本,不用再去单独的查每个厂家的 API 了,进而简化我们的开发。

二、项目创建

  1. 开发工具 idea 数据库 mysql5.7
  2. jdk版本 1.8
  3. 环境就是 最最简单的一个java类 man 方法
  4. 代码结构
    代码结构的截图
  5. 这里注意没有用Maven,所以记得把 jar包 手动的引用到项目中
  6. 准备数据库用户表 user,里面有 id,name,age, sex 等字段 id 为自增主键

三、 具体的代码实现

好了闲话不多说了开始上代码

1. 加载数据库的链接

/**
 * 获取数据库的链接
 * 1. 加载数据库的驱动,注意这里高版本的驱动的包路径有了改变
 * 2. 获取数据库的连接,这里需要三个参数
 * 		a. 数据库的链接地址,这里有一些版本的链接是需要加上时区的指定的,我这里没有加
 * 		b. 数据库的用户名
 * 		c. 数据库用户的密码
 */
private static Connection getConnection(){
	   try {
	   		// 1. 加载数据库驱动
	       Class.forName("com.mysql.jdbc.Driver");
	        // 2. 获取数据库的连接,这里需要三个参数
	       return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
	   } catch (ClassNotFoundException | SQLException e) {
	       e.printStackTrace();
	   }
	   return null;
}

2. 实现插入操作 insert


/**
 * 插入的语句
 */
private static void insert(){
 	// 获取数据库的链接
    Connection connection = getConnection();

    // 这里的sql语句可以直接拼接成最终的sql语句,也可以把参数用?占位符代替,等会再传入。
    String sql = "insert into user values (null,?,?,?)";
    PreparedStatement preparedStatement = null;
    try {
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1,"许三多");
        preparedStatement.setInt(2,38);
        preparedStatement.setString(3,"男");
        int i = preparedStatement.executeUpdate();
        if (i>0) {
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }finally{
        try {
            connection.close();
            preparedStatement.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

}

3. 实现删除操作 delete


/**
 * 删除操作
 */
private static void delete(){
    Connection connection = getConnection();
    String sql = "delete from user where id = ?";
    try {
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,2);
        //boolean execute = statement.execute(); 发现删除的时候使用 execute() 方法虽然可以执行成功,但是返回的结果是 false
        int i = statement.executeUpdate();
        if (i>0) {
            System.out.println("删除成功!");
        }else{
            System.out.println("删除失败!");
        }
    } catch (SQLException throwable) {
        throwable.printStackTrace();
    }finally {
        //@TODO 这里关闭资源
    }
}

4. 实现修改操作 update


/**
 * 根据sql语句去更新的代码
 */
private static void update(){

    Connection connection = getConnection();
    String sql = "update user set name = ?, sex = ? where id = ?";
    try {
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setObject(1,"郝思嘉");
        statement.setObject(2,"女");
        statement.setObject(3,1);
        int i = statement.executeUpdate();
        if (i>0) {
            System.out.println("更新完成");
        }else{
            System.out.println("更新失败");
        }

    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }finally {
        //@TODO 在这里进行资源的关闭
    }

}

5. 实现查询操作 select


/**
 * 根据条件去查询的语句
 */
private static void select(){
    //1,通过JDBC的模板连接上数据库
    Connection con = getConnection();
    //2,编写sql语句
    String sql="select * from user where age = ?";
    PreparedStatement pstm = null;
    ResultSet rs = null;
    try {
        //3.预编译需要执行的sql
        pstm = con.prepareStatement(sql);
        //prepareStatement中占位符?,通过setXXX(index,values)来进行设置,index从1开始,
        pstm.setInt(1, 12);
        //执行sql并返回查询结果
        rs = pstm.executeQuery();
        // 储存数据,这里可以用实体类处理,但是我这里为了减少代码就直接使用map了
        List<Map<String,Object>> list = new ArrayList<>();
        while(rs.next()){
            Map<String, Object> map = new HashMap<>();
            map.put("name",rs.getString("name"));
            map.put("age",rs.getInt("age"));
            map.put("sex",rs.getString("sex"));
            list.add(map);
        }
        System.out.println(list.toString());
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        try {
            // 关闭链接
            con.close();
            pstm.close();
            rs.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

我已经测试过了,这里就不展示测试结果了,请自行测试

6. 完整的代码


import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author logic
 */

public class JdbcTest01 {

    public static void main(String[] args) {
    	insert();
        delete();
        update();
        select();
    }

    /**
     * 数据库的链接
     * @return 数据库的链接
     */
    private static Connection getConnection(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 插入的语句
     */
    private static void insert(){

        Connection connection = getConnection();

        // 这里的sql语句可以直接拼接成最终的slq语句,也可以把参数用?占位符代替,等会再传入。
        String sql = "insert into user values (null,?,?,?)";
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,"许三多");
            preparedStatement.setInt(2,38);
            preparedStatement.setString(3,"男");
            int i = preparedStatement.executeUpdate();
            if (i>0) {
                System.out.println("添加成功");
            }else{
                System.out.println("添加失败");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally{
            try {
                connection.close();
                preparedStatement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }


    /**
     * 根据条件去查询的语句
     */
    private static void select(){
        //1,通过JDBC的模板连接上数据库
        Connection con = getConnection();
        //2,编写sql语句
        String sql="select * from user where age = ?";
        PreparedStatement pstm = null;
        ResultSet rs = null;
        try {
            //3.预编译需要执行的sql
            pstm = con.prepareStatement(sql);
            //prepareStatement中占位符?,通过setXXX(index,values)来进行设置,index从1开始,
            pstm.setInt(1, 12);
            //执行sql并返回查询结果
            rs = pstm.executeQuery();
            // 储存数据,这里可以用实体类处理,但是我这里为了减少代码就直接使用map了
            List<Map<String,Object>> list = new ArrayList<>();
            while(rs.next()){
                Map<String, Object> map = new HashMap<>();
                map.put("name",rs.getString("name"));
                map.put("age",rs.getInt("age"));
                map.put("sex",rs.getString("sex"));
                list.add(map);
            }
            System.out.println(list.toString());
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                // 关闭链接
                con.close();
                pstm.close();
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }


    /**
     * 根据sql语句去更新的代码
     */
    private static void update(){

        Connection connection = getConnection();
        String sql = "update user set name = ?, sex = ? where id = ?";
        try {
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setObject(1,"郝思嘉");
            statement.setObject(2,"女");
            statement.setObject(3,1);
            int i = statement.executeUpdate();
            if (i>0) {
                System.out.println("更新完成");
            }else{
                System.out.println("更新失败");
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            //@TODO 在这里进行资源的关闭
        }

    }

    /**
     * 删除操作
     */
    private static void delete(){
        Connection connection = getConnection();
        String sql = "delete from user where id = ?";
        try {
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1,2);
            //boolean execute = statement.execute(); 发现删除的时候使用 execute() 方法虽然可以执行成功,但是返回的结果是 false
            int i = statement.executeUpdate();
            if (i>0) {
                System.out.println("删除成功!");
            }else{
                System.out.println("删除失败!");
            }
        } catch (SQLException throwable) {
            throwable.printStackTrace();
        }finally {
            //@TODO 这里关闭资源
        }
    }


}


自己总是再使用 mybatis 但是一直没有一个机会好好的深入学习一下 myabtis 所以准备好好的阅读一下源码,从最基础的 JDBC 了解一下,记录一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值