day17

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;
    }
}
posted @   先瞄准再开枪  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示