首页 > 其他分享 >day17

day17

时间:2024-10-19 10:11:04浏览次数:1  
标签:String 数据库 resultSet day17 location mysql password

JDBC

JDBC编写六步走:
    1、注册驱动,告诉java程序我们要链接什么数据库
        【mysql为案例】
            5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】
            8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】
    2、创建与数据库的链接对象
    3、创建操作数据库对象
    4、操作数据库对象调用方法执行sql语句,操作数据库
    5、如果第4步是查询操作的话,需要进一步分析查询结果
    6、释放资源,关闭与数据库的链接

public class JDBCDemo1 {
    public static void main(String[] args) throws Exception {
        // 注册驱动,告诉java程序我们要链接什么数据库
        Class.forName("com.mysql.jdbc.Driver");

        // 创建与数据库的链接对象
        // public static Connection getConnection(String url,String user, String password)
        /**
         * url: 超链接
         *  jdbc:mysql://192.168.233.129:3306/bigdata?characterEncoding=UTF-8&useUnicode=True
         * username: root
         * password: 123456
         */
        String url = "jdbc:mysql://192.168.233.101:3306/bigdata?characterEncoding=UTF-8&useUnicode=True&useSSL=false";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        System.out.println("成功获取与mysql数据库的链接对象:" + conn);

        // 创建操作数据库对象
        Statement state = conn.createStatement();

        // 操作数据库对象调用方法执行sql语句,操作数据库
        // SQL - 结构化查询语言 只要是结构化数据库,基本都可以使用sql语句【mysql是其中一种】
        // 增删改,其它的操作
        // 增加
//        int i = state.executeUpdate("insert into students values(1007,'李刚2',18,'男','文科一班')");
//        if(i==1){
//            System.out.println("插入数据成功!");
//        }else {
//            System.out.println("插入数据失败!");
//        }
        // 删除
//        state.executeUpdate("delete from students where id=1007");
        // 修改
//        state.executeUpdate("update students set name='江川' where id=1006");

        // DQL 查询
        ResultSet resultSet = state.executeQuery("select t1.location as location,count(1) as counts from (select location from jd_comment where productColor='墨玉青') t1 group by t1.location order by counts desc limit 10");

//        resultSet.next();
//        String location = resultSet.getString(1);
//        String counts = resultSet.getString(2);
//        System.out.println(location+": "+counts);

        while (resultSet.next()){
            //根据列索引获取元素,从左向右从1开始
//            String location = resultSet.getString(1);
//            String counts = resultSet.getString(2);

            // 根据列名获取
            String location = resultSet.getString("location");
            String counts = resultSet.getString("counts");

            System.out.println(location+": "+counts);
        }

        // 释放资源,关闭与数据库的链接
        state.close();
        conn.close();

    }
}

sql注入的问题

在执行SQL语句时是使用拼接字符串的操作 导致可以输入特定的字符串篡改逻辑导致 错误执行 
解决方法:
1.创建操作对象时创建preparedStatement操作对象,定好sql语句的格式,再根据输入的内容对指定位置进行替换
            String sql = "select name,password from sjusers where name=? and password=?"; // ?相当于占位符
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1,name);
2.在根本上解决:
    禁止输入带空格的内容 将nextLine()改为next()
            preparedStatement.setString(2,pwd);

读取链接getProperty文件

public class MySQLTool {
    private static Properties prop;
    private static Connection conn;
    private MySQLTool(){}

    public static Connection getConnection(){
        try {
            //创建Properties对象
            prop = new Properties();
            prop.load(new BufferedReader(new FileReader("java/src/com/shujia/day17/mysql.properties")));
            String url = prop.getProperty("url");
            String username = prop.getProperty("username");
            String password = prop.getProperty("password");

            // 注册驱动,告诉java程序我们要链接什么数据库
            Class.forName("com.mysql.jdbc.Driver");

            conn = DriverManager.getConnection(url, username, password);
        }catch (Exception e){
            e.printStackTrace();
        }

        return conn;
    }
}

标签:String,数据库,resultSet,day17,location,mysql,password
From: https://www.cnblogs.com/flxf/p/18475532

相关文章

  • java_day17_JDBC、登录注册修改案例
    一、JDBCJDBC编写六步走:1、注册驱动,告诉java程序我们要链接什么数据库【mysql为案例】5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】2、创建与数据库的链接对象......
  • Day17方法的定义和调用
    Day17方法的定义和调用方法定义何谓方法?System.out.println(),那么它是什么呢?答:System是类;out是指System输出的对象,println()是方法___()是方法Java方法是语句的集合:它们在一起执行一个功能。1.方法是解决一类问题的步骤的有序组合2.方法包含于类或对象......
  • Day17什么是方法
    Day17什么是方法何谓方法?System.out.println(),那么它是什么呢?答:System是类;out是指System输出的对象,println()是方法___()是方法Java方法是语句的集合:它们在一起执行一个功能。1.方法是解决一类问题的步骤的有序组合2.方法包含于类或对象中3.方法在程序......
  • 代码随想录算法训练营day17| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜
    学习资料:https://programmercarl.com/0654.最大二叉树.html#算法公开课用前序遍历构造二叉树二叉搜索树的特点,其左节点的值<每个节点的值<其右节点的值,且根节点的值大于它的左子树的所有节点的值,小于它右子树的所有节点的值,其他同理。二叉搜索树的搜索和验证时不关心遍历顺序,因......
  • 代码随想录算法训练营Day17 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜
    目录654.最大二叉树617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树654.最大二叉树题目654.最大二叉树-力扣(LeetCode)给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在......
  • 数据结构(Day17)
    一、单链表实现信息管理1、函数声明部分#ifndef__LINK_H__#define__LINK_H__#include<myhead.h>typedefstructLink1{ union{ intlen;//用于头结点,统计节点个数 intdata;//用于正常节点,存储数据 }; structLink1*next;//指针域}Link,*Plink;/*********......
  • Day17 二叉树part07| LeetCode 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先235.二叉搜索树的最近公共祖先利用二叉搜索树的特性——有序树,可知,如果中间节点是p和q的公共节点,那个中间节点的数值一定在[p,q]区间因此,从根节点往下搜索,遇到的第一个位于[p,q]或[q,p]区间的节点就是最近公共祖先classSolution{......
  • 【代码随想录Day17】二叉树Part05|练习递归
    654.最大二叉树题目链接/文章讲解:代码随想录视频讲解:又是构造二叉树,又有很多坑!|LeetCode:654.最大二叉树_哔哩哔哩_bilibili思路和昨天的从中序与后序遍历序列构造二叉树很像,那一题是根节点对数组分割,这一题是最大元素对数组分割。代码解释:基本检查:如果输入数组nums......
  • leetcode刷题day17|二叉树Part05(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的
    654.最大二叉树构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。递归三步曲:1、传入参数,整数数组,数组的开始和结束,返回树的中间节点。2、终止条件:开始大于等于结束,即数组为空。3、递归逻辑:找到最大的元素,记录元素其下标,构建中间节点;递归构造......
  • chapter13-常用类——(Date、Calendar、LocalDate)—day17
    目录488-Date介绍489-Date应用实例490-Calendar介绍491-Calendar应用实例492-第三代日期使用493-第三代日期方法494-String翻转495-注册处理题496-字符串统计497-String内存布局测试题488-Date介绍IDEA里面的properties是set/get方法489-Date应用实例4......