JAVA (Jdbc) day 8.2

一.JDBC快速入门

1.1 准备数据

create table tab_user(
 id int primary key auto_increment,
 username varchar(20),
 password varchar(20),
 nickname varchar(20)
);
INSERT INTO tab_user
VALUES(null,'zhangsan','123456','张三');
INSERT INTO tab_user VALUES(null,'lisi','123456','李 四');
INSERT INTO tab_user
VALUES(null,'wangwu','123456','王五');
INSERT INTO tab_user
VALUES(null,'zhaoliu','123456','赵六');

1.2 代码实现

 JDBC开发步骤 ,固定步骤 6个 (模版)
* 1.注册驱动   
* 2.获得连接对象
* 3.获得执行sql语句的对象
* 4.执行SQL语句,获取结果集对象
* 5.处理结果集 (打印控制台)
* 6.释放资源
package Jdbc;


import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Mysql {
    public static void main(String[] args) throws Exception {
        //注册驱动
        DriverManager.registerDriver(new Driver());
        //注册驱动 反射基础
        //Class.forName("import com.mysql.cj.jdbc.Driver;");

        //获取连接对象
        String url = "jdbc:mysql://localhost:3306/day_0801?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        //获取执行SQL语句的对象
        Statement stat = conn.createStatement();

        //执行SQL语句,获取对象结果集(insert) 增加数据
        String sql = "insert into tab_user values(null,'tianqi','123456','田七')";
        int i = stat.executeUpdate(sql);
        //处理结果集
        if (i>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
       
        stat.close();
        conn.close();


    }
}

二.JDBC API详解

3.1 DriverManager

DriverManager.registerDriver(new
com.mysql.cj.jdbc.Driver());
不建议使用,原因有2个:
 导致驱动被注册2次
 强烈依赖数据库的驱动jar
解决办法:
 Class.forName("com.mysql.cj.jdbc.Driver");

3.2 Connection

接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象
的。
在建立连接时,需要指定数据库 URL 、用户名、密码。
Connection 接口还负责管理事务
获取执行 SQL 的对象
普通执行SQL对象,Statement createStatement()
预编译SQL的执行SQL对象,PreparedStatement prepareStatement(sql)

3.3 Statement

接口的实现在数据库驱动中。 Statement 接口用于执行 SQL 语句并
与数据库进行交互。通过 Statement 对象,可以向数据库发送 SQL
语句并获取执行结果。
int executeUpdate():执行insert update delete语句
ResultSet executeQuery():执行select语句

3.4 PreparedStatement

PreparedStatement Statement 接口的子接口,用于执行预编译
SQL 查询
预编译 SQL 语句:在创建 PreparedStatement 时,就会预编译
SQL 语句,也就是 SQL 语句已经固定。
防止 SQL 注入:将数据作为参数传递到 SQL 语句中,采用 ? 占位符
的方式,有效防止传入关键字或值导致 SQL 注入问题。让参数就
是参数 性能提升: PreparedStatement 是预编译 SQL 语句,同一 SQL
句多次执行的情况下,可以复用,不必每次重新编译和解析。
package Jdbc;


import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Mysql {
    public static void main(String[] args) throws Exception {
        //注册驱动
        DriverManager.registerDriver(new Driver());
        //注册驱动 反射基础
        //Class.forName("import com.mysql.cj.jdbc.Driver;");

        //获取连接对象
        String url = "jdbc:mysql://localhost:3306/day_0801?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        //获取执行SQL语句的对象
        Statement stat = conn.createStatement();
 
        //执行SQL语句,获取对象结果集(insert) 查询数据
        String name = "zhangsan";
        String pwd = "123456";
        String sql = "select * from tab_user where username='"+name+"'and password='"+pwd+"'";
        ResultSet resultSet = stat.executeQuery(sql);
        if (resultSet.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }

        stat.close();
        conn.close();


    }
}
通过 connection 对象创建
connection.prepareStatement(String sql) ;创建
prepareStatement对象
sql表示预编译的sql语句,如果sql语句有参数通过?来占位
SELECT * FROM user WHERE username = ? AND password =
?
设置参数
prepareStatement.set类型(int i,Object obj);
参数1:i 指的就是问号的索引(指第几个问号,从1开始)
参数2: 就是值 eg:setString(1,"zs");  
setString(2,"123456");
sql 表示预编译的 sql 语句 , 如果 sql 语句有参数通过 ? 来占位
package Jdbc;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class prepareStatementTest {
    public static void main(String[] args) throws Exception {
        //注册驱动
        DriverManager.registerDriver(new Driver());

        //2.获得连接对象
        String url = "jdbc:mysql://localhost:3306/day_0801?useUnicode=true&characterEncoding=utf8";
        String username= "root";
        String password= "123456";
        Connection conn = DriverManager.getConnection(url, username, password);

        //3.获得执行sql语句的对象
        String sql = "select * from tab_user where username=? and password=?";

        PreparedStatement prep = conn.prepareStatement(sql);
        //4.执行SQL语句,获取结果集对象 (select)
        String name = "zhangsan";
        String pwd = "123456";

        prep.setString(1,name);
        prep.setString(2,pwd);
        //方法返回int类型的数据,表示操作成功的行数
        ResultSet resultSet = prep.executeQuery();
        //5.处理结果集 (打印控制台)
        if (resultSet.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }
        //6.释放资源
        resultSet.close();
        prep.close();
        conn.close();
    }
}

3.5 ResultSet

封装了 SQL 查询语句的结果。
boolean next():调用next方法, ResultSet内部指针会移动到下一
行数据
rs.getString(“username”); 通过列名获取该列的值。
rs.getString(2);通过username列所在的第二个位置获取该列的
值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值