JDBC编程

目录

    • JDBC编程
      • JDBC简介
      • JDBC优势
      • JDBC使用
    • 总结


JDBC编程

JDBC简介

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

JDBC优势

  • Java语言访问数据库操作完全面向抽象接口编程。
  • 开发数据库应用不用限定在特定数据库厂商的API。
  • 程序的可移植性大大增强。

JDBC使用

  1. 创建DataSource对象。
    这个对象描述了数据库服务器在哪。
//1.创建好数据源
DataSource dataSource=new MysqlDataSource();
//设置数据库所在的地址
((MysqlDateSource) dataSource).setURL("jdbc:mysql:127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource) dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("66666");
  1. 创建数据库连接Connection.
//2.让代码和数据库服务器建立连接
Connection connection=dataSource.getConnection();

注意:
1)
JDBC编程_第1张图片
2)
JDBC编程_第2张图片

DataSource内置了连接池,在频繁创建,断开连接时比DriverManager的方式更高效。

  1. 操作数据库
 String sql="insert into students values(1,'张三')";
 //需要把这个String包装成一个“语句对象”
  PreparedStatement statement=connection.prepareStatement(sql);
  1. Statement对象:用于执行不带参数的简单SQL语句。
  2. PreparedStatement :用于执行带或者不带参数的SQL语句。执行速度快于Statement对象。
  1. 执行SQL
//SQL里面如果是insert,update,delete都使用executeUpdate方法
//SQL里面如果是select,则使用executeQuery方法。
 //返回值就表示这个操作影响到了几行,就相当于在控制台输入sql之后得到的数字。
    int ret=statement.executeUpdate();
    System.out.println(ret);
  1. 释放资源。
//此时SQL已经执行完毕,然后还需要释放资源
statement.close();
connection.close();

释放资源时,要先释放statement后释放Connection(先创建后释放)

DateSource/MysqlSource用来描述数据源,描述数据库的地址,端口,数据库名,用户名,密码。
Connection表示数据库连接。
PrepareStatement通过这个对象来描述要执行的SQL。
executeUpdate/executeQuery

  • 用户通过控制台输入待插入的数据。
public class testjdbc {
    public static void main(String[] args)  throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //1.创建数据源
        DataSource dataSource=new MysqlDataSource();
        //设置数据库所在的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        //设置登录数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");
        //设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("111111");
        //2.代码和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
       //让用户通过控制台输入一下待插入的数据
        System.out.println("请输入学号: ");
        int id=scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name=scanner.next();
        //3,操作数据库:
        String sql="insert into student values(?,?)";
        PreparedStatement statement=connection.prepareStatement(sql);
      //进行替换操作
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("statement: "+statement);
        //4执行SQL
        //返回值就表示这个操作影响到了几行,就相当于在控制台输入sql之后得到的数字。
        int ret=statement.executeUpdate();
        System.out.println(ret);
        //5释放资源
        statement.close();
        connection.close();

    }
}

  • 用户通过控制台输出要删除的数据。
 public static void main(String[] args)  throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");
        //2建立连接
        Connection connection=dataSource.getConnection();
        //3用户输入id
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个要删除的id");
        int id=scanner.nextInt();
        //4拼装SQL语句
        String sql="delete from student where id=?";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);
        //5.执行sql
        int ret=statement.executeUpdate();
        System.out.println("ret="+ret);
        //6.释放资源
        statement.close();
        connection.close();
}
  • 用户从控制台输入要修改的数据
  public static void main(String[] args) throws SQLException {
        //创建数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");
        //和数据库建立连接
        Connection connection= dataSource.getConnection();
        //输入信息
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要修改的学生id");
        int id=scanner.nextInt();
        System.out.println("请输入要修改的姓名");
        String  name=scanner.next();
        //拼装sql语句
        String sql="update student set name=? where id=?";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);
        System.out.println("statement:"+statement);
        //执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);
        //释放资源
        statement.close();
        connection.close();
    }

增删改操作基本相同。

  • 查询操作
public static void main(String[] args) throws SQLException {
        //1创建数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");
        //建立连接
        Connection connection=dataSource.getConnection();
        //3拼装SQL
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        //4执行sql,对于查询操作,需要使用executoQuery
        //使用RssultSet表示这个表
        ResultSet resultSet=statement.executeQuery();
        //5.遍历结果结合(返回的临时表),先获取到每一行,再获取到这一行中的若干列
        //next方法表示获取到一行记录,同时把光标往后移动一行
        //如果遍历到表的结束为止,此处的next直接就返回false。
        while(resultSet.next()){//第一次执行resultSet.next就表示获取了第一行。
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println("id="+id+", name="+name);
        }
        //6释放资源
        statement.close();
        connection.close();
    }

总结

  1. 数据库连接有哪些方式?分别有什么区别?
    DriverManager创建和DataSource获取。
    区别:(1)DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时通过connection.close()都是关闭物理连接。
    (2)DataSource提供连接池的支持,连接池在初始化时将创建一定数量的数据库连接,这些连接是可以重复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收。
  2. 数据库Statement和PreparedStatement有什么区别?
    Statement对象主要是将SQL语句发送到数据库中,JDBC API中主要提供了三种Statement对象。
    (1)Statement:用于执行不带参数的简单SQL语句。
    (2)PreparedStatement:用于执行带或者不带参数的SQL语句;SQL语句会预编译在数据库系统;执行速度快于Statement对象。
  3. JDBC使用步骤:
    (1)创建数据源
    (2)创建数据库连接Connection( DataSource获取)
    (3)创建操作命令Statement(PreparedStatement)
    (4)使用操作命令来执行SQL
//查询操作
PreparedStatement.executeQuery();
//新增,修改,删除操作
PreparedStatement.executeUpdate();

(5)处理结果集ResultSet

while(resultSet.next()){
int xxx=resultSet.getInt("xxx");
String yyy=resultSet.getString("yyy");
}

(6)释放资源

statement.close();
connection.close();

你可能感兴趣的:(mysql)