JDBC

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

本质上是官方公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动的jar包中的实现类。

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

1.DriverManage

package com.jdbc;

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

//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

public class JDBCDemo {
    public static void main(String[] args) throws Exception {
//        注册驱动
        Class.forName("com.mysql.jdbc.Driver");
//        获取连接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String usernam="root";
        String password="root";
//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

        Connection conn=DriverManager.getConnection(url,usernam,password);
//        定义sql
        String sql="update stu set status=2 where id=2";
//        获取执行sql的对象
        Statement stat=conn.createStatement();
//        执行sql,返回受影响的行数
        int count=stat.executeUpdate(sql);
//        释放资源
        stat.close();
        conn.close();


    }

}

2.Connection

package com.jdbc;

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

//Connection作用
//获取执行SQL的对象
//管理事务

public class JDBCDemo2_Connection {
    public static void main(String[] args) throws Exception {
//        注册驱动
        Class.forName("com.mysql.jdbc.Driver");
//        获取连接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String usernam="root";
        String password="root";
//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

        Connection conn=DriverManager.getConnection(url,usernam,password);
//        定义sql
        String sql1="update stu set status=2 where id=2";
        String sql2="update stu set status=2 where id=3";
//        获取执行sql的对象
        Statement stat=conn.createStatement();



        try {
            //        开启事务
            conn.setAutoCommit(false);
//        执行sql,返回受影响的行数
            int count1=stat.executeUpdate(sql1);
            System.out.println(count1);

//        执行sql,返回受影响的行数
            int count2=stat.executeUpdate(sql2);
            System.out.println(count2);
            //        提交事务
            conn.commit();
        } catch (Exception throwables) {
//            回滚事务
            conn.rollback();
            throwables.printStackTrace();
        }


//        释放资源
        stat.close();
        conn.close();


    }

}

3.Statement

执行sql语句

int executeUpdate(sql) 执行DML DDL语句

返回值 DML返回影响的行数  DDL语句执行成功也可能会返回0

ResultSet executeQuery(sql); 执行DQL语句

返回ResultSet结果集对象

package com.jdbc;

import com.pojo.Account;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

//Statement作用
//获取执行SQL的对象
//管理事务

//执行DML语句
public class JDBCDemo4_ResultSet {
    @Test
    public void testResultSet() throws Exception{
        //        注册驱动
        Class.forName("com.mysql.jdbc.Driver");
//        获取连接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String usernam="root";
        String password="root";
//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

        Connection conn=DriverManager.getConnection(url,usernam,password);
//        定义sql
        String sql="select * from stu";
//        获取执行的对象
        Statement stmt=conn.createStatement();
//        执行sql
        ResultSet rs=stmt.executeQuery(sql);
//        处理结果 遍历re中的数据
//        光标向下移动一行,判断当前行是否有数据
        while(rs.next()){
//            获取数据
            int id=rs.getInt(1);
            String name=rs.getString(2);
            String gender=rs.getString(3);
            System.out.println(id);
            System.out.println(name);
            System.out.println(gender);
        }
//        释放资源
        rs.close();
        stmt.close();
        conn.close();

    }

//    查询数据库中的数据,封装到Account类中,并存储到ArrayList集合中
//    1.定义实体类
//    2.查询数据,封装到Account对象中
//    3.将Account对象放入ArrayList集合中

    @Test
    public void testResultSet2() throws Exception{
        //        注册驱动
        Class.forName("com.mysql.jdbc.Driver");
//        获取连接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String usernam="root";
        String password="root";
//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

        Connection conn=DriverManager.getConnection(url,usernam,password);
//        定义sql
        String sql="select * from stu";
//        获取执行的对象
        Statement stmt=conn.createStatement();
//        执行sql
        ResultSet rs=stmt.executeQuery(sql);
//        处理结果 遍历re中的数据
//        光标向下移动一行,判断当前行是否有数据
        List<Account> list=new ArrayList<>();
        while(rs.next()){
//            获取数据
            Account account=new Account();
            int id=rs.getInt(1);
            String name=rs.getString(2);
            String gender=rs.getString(3);
            account.setId(id);
            account.setName(name);
            account.setGender(gender);
            list.add(account);
//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(gender);
        }
        System.out.println(list);
//        释放资源
        rs.close();
        stmt.close();
        conn.close();

    }

}

4.PreparedStatement

作用

1.预编译sql语句并执行,预防SQL注入问题,因为他把特殊字符转义了SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方。

2.速度更快

 

 

package com.jdbc;

import com.pojo.Account;
import org.junit.Test;

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

//prepareStatement作用
//预防sql注入问题


//执行DML语句
public class JDBCDemo5_PreparedStatement {
    @Test
    public void testLogin() throws Exception{
        //        注册驱动
        Class.forName("com.mysql.jdbc.Driver");
//        获取连接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String usernam="root";
        String password="root";
//        DriverManager.getConnection 获取数据库连接
//        DriverManager.registerDriver(); 注册驱动

        Connection conn=DriverManager.getConnection(url,usernam,password);
        String name="";
        String psw="";

//        定义sql
        String sql="select * from tb_user where username=? and password=?";

//        获取执行的对象
        PreparedStatement pstmt=conn.prepareStatement(sql);
        pstmt.setString(1,name);
        pstmt.setString(2,psw);

//        执行sql
        ResultSet rs=pstmt.executeQuery();

//        判断是否有数据
        if(rs.next()){
            System.out.println("登录成功");

        }else{
            System.out.println("登录失败");
        }

//        释放资源
        rs.close();
        pstmt.close();
        conn.close();

    }
}

 

posted on 2023-03-16 18:11  啥123  阅读(18)  评论(0编辑  收藏  举报