JDBC基础1

JDBC基本介绍 

获取connection的方式

 TIP:把这个选中取消可以让文件夹分层

前置工作:在项目下创建一个文件夹比如libs, 将 mysql.jar 拷贝到该目录下,点击 add as library

在mysql官网上下载连接的jar包_18你磊哥的博客-CSDN博客  mysql.jar包下载教程

第一种(操作完整版)

import java.sql.*;
import java.util.Properties;
import com.mysql.cj.jdbc.Driver; //注意引这个 新版有cj


public class Jdbc01{
    public static void main(String[] args) throws Exception{

        //1.注册驱动
        Driver driver = new Driver();
        //2.得到连接 (mysql的连接本质就是socket连接)
        String url = "jdbc:mysql://localhost:3306/shang_02";
        // jdbc:mysql:// 规定好表示协议,通过jdbc的方式连接mysql
        // localhost 主机,可以是ip地址
        // 3306 表示mysql监听的端口号
        // shang_02 连接到mysql的哪个数据库

        //3.将用户名和密码放入到Properties对象,用url和properties得到连接
        Properties properties = new Properties();
        properties.setProperty("user","root"); //用户
        properties.setProperty("password","shang"); //密码
        Connection connection = driver.connect(url,properties);

        //4.执行sql (用statement)
        String sql = "insert into t01 values('张三',21)";
        Statement statement = connection.createStatement();
        int rows = statement.executeUpdate(sql);
        //如果是dml语句,返回的就是影响行数
        System.out.println(rows>0?"成功":"失败");

        //5.关闭连接资源
        statement.close();
        connection.close();
    }
}

第二种 

    public void connect02() throws Exception{
        //使用反射加载Driver类,动态加载,更加灵活,减少依赖性
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver dirver = (Driver)aClass.newInstance();
        
        ...//后面就一样了
        
    }

第三种

    public void connect03() throws Exception{
        //用DriverManager替代Driver
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        //创建url,user和password
        String url = "jdbc:mysql://localhost:3306/shang_02";
        String user = "root";
        String password = "shang";
        //注册Driver驱动
        DriverManager.registerDriver(driver);

        Connection connection = DriverManager.getConnection(url,user,password);
        
    }

第四种(第三种的极简版本)

 自动完成注册,简化代码

    public void connect04() throws Exception{
        //Class.forName("import com.mysql.cj.jdbc.Driver");
        //创建url,user和password
        String url = "jdbc:mysql://localhost:3306/shang_02";
        String user = "root";
        String password = "shang";

        Connection connection = DriverManager.getConnection(url,user,password);
        System.out.println(connection);
    }

注:1. 调用DriverManager的getConnection方法,直接获取连接,不用生成Driver。

       2. 并且mysql驱动5.1.6可以无需Class.forName("..."),但还是建议写上,更加明确。

       3. register那句代码省略,因为Driver类在加载时,它源码的静态代码块已经注册过DriverManager了

第五种 

增加配置文件,让连接mysql更加灵活

注意:都不加双引号! 

    public void connect05() throws Exception{
        //通过Properties对象获取配置文件的信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("D:\\JavaProject\\Hello\\src\\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(connection);
    }

ResultSet 结果集

        ... //获取connection的五种方法
        //得到statement
        Statement statement = connection.createStatement();
        //sql指令
        String sql = "select * from t01";
        //获取resultSet
        ResultSet resultSet = statement.executeQuery(sql);
        //使用while取出数据
        while(resultSet.next()) { //让光标向后移动,如果没有更多行,则返回false
            String name = resultSet.getString(1); //获取该行第一列
            int age  = resultSet.getInt(2); //获取该行第二列
            System.out.println(name + "\t" + age);
        }

        //关闭连接
        connection.close();
        statement.close();
        resultSet.close();

Statement

SQL注入 

输入用户名为 1' OR

输入密码为 OR '1' = '1

SELECT * 
    FROM admin
    WHERE NAME = '1' OR ' AND pwd = ' OR '1' = '1'

最终机器会执行为 : WHERE NAME = '1' OR ' AND pwd = ' OR '1' = '1'  也即中间有两个OR

但是 '1' = '1' 是绝对正确的,因此会恶意攻击数据库

PreparedStatement

    public static void main(String[] args) throws Exception{

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入管理员的名字:");
        String admin_name = scanner.nextLine(); //next遇到空格会结束
        System.out.println("请输入管理员的密码:");
        String admin_pwd = scanner.nextLine();
        ...//获取connection

        //得到PreparedStatement
        //1. 组织SQL,?相当于占位符
        String sql = "select name,pwd from admin where name =? and pwd =?";
        //2. 获取对象 
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //3. 给?赋值
        preparedStatement.setString(1,admin_name);//第一个问号
        preparedStatement.setString(2,admin_pwd);
        //4. 执行select语句使用 executeQuery dml语句用 executeUpdate
        ResultSet resultSet = preparedStatement.executeQuery(sql);
        ...//while循环查看
}

dml语句: 

JDBC API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值