JDBC连接数据库流程

本次用到的数据库名是自建的my_sql

数据库语句:

--创建数据库my_sql
create database my_sql;
--选中数据库
use my_sql;
--创建users表 三个字段
drop table if exists users;
create table users(
id int,
name varchar(20),
password varchar(20)
); 
--插入一条数据
insert into users(id, name, password) values(1,'bit','123'); 

一、基础用法 

import java.sql.*;
//JDBC开发案例
//数据库(cmd中):my_sql

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1、加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2、获取连接
        String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
        String username="root";//数据库名称
        String password="11111";//数据库密码
        Connection connection=
                DriverManager.getConnection(url,username,password);
        //3、执行SQL语句
        String sql="select * from users";//写一条SQL语句

        Statement statement=connection.createStatement();
        //结果集
        ResultSet resultSet =statement.executeQuery(sql); //关于查询的用executeQuery

        if(resultSet.next()){//resultSet指向查询到的结果集的上方,判断下一个为空吗
            System.out.println(resultSet.getInt(1));//第一列是int型
            System.out.println(resultSet.getString(2));//第二列是string型
            System.out.println(resultSet.getString(3));//列的下标是从1开始的
        }//多条语句用while
    }
}

运行结果:(与上面数据库查询的对应)

二、改造进化。

将user封装成类

1.封装的类

public class User {
    private int id;
    private  String name;
    private  String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

}

2.对结果集部分进行改造(只对结果集 改造,其他没变)

import java.sql.*;
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1、加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2、获取连接
        String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
        String username="root";//数据库名称
        String password="11111";//数据库密码
        Connection connection=
                DriverManager.getConnection(url,username,password);
        //3、执行SQL语句
        String sql="select * from users";//写一条SQL语句

        Statement statement=connection.createStatement();

        //结果集
        ResultSet resultSet =statement.executeQuery(sql); //关于查询的用executeQuery

        User user =new User();
        if(resultSet.next()){//resultSet指向查询到的结果集的上方,判断下一个为空吗

            user.setId(resultSet.getInt(1));
            user.setName(resultSet.getString(2));
            user.setPassword(resultSet.getString(3));
        }//多条语句用while
        System.out.println("查询到的数据为:"+user);
    }
}

输出结果:

改造后的 where 查询示例:

输出结果:

sql注入:

出现在当你的SQL语句是字符串的情况下(如上)。

三、示例

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        String url="jdbc:mysql://127.0.0.1:3306/my_sql?useSSL=true";
        String username="root";//数据库名称
        String password="11111";//数据库密码

        DataSource dataSource=new MysqlDataSource();//获取数据源(之前的加载驱动不要了)
        ((MysqlDataSource)dataSource).setUrl(url);
        ((MysqlDataSource)dataSource).setUser(username);
        ((MysqlDataSource)dataSource).setPassword(password);

        //MysqlDataSource mysqlDataSource=new MysqlDataSource();//也可以是这样
        Connection connection=dataSource.getConnection();

        //3、执行SQL语句
        String uname = "admin";
        String upass = "123";
        String sql = "select * from user where name = ? and password = ?";//占位符
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        //通过这两句将占位符赋值
        preparedStatement.setString(1,uname);
        preparedStatement.setString(2,upass);
        
        //System.out.println("sql:" + preparedStatement.toString());
        //结果集
        ResultSet resultSet = preparedStatement.executeQuery();

        User user =new User();
        if(resultSet.next()){
            user.setId(resultSet.getInt(1));
            user.setName(resultSet.getString(2));
            user.setPassword(resultSet.getString(3));
        }
        System.out.println("查询到的数据为:"+user);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值