JDBC API详解

JDBC

JDBC简介

●JDBC就是使用Java语言操作关系型数据库的一套API

●全称:(Java DataBase Connectivity)Java数据库连接

JDBC本质:

●官方定义的一套操作所有关系型数据库的规则,即接口

●各个数据库厂商取去实现整个接口,提供数据库驱动jar包

●我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

JDBC好处:

●各个数据厂商使用相同的接口,Java代码不需要针对不同的数据库分别开发

●可随时替换底层数据库,访问数据库的Java代码基本不变

操作JDBC步骤

0.创建工程,导入驱动jar包

 

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");

2.获取连接

Connection conn=DiverManager.getConection(url,username,password);

3.定义SQL语句

String sql="update...";

4.获取执行SQL对象

Statement stmt=conn.creatStatement();

5.执行SQL

stmt.executeUpdate(sql);

6.处理返回结果

7.释放资源

示例代码

public class JDBCDemo {
    public static void main(String[] args) throws Exception {
        //1.注册驱动,在mysql5以上的jar包可以不用写
        Class.forName("com.mysql.cj.jdbc.Driver");
​
        //2.获取连接
        String url="jdbc:mysql://127.0.0.1:3306/itnie";
        String usename="root";
        String password="qwe456qwe";
        Connection conn = DriverManager.getConnection(url, usename, password);
​
        //3.定义sql
        String sql="update account set money =3000 where id=1";
​
        //4.获取执行sql的对象Statement
        Statement stmt=conn.createStatement();
​
        //5.执行sql
        int count=stmt.executeUpdate(sql);//受影响的行数
​
        //6.处理结果
        System.out.println(count);
​
        //释放资源
        stmt.close();
        conn.close();
    }
}

JDBC API详解

DriverManager

●DriverManager(驱动管理类)作用:

1.注册驱动

Class.forName("com.mysql.cj.jdbc.Driver");

Driver源码:

 

MySQL 5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中META-INF/service/java.sql.Driver文件中的驱动类

2.获取数据库连接

DriverManager.getConnection(String url,String usename,String password)

参数:

1.url:连接路径

 

2.user:用户名

3.password:密码

Connection

●Connection(数据库连接对象)作用:

1.获取执行SQL对象

●普通执行SQL对象

Statement   creatStatement()

●预编译SQL的执行SQL对象:防止SQL注入

PreparedStatement  prepareStatement(sql)

●执行存储过程的对象

CallableStatement  prepareCall(sql)

2.管理事务

●MySQL事务管理

 

●JDBC事务管理:Connection接口中定义了3个对应的方法

 

示例代码

public class JDBCDemoConnection {
    public static void main(String[] args) throws Exception {
        //获取连接
        String url="jdbc:mysql://127.0.0.1:3306/itnie";
        String usename="root";
        String password="qwe456qwe";
        Connection conn = DriverManager.getConnection(url, usename, password);
        Statement stmt= conn.createStatement();
​
        try {
            //开启事务
            conn.setAutoCommit(false);
            //定义sql
            String sql1="update account set money =2000 where id=1";
            String sql2="update account set money =3000 where id=2";
​
            //获取执行sql的对象Statement
            stmt = conn.createStatement();
​
​
            //执行sql
            int count1=stmt.executeUpdate(sql1);
​
​
            //处理结果
            System.out.println(count1);
            int count2=stmt.executeUpdate(sql2);
​
            //处理结果
            System.out.println(count2);
​
            //未出现异常提交事务
            conn.commit();
        } catch (Exception e) {
            //出现异常回滚事务
            conn.rollback();
            e.printStackTrace();
        }
​
​
        //释放资源
        stmt.close();
        conn.close();
    }

Statement

●Statement作用:

1.执行SQL语句

 

ResultSet(结果集对象)作用:

封装了DQL查询语句的结果

 

●获取查询结果

 

 

示例代码:

public class JDBCDemo_ResultSet {
    @Test
    public void testResultSet() throws Exception {
        //获取连接
        String url="jdbc:mysql://127.0.0.1:3306/itnie";
        String usename="root";
        String password="qwe456qwe";
        Connection conn = DriverManager.getConnection(url, usename, password);
​
        //定义sql
        String sql="select * from account";
​
        //获取Statement对象
        Statement stmt = conn.createStatement();
​
        //执行sql
        ResultSet rs = stmt.executeQuery(sql);
​
        //遍历rs中所有数据
        while (rs.next()){
            //获取数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            double money = rs.getDouble("money");
​
            System.out.println(id);
            System.out.println(name);
            System.out.println(money);
            System.out.println("-------------");
        }
​
        //释放资源
        rs.close();
        stmt.close();
        conn.close();
    }
}

ResultSet案例

需求:查询account账户表数据,封装为Account对象中,并且存储到ArraysList集合中

代码实现:

/**
     * 查询account账户表数据,封装为Account对象中,并且存储到ArraysList集合中
     *1.定义实体类Account
     *2.查询数据,封装到Account对象中
     *3.将Account对象存入ArrayList集合中
     */
    @Test
    public void resultSet() throws Exception {
        //获取连接
        String url="jdbc:mysql://127.0.0.1:3306/itnie";
        String usename="root";
        String password="qwe456qwe";
        Connection conn = DriverManager.getConnection(url, usename, password);
​
        //定义sql
        String sql="select * from account";
​
        //获取Statement对象
        Statement stmt = conn.createStatement();
​
        //执行sql
        ResultSet rs = stmt.executeQuery(sql);
​
        //创建集合
        List<Account> list=new ArrayList<>();
        while (rs.next()){
            Account account=new Account();
​
            //获取数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            double money = rs.getDouble("money");
​
            //赋值
            account.setId(id);
            account.setName(name);
            account.setMoney(money);
​
            //存入集合
            list.add(account);
        }
        System.out.println(list);
​
        //释放资源
        rs.close();
        stmt.close();
        conn.close();
    }

PreparedStatement

●PreparedStatement作用:

预编译SQL语句并执行:预防SQL注入问题

●SQL注入

SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

 

代码实现:

public class JDBCDemo_Preparestatement {
    @Test
     public void login() throws Exception {
        //获取连接
        String url="jdbc:mysql://127.0.0.1:3306/itnie";
        String usename="root";
        String password="qwe456qwe";
        Connection conn = DriverManager.getConnection(url, usename, password);
​
        //接收用户输入的用户名和密码
        String name="22FES2";
        String pwd="aDWFA";
​
        //定义sql
        String sql="select * from tb_user where username= ? and password= ?";
​
        //获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
​
        //设置 ?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);
​
        //执行sql
        ResultSet rs = pstmt.executeQuery();
​
        //判断是否成功
        if (rs.next()){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
​
        //释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }
​
}

PreparedStatement原理

●PreparedStatement好处:

1.预编译SQL:性能更高

2.防止SQL注入:将敏感字符进行转义

①PreparedStatement预编译功能开启:useServerPrepstms=true

示例代码

String url="jdbc:mysql://127.0.0.1:3306/itnie?useServerPrepstms=true";

②配置MySQL执行日志(重启MySQL服务后生效)

 

PreparedStatement原理:

1.在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查、编译(这些步骤很耗时)

2.执行时就不用再进行这些步骤了,速度更快

3.如果sql模板一样,则只需要进行一次检查、编译

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL JDBC API 是用于连接和操作 PostgreSQL 数据库的一种 Java APIJDBC(Java Database Connectivity)是 Java 提供的一种用于访问关系型数据库的标准接口,在许多 Java 应用程序中广泛使用。 通过 PostgreSQL JDBC API,开发人员可以通过编写 Java 代码来连接到 PostgreSQL 数据库,并执行各种数据库操作,如查询、插入、更新和删除数据。 使用 PostgreSQL JDBC API 的第一步是获取数据库的连接。通过指定数据库的 URL、用户名和密码,可以使用 DriverManager 类来获取与数据库的连接。一旦连接成功,就可以创建 Statement 对象,用于执行 SQL 查询和更新语句。 PostgreSQL JDBC API 支持多种查询方式。可以使用 Statement 对象执行简单的 SQL 查询语句,也可以使用 PreparedStatement 对象执行参数化的查询语句,以提高查询效率和安全性。此外,还可以使用 CallableStatement 对象执行存储过程和函数。 在查询数据时,可以使用 ResultSet 对象来获取查询结果。ResultSet 对象是一个指向查询结果的游标,可以用于逐行迭代结果集,获取每行的数据。 除了查询,PostgreSQL JDBC API 还支持更新数据库。可以使用 Statement 或 PreparedStatement 对象来执行 INSERT、UPDATE 和 DELETE 操作,以修改数据库中的数据。 此外,PostgreSQL JDBC API 还提供了一些高级功能,如事务处理、连接池和元数据访问。通过使用这些功能,开发人员可以更好地管理数据库连接、处理并发操作,并获得关于数据库结构和元数据的信息。 总之,PostgreSQL JDBC API 提供了一种方便灵活的方式来连接和操作 PostgreSQL 数据库,使开发人员能够轻松地在 Java 应用程序中集成 PostgreSQL 数据库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值