java JDBC连接过程与简单数据库操作

本文介绍Java中使用JDBC连接数据库的基本方法,包括获取数据库连接、执行SQL语句、增删改查操作及资源管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JDBC
1)JDBC简介
- JDBC就是Java中连接数据库方式
- 我们可以通过JDBC来执行SQL语句。

2)获取数据库连接
    - java.sql.Connection 数据库连接
    - 我们队数据库的一切操作都是从获取Connection开始
    - 获取数据库连接的四个参数:
        1.数据库的地址 url
            语法:jdbc:子协议:厂商内容
            MySQl的格式:jdbc:mysql://主机名:端口号/数据库名字
            例子:jdbc:mysql://localhost:3306/test

        2.用户名 user 连接数据库使用的用户名
        3.密码 password 数据库的密码
        4.数据库驱动全类名 driverClass

    - 基本步骤:
        1.导入数据库驱动的jar包
            mysql-connector-java-5.1.37-bin.jar
        2.准备四个参数
            - url
            - user
            - password
            - driverClass
        3.加载数据库驱动
            Class.forName(driverClass)
        4.通过DriverManager来获取数据库连接   
            static Connection getConnection(String url, String user, String password)           

    - 核心类:
        - java.sql.DriverManager
            - 数据库驱动的管理器,负责加载数据库的驱动获取数据库连接
            - static Connection getConnection(String url, String user, String password)  
                - getConnection方法用来通过url地址,用户名,密码等参数来获取数据库连接的

        - java.sql.Connection
            - 数据库连接
            - Statement createStatement()  
                - 创建一个Statement对象,通过Statement对象来执行SQL语句

        - java.sql.Statement
            - SQL语句的执行器
                - boolean execute(String sql)  
                    - 执行一条SQL语句,并返回一个布尔值,执行成功返回true,执行失败返回false。用的不多
                - ResultSet executeQuery(String sql)  
                    - 执行查询的SQL语句,并返回一个结果集
                - int executeUpdate(String sql)  
                    - 执行修改数据的SQL语句(增删改),并返回受影响的行数

        - java.sql.ResultSet
            - 查询到的数据的结果集,我们通过JDBC查询数据库获得的数据,都封装在ResultSet中
            - boolean next()  
                - 控制光标向下移动一行,如果光标当前位置是afterLast则返回false,告诉你没数据了,就别读了。
                    如果光标移动以后,没有在afterLast则返回true,可以读取数据。

            - 在ResultSet有很多getXxx(int),比如getString(),getInt(),getByte()。
                通过这些方法可以读取当前行的数据,它们需要一个int值作为参数,
                    int指的是读取数据的列数。
                列数是从1开始的。

            - 在ResultSet中还有很多getXxx(String),它和上边的方法的作用一致,
                只不过它们需要的都是String类型的参数,参数代表的是当前的列名,
                    比如:我们要获取id的值
                        getInt("id")
                    要获取name的值
                        getString("name")
                注意:如果查询的SQL使用了别名,则列名以别名为准。

3)数据的增删改
    //创建一个SQL执行器
    Statement stat = conn.createStatement();

    //创建一个SQL语句
    String sql = "INSERT INTO t_stu(`name` , age) VALUES('沙僧',28)";

    //执行SQL语句
    //executeUpdate用来执行一条修改SQL的语句

    //它需要一个String类型sql作为参数,并会返回一个int型的值,该值表示SQL语句执行以后影响到的行数
    int count = stat.executeUpdate(sql);

4)数据的查询
    //创建Statement对象
    Statement stmt = conn.createStatement();
    //创建一个SQL语句
    String sql = "SELECT id, name sname, age FROM t_stu WHERE id=2";
    //执行查询
    ResultSet rs = stmt.executeQuery(sql);
    //控制光标下移一行
    //如果当前行有数据,则读取
    if(rs.next()){

        //获取id,name,age
        int id = rs.getInt("id");
        String name = rs.getString("sname");
        int age = rs.getInt("age");

        System.out.println(id+"--"+name+"--"+age);
    }

    > 查询操作和修改的主要不同的是,查询使用executeQuery(),
        它会返回ResultSet结果集,我们需要对结果集进行读取。

    > 当我们只需要读取一个数据时,用if。
        当需要读取全部数据时,用while

    > 代码的规范:
        - Connection、Statement、ResultSet,这些资源都是需要和数据建立连接的
            这些资源我们并不是总需要使用,当我们不适用这些资源,需要将这些资源关闭。
        - 关闭资源顺序:
            从后往前关:
                先关 ResultSet
                在关 Statement
                最后关 Connection
        - 示例代码:
            //定义三个变量
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;

            try{

            }catch(Exception e){
                e.printStackTrace();
            }finally{

                if(rs!=null){
                    //关闭ResulSet
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                if(stmt != null){
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

                if(conn != null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

            }

DAO(Data Access Object) 数据访问对象:
在Java中使用DAO类,来去和数据库交互,而其他类不再需要编写JDBC相关的代码,
而是直接调用DAO。
在实际上开发中,我们所有的JDBC相关的代码都应该写在DAO中,
java.sql这个包下的内容不应该出现在DAO以外的地方

t_user

    CREATE TABLE t_user(
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(100),
        `password` VARCHAR(100),
        email VARCHAR(100),
        nickname VARCHAR(50)
    )

创建UserDao(负责User对象和数据库相关的操作)    

    User getUserByUsername(String username) --> 根据用户查找用户

    int saveUser(User user); --> 将用户对象插入进数据库

    User getUserByUsernameAndPassword(String username , String password) --> 根据用户名和密码查找用户

登录:
    登录实际上就是这么一条SQL语句:
        SELECT * FROM t_user WHERE username='' AND password=''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值