zoukankan      html  css  js  c++  java
  • Mysql: JDBC(Java 操作数据库-mysql)

    JDBC(Java连接数据库)

    maven

    <!--    jdbc添加数据库依赖-->
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    

    测试代码

    import java.sql.*;
    
    /**
     * @ProjectName: jdbc
     * @PackageName: PACKAGE_NAME
     * @Author: zy7y
     * @Date: 2020/8/26 下午5:38
     * @Description: jdbc
     */
    public class TestJdbc01 {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            // 1. 加载驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            // 2. 新建连接
            String url = "jdbc:mysql://192.168.0.222:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true";
            String username = "root";
            String password = "root";
    
            // 建立连接 得到操作数据库的对象
            Connection connection = DriverManager.getConnection(url,username,password);
    
            // 3. 执行sql
            // 执行sql的对象
            Statement statement = connection.createStatement();
    
            String sql = "SELECT * FROM student";
    
            // 执行sql,得到结果集
            ResultSet resultSet = statement.executeQuery(sql);
    
            while (resultSet.next()){
                System.out.println("id=" + resultSet.getObject("studentno"));
            }
            // 4. 释放连接
            resultSet.close(); // 关闭结果集对象
            statement.close(); // 关闭执行sql对象
            connection.close(); // 关闭数据库对象
        }
    }
    

    Connection数据库对象

            //  设置 关闭自动提交
            connection.setAutoCommit(false);
            // 事务提交
            connection.commit();
            // 事务回滚
            connection.rollback();
    

    Statement执行SQL的对象

     // 执行sql,得到结果集 resultSet
            ResultSet resultSet = statement.executeQuery(sql);
            // 执行任何sql语句
            statement.execute(sql);
            // 更新、插入、删除使用,返回一个受影响的行数
            statement.executeUpdate(sql); 
    

    ResultSet 结果集

                // 获得任意类型的列数据
                resultSet.getObject("id");
                // 获得String类型的列数据
                resultSet.getString("name");
                resultSet.getInt("age");
                resultSet.getFloat("money");
                resultSet.getDate("date");
    

    释放连接

            resultSet.close(); // 关闭结果集对象
            statement.close(); // 关闭执行sql对象
            connection.close(); // 关闭数据库对象
    

    SQL注入

    https://www.liaoxuefeng.com/wiki/1252599548343744/1321748435828770

    sql存在漏洞,使用or拼接sql,使用Statement拼字符串非常容易引发SQL注入的问题,这是因为SQL参数往往是从方法参数传入的。,如果用户的输入是一个精心构造的字符串,就可以拼出意想不到的SQL,这个SQL也是正确的,但它查询的条件不是程序设计的意图。例如:name = "bob' OR pass=", pass = " OR pass='"

    SELECT * FROM user WHERE login='bob' OR pass=' AND pass=' OR pass=''
    

    PreparedStatement执行SQL的对象(安全、效率高)

    import java.sql.*;
    
    /**
     * @ProjectName: jdbc
     * @PackageName: PACKAGE_NAME
     * @Author: zy7y
     * @Date: 2020/8/26 下午5:38
     * @Description: jdbc
     */
    public class TestJdbc01 {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            // 1. 加载驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            // 2. 新建连接
            String url = "jdbc:mysql://192.168.0.222:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=true";
            String username = "root";
            String password = "root";
    
            // 建立连接 得到操作数据库的对象
            Connection connection = DriverManager.getConnection(url,username,password);
    
            // 3. 执行sql PreparedStatement 使用?进行占位,代替参数
            String sql = "SELECT * FROM student where studentname = ?";
    
            // 执行sql的对象,
            PreparedStatement preparedStatement = connection.prepareStatement(sql); // 预编译sql,先写sql不执行
    
            // 给参数附值(占位符位置,插入的值)
            preparedStatement.setObject(1,"张伟");
    
    
            // 执行sql,得到结果集 resultSet
            ResultSet resultSet = preparedStatement.executeQuery();
    
            while (resultSet.next()){
                System.out.println("id=" + resultSet.getObject("studentno"));
    
            }
            // 4. 释放连接
            resultSet.close(); // 关闭结果集对象
            preparedStatement.close(); // 关闭执行sql对象
            connection.close(); // 关闭数据库对象
        }
    }
    
    作者:zy7y
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)
    利用C++实现模块隐藏(R3层断链)
    [动态规划]最少硬币问题
    [动态规划]高数Umaru系列(9)——哈士奇(背包问题)
    Windows中利用共享内存来实现不同进程间的通信
    [分治算法]骨牌铺方格
    [分治、递推法、动态规划]最大子段和
    [分治算法]因式分解
    013 CephFS文件系统
    012 Ceph多区域网关
  • 原文地址:https://www.cnblogs.com/zy7y/p/13568157.html
Copyright © 2011-2022 走看看