第一个JDBC程序

JDBC

概念
首先了解什么是JDBC,当然,JDBC是一种java程序语言,而JDBC程序的作用就是在java程序中连接并管理数据库。
在还未学习JDBC前,我们连接数据库大多都是通过控制台,或者专门的管理数据库软件来连接并管理数据库,但是这样的的管理得到的数据都是只能以表的形式展现给我们,我们无法利用得到的数据,更不能在程序中利用得到的数据进行运算。而这时JDBC这一种java语言就完成了java程序连接和管理数据库的作用,JDBC程序可以在我们的java项目中连接数据库,管理书数据库,使用数据库里的数据。
JDBC程序前的准备
java程序通过JDBC连接数据库,而写JDBC程序需要将数据库连接驱动包导入java项目中。每种数据库与不同编程语言的连接驱动不同,每种数据库都会提供对应不同编程语言的连接驱动包,只需去对应数据库官网下载即可。这里以MySql数据库为例下载与java程序连接的驱动包。

下载链接https://www.mysql.com/cn/products/connector/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

第一个JDBC程序
项目导入驱动架包后就可以编写我们的第一个JDBC程序
1.JDBC程序
public class Jdbc {
    public static void main(String[] args)  {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try{
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/practise?useUnicode=true&characterEncoding=utf8&useSSL=true";
            //用户名
            String username = "root";
            //密码
            String password = "1234";
            //连接数据库,此时connection代表数据库,可以完成数据库的操作
            connection = DriverManager.getConnection(url,username,password);
            //执行的sql语句的对象
            statement = connection.createStatement();

            //执行sql语句
            String sql = "SELECT * FROM users";

            //返回几个结果集,封装了所有查询数据
            resultSet = statement.executeQuery(sql);
            
            //输出数据
            while (resultSet.next()){
                System.out.println("name" + resultSet.getString("name"));
            }

        }catch (SQLException e){
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            
            //释放资源
            try {
                if(resultSet != null){
                    resultSet.close();
                }
            }catch (SQLException e){
                e.printStackTrace();
            }

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

    }
}

2.对象解析

JDBC程序步骤:

  • 加载驱动
  • 获得连接
  • 获取执行sql语句对象
  • 若是查询则需返回结果集
  • 释放资源
    1)加载驱动
    其实我们在加载驱动前需要注册驱动:DriverMansger驱动管理类
    通过调用该类的一个方法在这里插入图片描述
    但是我们实际开发中不会用该方法来注册驱动,因为在该类的静态代码区中已经调用了该方法注册了驱动,再手动注册驱动则会浪费资源。所以我们在实际开发中使用以下方法来加载驱动。
 Class.forName("com.mysql.cj.jdbc.Driver");

2)获得连接
注册驱动后就需要获得连接

connection = DriverManager.getConnection(url,username,password);

通过调用DriverManager类中的getConnection方法获取连接,调用这个方法我们需要传递三个字符串参数url,username,password
URL:

jdbc:mysql://localhost:3306/practise?useUnicode=true&characterEncoding=utf8&useSSL=true

而这个URL又是由什么组成的呢,连接数mysql数据库的URL形式:jebc:mysql://主机地址:端口号/数据库名?参数1&参数2&参数3
主机地址可以是电脑的IP地址,也可以直接写localhost,端口号:mysql的端口号统一为3306,数据库名则是你需要连接的数据库名,而后面的参数则是设置数据库使用的字符集。
Username:
这个参数则是登入数据库时所用的用户名,如果没有更改的话都是root
PassWords:
这个参数则是数据库用户密码
获取连接后,connection就代表了数据库,该对象可以执行数据库的操作,如事务的开始与回滚。
3)获取执行sql语句的对象
获取连接后,就要获取执行sql语句的对象

statement = connection.createStatement();

通过connection的createStatment方法获取执行sql语句的对象statment,该对象可以执行sql语句
4)获取查询的结果集
如果需要执行查询操作,那我们则需要得到一个结果集resultSet

resultSet = statement.executeQuery(sql);

调用statement的executQuery方法返回一个结果集,该方法将结果集封装到一个resultSet对象,最后再通过resultSet对象获取里面的数据
5)资源释放
当JDBC程序结束前,我们需要释放资源

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

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

通过各对象的close方法释放资源。需要注意的是释放资源的顺序,一定是先释放结果集对象resultSet,再释放执行sql语句对象statement,最后释放连接对象connection.
3.ResultSet类相关API

  • resultSet.next():该方法判断是否还有下一条记录,若有则查询下一条记录
  • resultSet.getInt(String name):该方法返回表中的数据,参数为列名,类似的还有getDouble(),getString()等方法对应获取不同的数据的方法。若不知道数据类型,则可以调用getObject()方法。

    4.PreparedStatement类(继承了Statement类)
  • 我们在实际开发中不会使用Statement类,因为该类很容易发生SQL注入。那什么又是SQL注入呢,所谓SQL注入其中之一就是在我们做登入操作时通过字符串拼接来欺骗数据库,从而做到在不知道密码的情况下完成登入操作。
  • 使用PreparedStatement

    与Statement类使用不同的是,PrepredStatement类需要先预编译,再传递参数,最后执行SQL语句。
			String sql = "insert books(name,price,number) value (?,?,?)";
			//预编译
			preparedStatement = connection.prepareStatement(sql);
			//传递参数
            preparedStatement.setString(1,"1234");
            preparedStatement.setDouble(2,30);
            preparedStatement.setInt(3,20);
            //返回结果集,封装了所有查询数据
            preparedStatement.executeUpdate() ;
  • 执行SQL语句相关API
    因为PreparedStatement继承了Statement类,所以执行SQL语句方法基本相同。
    1.ResultSet executeQuery():执行DML语句,执行查询操作,返回一个结果集,封装了查询数据。
    2.int executeUpdate():执行DDL语句,执行增,删,改的操作,返回更新后记录的条数。
    3.boolean excute():可以执行任何sql语句,但不建议使用该方法,该方法效率较低。
    4.void addBath():执行多条sql语句,添加sql语句
    5.void clearParmeters():执行多条sql语句添加了语句就有清除sql语句

    这就是执行数据库增删改查的第一个JDBC程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是四个问题,我会一一回答。 1、安装Mysql、图形化工具SQLYog: 首先,你需要下载安装Mysql数据库和SQLYog图形化工具。可以从Mysql官网下载安装包,也可以使用软件包管理工具进行安装。SQLYog可以从官网下载安装包,也可以使用其他类似的工具,比如Navicat等。 2、实现第一个JDBC程序JDBCJava数据库连接的标准接口,可以用于连接各种关系型数据库。下面是一个简单的JDBC程序示例,可以连接到本地的Mysql数据库: ``` import java.sql.*; public class JdbcDemo { public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 执行SQL查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM user"); // 遍历查询结果 while (rs.next()) { System.out.println(rs.getInt("id") + ", " + rs.getString("name") + ", " + rs.getInt("age")); } // 释放资源 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 3、使用JDBC完成数据的增删改查: 下面是一个简单的JDBC程序示例,可以用于执行数据的增删改查操作: ``` import java.sql.*; public class JdbcDemo { public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 执行SQL插入操作 String sql = "INSERT INTO user (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "张三"); pstmt.setInt(2, 20); pstmt.executeUpdate(); // 执行SQL更新操作 sql = "UPDATE user SET age = ? WHERE name = ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 25); pstmt.setString(2, "张三"); pstmt.executeUpdate(); // 执行SQL删除操作 sql = "DELETE FROM user WHERE age < ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 18); pstmt.executeUpdate(); // 执行SQL查询操作 sql = "SELECT * FROM user"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // 遍历查询结果 while (rs.next()) { System.out.println(rs.getInt("id") + ", " + rs.getString("name") + ", " + rs.getInt("age")); } // 释放资源 rs.close(); stmt.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 4、使用JDBC实现用户的登录功能: 用户登录功能通常需要与数据库中的用户表进行交互。下面是一个简单的JDBC程序示例,可以用于实现用户登录功能: ``` import java.sql.*; public class JdbcDemo { public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 执行SQL查询操作 String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "admin"); pstmt.setString(2, "123456"); ResultSet rs = pstmt.executeQuery(); // 判断查询结果是否为空 if (rs.next()) { System.out.println("登录成功"); } else { System.out.println("登录失败"); } // 释放资源 rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上就是我对你的四个问题的回答,希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值