Day38-jdbc相关基础操作

学习jdbc相关基础操作(增删改查)

JDBC (Java Database Connectivity)

它是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。

  • 导入依赖包(这里使用的是 mysql-connector-java-5.1.49.jar)添加依赖
  • 最原始的方法,添加

jdbc:mysql://localhost:端口号/数据库名字

端口号为本地localhost:3306可以写成如下所示:

jdbc:mysql:///数据库名字

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TestInsert {
    public static void main(String[] args) throws Exception {
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接 参数url user(用户名) password(密码)
        Connection connection = DriverManager.getConnection("url", "user", "password");
        //创建连接
        Statement statement = connection.createStatement();
        //执行语句返回结果
        String sql = "insert into grade (gradeid,gradename) values (4,'H5')";
        int resultSet = statement.executeUpdate(sql);
        System.out.println(resultSet);

        //关闭
        statement.close();
        connection.close();
    }
}
  • 更新
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TestUpdate {
    public static void main(String[] args) throws Exception {
        //1 加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //创建连接 使用Unicode编码,字符集设为utf-8
        Connection connection = DriverManager.getConnection("url?useUnicode=true&characterEncoding=utf8", "user", "password");
        //创建发送sql的对象
        Statement statement = connection.createStatement();
        //发送sql并处理结果
        int result = statement.executeUpdate("update grade set gradename = 'java高级' where gradeid = 1");
        //处理结果
        System.out.println("更新成功:===>"+result);
        //关闭连接
        statement.close();
        connection.close();
    }
}
  • 删除
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TestDelete {
    public static void main(String[] args) throws Exception{
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取连接
        Connection connection = DriverManager.getConnection("url?useUnicode=true&characterEncoding=utf8","user","password");
        //创建执行sql对象
        Statement statement = connection.createStatement();
        //执行sql并获取返回结果
        int result = statement.executeUpdate("delete from grade where gradeid = 4");
        //处理返回结果
        System.out.println("删除成功===>"+result);
        //关闭连接
        statement.close();
        connection.close();
    }
}
  • 发现重复代码较多,进行封装操作...
import java.sql.*;

public class DBUtils {
    /**
     * 重复代码较多,进行封装
     * 使用静态代码块,原因:类的字节码文件在程序中只有一份,不管加载多少次都是一份,
     * 没有必要每次创建连接的时候加载,只需要程序启动时加载一次即可
     */
    //注册驱动
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //得到连接
    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection("url?useUnicode=true&characterEncoding=utf8", "user", "password");
        return  connection;
    }

    //关闭操作重复也比较多,将其封装 
    public static void closeResources(Connection connection, Statement statement, ResultSet resultSet){
        if (resultSet !=null) {
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
  • 增删改写完,更多用到的还是查询
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestQuery {
    public static void main(String[] args) throws SQLException {
        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from grade");
        //循环遍历数据
        //不清楚多少条,用while循环
        while (resultSet.next()) {
            //得到id和name 内部返回结果通过列的id获取数据getXXX的类型和下标id的列的类型要保持一致
            int id = resultSet.getInt(1);
            String name = resultSet.getString(2);
            System.out.println("主键-->"+id+" 班级名-->"+name);
        }
        //关闭游标集合
//        resultSet.close();
        //关闭连接
//        statement.close();
//        connection.close();
        DBUtils.closeResources(connection,statement,resultSet);
    }
}
  • 发现根据下标不容易知道每个下标是什么类型,修改为使用列名方式获取数据
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 根据下标不容易知道每个下标是什么类型的,修改为使用列名获取数据
 */
public class TestQuery02 {
    public static void main(String[] args) throws SQLException {
        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select  * from  grade");

        //获取列名
        while (resultSet.next()) {
            //获取的时候获取的是列名,不要搞错类型,取决于创建数据表的类型
            int gradeid = resultSet.getInt("gradeid");
            String gradename = resultSet.getString("gradename");
            System.out.println("主键-->"+gradeid+" 课程名-->"+gradename);
        }
        //关闭 每次关闭的操作也重复了,封装一下
//        resultSet.close();
//        statement.close();
//        connection.close();
        DBUtils.closeResources(connection,statement,resultSet);
    }
}
  • 经过上面的两个查询的例子,发现我们的资源关闭每次都需要关闭,因为修改了DBUtils 添加了关闭资源(closeResources)的方法 resultset没有就写null,见DBUtils...

  • 前面例子返现sql语句都是写死的,条件固定,通过传递条件拼接sql的方式进行查询,模拟用户登录操作

mport java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * 前面例子sql语句是写死的,条件也是固定的我么可以通过传递条件拼接sql的方式来进行查询
 * 将输入的用户名密码拼接到参数当中 控制台输入
 */
public class TestLogin {
    public static void main(String[] args) throws SQLException {
        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();

        String username = null;
        String password = null;
        //获取输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        username = scanner.nextLine();
        System.out.println("请输入密码:");
        password = scanner.nextLine();


        //???为输入内容
//        statement.executeQuery("select * from user where username = ??? and password = ???");
        //需要注意,在拼接的时候要加上单引号'',否则会把值当作列来进行判断
        ResultSet resultSet = statement.executeQuery("select * from user where username ='" + username + "' and password = '" + password + "' ");
        //可以将username设为空 password设为空,开始拼接 username = "+usrname+"...
        if (resultSet.next()) {
            //游标移动,有结果,能够查询到,登录成功
            System.out.println("登录成功");

        }else {
            //登录失败
            System.out.println("账号或者密码错误");
        }
        //关闭连接
        DBUtils.closeResources(connection,statement,resultSet);
    }
}
  • 经过查询传参测试,测试一下插入更新和删除能不能通过拼接sql来写
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * 插入是否可以拼接?
 */
public class TestInsertScanner {
    public static void main(String[] args) throws SQLException {
        String gradeid = null;
        String gradename = null;

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要插入班级id");
        gradeid = scanner.nextLine();
        System.out.println("请输入要插入班级名称");
        gradename = scanner.nextLine();

        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();
        int result = statement.executeUpdate("insert into grade (gradeid,gradename) values ("+gradeid+",'"+gradename+"');");

        DBUtils.closeResources(connection,statement,null);
    }
}

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class TestUpdateScanner {
    public static void main(String[] args) throws SQLException {
        String gradeid = null;
        String gradename = null;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要修改的id:");
        gradeid = scanner.nextLine();
        System.out.println("请输入要修改的课程名:");
        gradename = scanner.nextLine();

        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();
        statement.executeUpdate("update grade set gradename = '"+gradename+"' where gradeid = "+gradeid+" ");

        DBUtils.closeResources(connection,statement,null);

    }
}

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class TestDeleteScanner {
    public static void main(String[] args) throws SQLException {
        String gradeid = null;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的课程id");
        gradeid = scanner.nextLine();


        Connection connection = DBUtils.getConnection();
        Statement statement = connection.createStatement();
        int result = statement.executeUpdate("delete from grade where gradeid = "+gradeid+" ");

        DBUtils.closeResources(connection,statement,null);
    }
}
  • 发现也是可以的

总结一下:

1.jdbc连接数据库步骤:

注册加载驱动

获取连接

声明创建连接

执行sql语句返回结果

关闭

2.拼接sql是注意加单引号(依据要传参格式来)

3.在获得连接时,要确保url,user,password正确

posted @ 2021-08-20 19:29  CN_Darren  阅读(34)  评论(0)    收藏  举报