首页 > 其他分享 >JDBC基础

JDBC基础

时间:2023-02-18 19:24:24浏览次数:30  
标签:JDBC getProperty String 基础 preparedStatement catch password properties

JDBC基础

1.通过代码实现连接数据库

public static void connection1(){
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/xiaoxu?useSSL=false&serverTimezone=UTC";//在MySQL8.0之后必须写时区
            String user="root";
            String password="123456";
            Connection connection= DriverManager.getConnection(url,user,password);
            System.out.println("连接成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

2.通过配置文件获取连接数据库

public static void connection2() {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\jdbcStudy\\mysql.properties"));
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
            String driver = properties.getProperty("driver");
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println("连接成功");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
url=jdbc:mysql://localhost:3306/xiaoxu?useSSL=false&serverTimezone=UTC
user=root
password=123456
driver=com.mysql.cj.jdbc.Driver
#properties存储方式为键值对  通过获取properties的key值来获取其value

目录结构

3.数据库的增删改查

  public static void connection2() {
        /**
         * 简单的sql注入问题
         * Select * from admin where name="admin" and password="123456";
         *  此时数据存在
         *  当将name修改为   1 'or'
         *  password修改为 or '1'='1'
         *  这时的查找结果仍然存在
         *  这就是主要不使用Statement的主要原因
         *  使用preparedStatement可以有效防止注入
         */
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\jdbcStudy\\mysql.properties"));
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
            String driver = properties.getProperty("driver");
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);
            //sql语句  这里使用了占位符
            String sql = "Select name,password from test where name=? and password=?";
            //创建PreparedStatement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //给占位符赋值
            preparedStatement.setString(1, "xiaoxu");
            preparedStatement.setString(2, "123456");
            //执行查询  注意:查询使用的是executeQuery();
            //如果是(add,update,delete)使用的则是executeUpdate()
            //上面已经给preparedStatement对象赋值  所以不需要填写sql
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                System.out.println("登录成功");
            } else {
                System.out.println("登录失败");
            }
            //关闭连接
            resultSet.close();
            preparedStatement.close();
            connection.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 数据库的增删改操作
     */
    public static void dml() {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\jdbcStudy\\mysql.properties"));
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
            String driver = properties.getProperty("driver");
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url, user, password);

            //数据库的增加
            String add="insert into test values(?,?,?)";
            //数据库的删除
            String delete="delete from test where name=?";
            //数据库的修改
            String update ="update test set password =? where name=?";
            //依次问号赋值并且创建preparedStatement对象即可
            PreparedStatement preparedStatement=connection.prepareStatement(add);
            preparedStatement.setString(1,"小王");
            preparedStatement.setString(2,"1234565");
            preparedStatement.setString(3,"444");
           int addRow=preparedStatement.executeUpdate();//返回受影响的行数
            if (addRow>0){
                System.out.println("执行成功");
            }
            else {
                System.out.println("执行失败");
            }
             //关闭连接
            resultSet.close();
            preparedStatement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

4.JDBC API导图

标签:JDBC,getProperty,String,基础,preparedStatement,catch,password,properties
From: https://www.cnblogs.com/xiaoxu137/p/17133328.html

相关文章

  • vue基础:组件其他、组件间通信之父传子(通过自定义属性)、组件间通信之子传父(通过自定义
    目录一、组件其他二、组件间通信之父传子(通过自定义属性)三、组件间通信之子传父(通过自定义事件)四、ref属性五、动态组件5.0不使用动态组件5.1动态组件component标签5.2......
  • Python 学习01 基础知识
    ......
  • Linux基础 - 用户管理
     [root@my-node10~]#useruseradduserdelusermodusers[root@my-node10~]#groupgroupaddgroupdelgroupmemsgroupmodgroups 新增用户: usera......
  • RabbitMQ的基础安装与使用
    安装主机部署http://www.rabbitmq.com/install-rpm.html选择RPM包下载,选择对应平台,本次安装在CentOS7,其它平台类似。由于使用了erlang语言开发,所以需要erlang的包。er......
  • 电学基础知识01
    一.电路的基本组成1,电路:电路是电流的流通路径,它是由一些电气设备和元器件按一定方式连接而成的.复杂的电路呈网状,又称网络.电路和网络这两个术语是通用的.2,电路的......
  • c++ 待自我实现的基础组件
    内存池ringbuffer定时器rbtree原子操作共享内存slab文件操作elf文件解析死锁检测内存泄漏网络框架,epoll异步请求,redis,sql连接池线程池,日志相关协议......
  • 【算法训练营day46】LeetCode139. 单词拆分 多重背包基础
    LeetCode139.单词拆分题目链接:139.单词拆分独上高楼,望尽天涯路没什么思路。慕然回首,灯火阑珊处挖个坑,二刷的时候填。classSolution{public:boolwordBreak......
  • Golang基础-字符串
    StringsAstringinGoisanimmutable(不可变的)sequenceofbytes,whichdon'tnecessarilyhavetorepresentcharacters.doublequotes("")和backticks(`)的区别......
  • 【Java-01】java基础-基本语法
    1、基本输出语句/**java*多行注释*///java单行注释publicclass_01_HelloWorld{publicstaticvoidmain(String[]args){//main方法System.......
  • python Django基础
    django官网https://www.djangoproject.com/download/文档https://docs.djangoproject.com/安装Django安装官网LTS版本pipinstalldjango==3.2.15Django命令>django......