JDBC基础

JDBC(java database connectivity): sun公司为了简化和统一java连接数据库,定义的一套规范(API,接口).
JDBC和驱动的关系
接口(JDBC)与实现(驱动jar包)的关系
Jdbc 规范(大量接口,少量的类)
​ 驱动 实现
在这里插入图片描述

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Test {
    public static void main(String[] args) throws Exception{
        // 	需求:查询所有的用户, 输出到控制台
        // 分析:
        // 1.创建项目,拷贝驱动jar包到模块下,并添加到classpath路径中
        // 2.注册驱动
        //DriverManager.registerDriver(new Driver()); //5版本注册2次
        Class.forName("com.mysql.jdbc.Driver"); 
	
        // 3.获得连接
        String url = "jdbc:mysql://localhost:3306/day20_1";
        String username = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url,username,password);

        // 4.创建执行sql的对象
        Statement statement = connection.createStatement();

        // 5.执行sql语句,处理结果
        String sql = "select * from user";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            // 取出来
            //System.out.print(resultSet.getObject("id")+" ");
            //System.out.print(resultSet.getObject("username")+" ");
            //System.out.print(resultSet.getObject("password")+" ");
            //System.out.println(resultSet.getObject("nickname"));
            System.out.print(resultSet.getObject(1)+"  ");
            System.out.print(resultSet.getObject(2)+"  ");
            System.out.print(resultSet.getObject(3)+"  ");
            System.out.println(resultSet.getObject(4));
            System.out.println("------------------------------------------------");
        }

        // 6.释放资源
        if (resultSet != null){
            resultSet.close();
        }

        if (statement != null){
            statement.close();
        }

        if (connection != null){
            connection.close();
        }
    }
}

DriverManager 类

用于管理一组JDBC驱动程序的基本服务
注意:JDBC 2.0 API中新增的javax.sql.DataSource接口提供了另一种连接数据源的方式。使用DataSource对象是连接到数据源的首选方法。

DriverManager 常用方法

//注册驱动
public static synchronized void registerDriver(java.sql.Driver driver) 

5版本 翻阅源码发现,通过API的方式注册驱动,Driver会new两次,所有推荐这种写法:

Class.forName(“com.mysql.jdbc.Driver”); //当前就理解成 可以让com.mysql.jdbc.Driver里面的静态代码块执行

//与数据库建立连接
public static Connection  getConnection(String url, String user, String password) 

在这里插入图片描述

Connection 接口

与特定数据库的连接(会话)。在连接的上下文中执行SQL语句并返回结果

Connection 常用方法

//创建一个Statement对象,用于向数据库发送SQL语句。
//不带参数的SQL语句通常使用Statement对象执行。如果多次执行同一SQL语句,则
//使用PreparedStatement对象可能更有效
Statement createStatement() throws SQLException

//创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。(防止SQL注入)
PreparedStatement prepareStatement(String sql)
        throws SQLException

//参数是true或false  如果设置为false,
//表示关闭自动提交,相当于开启事务; 类似sql里面的 start transaction;
void setAutoCommit(boolean autoCommit)


//提交事务; 类似sql里面的 commit;
void commit()

//回滚事务; 类似sql里面的 rollback;
void rollback()

接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象

Statement 接口

用于执行静态SQL语句并返回其生成的结果的对象。

Statement 常用方法

//根据查询语句返回结果集。只能执行**select**语句。
ResultSet  executeQuery(String sql)

//根据执行的DML(insert update delete)语句,返回受影响的行数。
int executeUpdate(String sql) 

//此方法可以执行任意sql语句。返回boolean值. 【了解】true:  执行select有查询的结果
​		false:  执行insert, delete,update, 执行select没有查询的结果
boolean execute(String sql)  

ResultSet 接口

表示数据库结果集的数据表,通常是通过执行查询数据库的语句生成的。

ResultSet对象维护一个指向当前数据行的游标。最初,游标定位在第一行之前。next() 方法将光标移动到下一行,因为当ResultSet对象中没有更多的行时,它返回false,所以可以在while循环中使用它来遍历结果集。

1Object getObject(int columnIndex) //根据列索引获取 从1开始
  Object getObject(String columnLabel) //根据列名获取

//1、将光标从当前位置向前移动一行
//2、当调用next方法返回false时,游标被定位在最后一行之后。此后,ResultSet//方法(除了next方法)调用都将导致抛出SQLException异常。如果结果集类型是TYPE_FORWARD_ONLY,
//则由供应商指定它们的JDBC驱动程序实现是返回false还是在后续调用next时抛出SQLException。
2boolean next()  

int getInt(int colIndex) //以int形式获取ResultSet结果集当前行指定列号值
int getInt(String colLabel) //以int形式获取ResultSet结果集当前行指定列名值**
float getFloat(int colIndex)  //以float形式获取ResultSet结果集当前行指定列号值
float getFloat(String colLabel) //以float形式获取ResultSet结果集当前行指定列名值**
String getString(int colIndex) //以String 形式获取ResultSet结果集当前行指定列号值
String getString(String colLabel) //以String形式获取ResultSet结果集当前行指定列名值**
Date getDate(int columnIndex);  //以Date 形式获取ResultSet结果集当前行指定列号值
Date getDate(String columnName); //以Date形式获取ResultSet结果集当前行指定列名值**
void close()  //关闭ResultSet 对象

一般根据列名获取

preparedStatement 接口

表示预编译SQL语句的对象,是Statemen 接口的子接口。

SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行该语句

特点:

  • 性能要比Statement高
  • 会把sql语句先编译,格式固定好,
  • sql语句中的参数会发生变化,过滤掉用户输入的关键字(eg: or)

preparedStatement 常用方法

1 通过 Connection 对象创建

Connection 方法:
//创建prepareStatement对象
//sql表示预编译的sql语句,如果sql语句有参数通过?来占位
PreparedStatement prepareStatement(String sql)
SELECT * FROM user WHERE username = ? AND password = ?

2 设置参数

//将指定的参数设置为给定的Java字符串值。当它发送到数据库时,驱动程序将其转换//为SQL VARCHAR或LONGVARCHAR值(取决于参数的大小相对于驱动程序对VARCHAR值的限制)
// parameterIndex 第一个参数是1,第二个是2,
void setString(int parameterIndex, String x)

//参数1 i 指的就是问号的索引(指第几个问号,从1开始),参数2就是值 
void set类型(int i,Object obj);

eg: prepareStatement.setString(1,“zs”);
prepareStatement.setString(2,“123456”);

3 执行

//在这个PreparedStatement对象中执行SQL查询,并返回由查询生成的ResultSet对象
ResultSet executeQuery()

//执行这个PreparedStatement对象中的SQL语句,该语句必须是SQL数据操作语言
//(DML)语句,例如INSERT、UPDATE或DELETE;或者不返回任何内容的SQL语句,例如DDL语句
//返回SQL数据操作语言(DML)语句的行数,不返回任何内容的SQL语句为0
int executeUpdate();执行增删改语句

步骤:

  1. 注册驱动
  2. 获得连接
  3. 创建预编译SQL语句对象
  4. 设置参数
  5. 执行sql语句
  6. 释放资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值