JAVAWEB学习总结,DAY4(JDBC1)

JDBC

概念:Java Data Base Connectivity(Java数据库连接):是java访问数据库的标准规范
作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库)

扩展:项目里创建文件,
lib文件夹作用是存放驱动包文件
bean文件夹作用是存放封装类,封装数据
utils文件夹作用是存放工具类,一般在工具类类名后面加上Utils
文件名.properties文件是存放配置

Ø 首先:导入数据库驱动包
在modules创建一个文件夹:lib
把jar包拷贝粘贴到lib文件夹
在jar包上右键–>Add as Library—[设置在为在当前Module里使用,起一名称],确定

四个核心对象
1.DriverManager:用于注册驱动
2.Connection: 表示与数据库创建的连接
3.Statement: 执行SQL语句的对象
4.ResultSet: 结果集或一张虚拟表

DriverManager 驱动管理器
注册驱动(优化了加载驱动类)
获得连接
Connection 连接对象, 操作都是基于这个连接的
创建执行sql语句对象Statement
Statement 执行SQL语句对象
excuteQuery(String sql) 执行查询
excuteUpdate(String sql) 执行增删改
ResultSet 结果集对象
next() 调用一次, 光标向下移动一行, 返回boolean类型
get类型(String 列名); 根据列名获得数据
使用步骤:(重要)
1.注册驱动
2.获取连接
3.创建预编译SQL语句对象
4.设置参数,执行SQL语句
5.释放资源

1.注册驱动
概述:我们java程序需要通过数据库驱动才能连接到数据库,因此需要注册驱动MySQL的驱动的入口类是:com.mysql.jdbc.Driver

DriverManager 类用于注册驱动,
方法:static void registerDriver(Driver driver);向DriverManager 注册给定驱动程序

使用:DriverManager.registerDriver(驱动对象);传入对应参数即可

注册驱动语句

Class.forName(“com.mysql.jdbc.Driver”); // 后期可以将"com.mysql.jdbc.Driver"字符串写在文
件中.

2.获取连接
DriverManager 类用于连接
方法:static Connection getConnection(String url, String user, String password);连接到给定数据库URL,并返回连接

参数说明:

  1. String url: 连接数据库的URL,用于说明连接数据库的位置

  2. String user:数据库的账号

  3. String password: 数据库的密码

       URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值
       MySQL写法:jdbc:mysql://localhost:3306/day24
       本地服务器 简写:jdbc:mysql:///day24
    

使用:DriverManager.getConnertion(url,user,password); 传入对应参数即可

获取连接语句

          // 连接到MySQL
         // url: 连接数据库的URL
         // user: 数据库的账号
         // password: 数据库的密码
          String url="jdbc:mysql://localhost:3306/day24 ";
          String uesrname="root";
          String password="root";
         Connection conn = DriverManager.getConnection(url,uesrname,password);

3.创建预编译SQL对象 和 4.创建参数,执行SQL语句
获取Statement 对象介绍
在 Connection 接口中 获取 Statement 对象

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

statement 接口

方法:
ResultSet executeQuery(String sql);只能执行MySQL查询(select)语句,返回结果的集合
int executeUpdate(String sql); 执行的DML((添加)INSERT、(更新)UPDATE、(删除DELETE)语句,返回受影响的行数

注意:在MySQL中,只要不是查询就是修改。 executeUpdate:用于执行增删改 executeQuery:用于 执行查询

preparedStatement 是statement 子接口
概述:预编译对象

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

用法:通过connection 对象创建
方法:prepareStatement(String sql); 表示预编译的sql语句,如果sql语句有参数通过?来占位

String sql="select * from user where username=? and password=?";

setxxx(int i, Obj obj);(xxx是类型 int、String、Long) i指的就是问号的索引(指第几个问号,从1开始)

ResultSet 接口
概述:是select语句执行查询的结果集对象,里边封装了查询的所有结果数据。相当于是一张二维表。如果想要获取ResultSet里的数据,就需要对这个对象进行循环遍历:得到其中每一行的每一个字段的数据。

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
• 获取任意类型的数据
• getObject(int index)
• getObject(string columnName)

• 获取指定类型的数据,例如:
• getString(int index)
• getString(String columnName)

l ResultSet还提供了对结果集进行滚动的方法:
• next():移动到下一行
• Previous():移动到前一行
• absolute(int row):移动到指定行 [row从1开始计算]
• beforeFirst():移动resultSet的最前面。
• afterLast() :移动到resultSet的最后面。

创建预编译语句


String sql="select * from user where username=? and password=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设置参数,执行sql语句
prepareStatement.setString(1,root);//给第一个?赋值,给用户名赋值
prepareStatement.setString(2,root);//给第二个?赋值,给密码赋值

ResultSet resultSet=prepareStatement.executeQuery();

User user=null;
while(resultSet.next()){
     user=new User();
     user.setId(resultSet.getInt("id"));
     user.setUsername(resultSet.getString("username"));
     user.setPassword(resultSet.getString("password"));
     user.setNickname(resultSet.getString("nickname"));
}

5.释放资源

释放资源(先创建的后关闭)

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

案例:

package com.lin.jdbcAn;

import com.lin.utils.JdbcUtils;
import com.mysql.jdbc.Driver;

import java.sql.*;

public class JdbcAnLi {
    public static void main(String[] args) throws Exception {
        //调用方法注册驱动,获得连接
        Connection connection = JdbcUtils.getConnection();
        //创建执行SQL语句对象
        Statement statement = connection.createStatement();
        //执行sql语句,处理结果
        String select="select * from student";
        ResultSet resultSet = statement.executeQuery(select);
        while (resultSet.next()){
            System.out.println(resultSet.getObject("id"));
        }
        //释放资源
        JdbcUtils.release(connection,statement,null);
    }
}
//静态方法类,注册驱动,获得连接、释放资源
package com.lin.utils;

import com.mysql.jdbc.Driver;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
    public static String driver;
    public static String url;
    public static String username;
    public static String password;

    static {
        try {
            //读取db.properties
            InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            //创建properties对象
            Properties properties=new Properties();
            //关联流
            properties.load(is);
            //获得配置文件的内容,根据键找值
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            //注册驱动
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获得连接
    public static Connection getConnection() throws Exception {

        //获得连接
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }
     //释放资源
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        if(resultSet!=null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement!=null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection!=null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值