数据库---JDBC编程

目录

 

JDBC编程语言

mysql提供了一组API来让用户实现客户端 API(mysql提供的一些方法)

不同的关系数据库提供不同的API,而API也没有一个统一标准,所以API接口会有所不同

java是可以跨平台的,java就提出了JDBC,里面包含了一套API,各个厂商为此提供不同的驱动,程序员可以借助一套JDBC来操作不同的数据库

1、创建java项目

2、下载mysql的驱动包,导入java项目

第一步:创建目录

第二步:将mysql的驱动包导入目录

 第三步:右键目录,点击Add as Library

JDBC编程语言

1、设置数据源

 DataSource接口

public static void main(String[] args) {
        DataSource dataSource = new MysqlDataSource();//向上转型
        //DataSource是一个接口,创建DataSource对象表示数据库在哪
        //MysqlDataSource 是 DataSource接口的实现类
        
        //设置数据库的地址
        ((MysqlDataSource) dataSource ).setURL();//向下转型
        //设置登录数据库的用户
        ((MysqlDataSource) dataSource).setUser();
        //设置登录数据库的密码
        ((MysqlDataSource)dataSource).setPassword();
    }

可以不进行向上,向下转化,但是这个更加常见  

但是向上转型,dataSource是DataSource类型的,更方便于以后出现数据库切换的情况

    public static void main(String[] args) {
        DataSource dataSource = new MysqlDataSource();//向上转型

        //URL:就是我们说的网址
        //设置数据库的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
        //设置登录数据库的用户

        ((MysqlDataSource) dataSource).setUser("root");        //root是mysql默认自带的管理员用户
        //设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("123");//安装mysql时的密码
    }

mysql的更高版本在以上内容可能多加&allowPublicKeyRetrieval=true

原因:在MySQL8.0数据库重启后,第一次连接数据库时会出现这个错误: Public Key Retrieval is not allowed

  2、将代码和数据库建立连接 

Connection接口

  //2、将代码和数据库建立连接
        Connection connection=dataSource.getConnection();//需要抛出异常

3、操作数据库

  先在mysql数据库中,设置好student数据库,创建表 

 Connection接口内的一个方法:

PreparedStatement接口:将sql语句包装成为“语句对象”

 PreparedStatement接口的方法:

  1. 插入信息 
    public static void main(String[] args) throws SQLException {

        //1、设置数据源
        DataSource dataSource = new MysqlDataSource();//向上转型
        //URL:就是我们说的网址
        //设置数据库的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
        //设置登录数据库的用户
        ((MysqlDataSource) dataSource).setUser("root");        //root是mysql默认自带的管理员用户
        //设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码


        //2、将代码和数据库建立连接
        Connection connection = dataSource.getConnection();//需要抛出异常

        //3、操作数据库 使用sql语句

        //插入记录
        String sql = "insert into stu values(1,'张三')";//参数化的SQL语句
       PreparedStatement preparedStatement= connection.prepareStatement(sql);
        //创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库

        //4、执行sql语句
        int ret=preparedStatement.executeUpdate();//update,insert,delete操作  返回值int,表示修改影响了数据库的几条记录
        System.out.println(ret);

        //5、释放资源
        //先释放preparedStatement,后释放connection
        preparedStatement.close();
        connection.close();
    }

 执行代码完毕之后,在数据库查看记录:

 代码执行成功

如何实现将用户输入信息插入呢?

 String sql="insert stu values(?,?)";//使用?替代未知量

借助PreparedStatement 接口的set系列方法 将?替换为传入值

    public static void main(String[] args) throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
        //设置登录数据库的用户
        ((MysqlDataSource) dataSource).setUser("root");        //root是mysql默认自带的管理员用户
        //设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码

        Connection connection= dataSource.getConnection();

        Scanner scanner=new Scanner(System.in);


            String sql = "insert stu values(?,?)";//使用?替代未知量

            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            int i=2;

            while(i-->0) {//可以实现循环,多条插入
                System.out.println("用户输入待插入学生序号和姓名");
                int id = scanner.nextInt();
                String str = scanner.nextLine();

                preparedStatement.setInt(1, id);
                //1是因为在sql中,id是第1个?所需要传入的参数
                preparedStatement.setString(2, str);
                //2是因为在sql中,str是第2个?所需要传入的参数
                preparedStatement.executeUpdate();
            }
        preparedStatement.close();
        connection.close();
    }

2、删除信息

    public static void main(String[] args) throws SQLException {
        //1、数据库源
        DataSource dataSource=new MysqlDataSource();
        (  (MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
        (  (MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码

        //2、获取连接
        Connection connection=dataSource.getConnection();
        //3、执行语句
        String sql="delete from stu where id=?";
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入删除信息的id号");
        int id=scanner.nextInt();
        preparedStatement.setInt(1,id);

        preparedStatement.executeUpdate();
        //4、释放资源
        preparedStatement.close();
        connection.close();
    }

 3、修改信息

    public static void main(String[] args) throws SQLException {
        //1、数据库源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码

        //2、获取连接
        Connection connection = dataSource.getConnection();
        //3、执行语句
        String sql = "update  stu set name=? where id=?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入修改信息的id号及修改后的学生姓名");
        int id = scanner.nextInt();
        String name = scanner.nextLine();
        preparedStatement.setInt(2, id);
        preparedStatement.setString(1, name);
        preparedStatement.executeUpdate();
        //4、释放资源
        preparedStatement.close();
        connection.close();
    }

4、查看信息

使用PreparedStatement接口的方法

    public static  void main(String[] args) throws  SQLException {
        //1、数据库源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false" +
                "&allowPublicKeyRetrieval=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码

        //2、获取连接
        Connection connection = dataSource.getConnection();
        //3、打包字符串成为sql语句
       String sql="select * from stu";
       PreparedStatement preparedStatement=connection.prepareStatement(sql);

       // 4、执行语句 查询结果返回一个表,使用类ResultSet接收
        ResultSet resultSet = preparedStatement.executeQuery();
        //类比数组,光标先执行arr[-1],next()执行,光标指向arr[0],arr【0】不存在返回false
        while (resultSet.next()) {//光标前移
            //光标指向每一行,提供每一行获取所有列的元素
            int id = resultSet.getInt("id");//获得id列
            String ret = resultSet.getString("name");//name列
            System.out.println("id: " + id + "  name: " + ret);
        }
        //5、释放资源
        preparedStatement.close();
        connection.close();
    }

5、创建数据库

    public static void main(String[] args) throws SQLException {
        //1、数据库源
        DataSource dataSource=new  MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false" );
        ( (MysqlDataSource)dataSource).setPassword("123");
        ( (MysqlDataSource)dataSource).setUser("root");
        //2、连接
        Connection connection=dataSource.getConnection();
        //3、包装sql语句
        String sql="CREATE DATABASE ebook CHARACTER SET 'utf8mb4'";
       PreparedStatement preparedStatement= connection.prepareStatement(sql);

       //4、执行
        preparedStatement.execute();
        //5、关闭资源
        preparedStatement.close();
        connection.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值