JDBC核心API---preparedStatement基本使用步骤和总结

本文详细介绍了在Java中使用JDBC进行数据库操作的基本步骤,包括注册MySQL驱动、获取数据库连接、创建PreparedStatement、设置占位符值、执行SQL语句以及处理结果集。同时,文章提供了插入、更新、删除和查询的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本使用步骤

1.注册驱动

2.获取连接

3.编写SQL语句

4.创建preparedstatement并且传入SQL语句结构

5.占位符赋值

6.发送SQL语句,并且获取结果

7.结果集解析

8关闭资源

使用API总结

1.注册驱动

方案1:调用静态方法,但是会注册两次

 DriverManager.registerDriver(new com.mysql.cij.jdbc. Driver())

方案2:反射触发

Class.forName("com.mysql.cj.jdbc.Driver");

这个方法会注册两次驱动,后面有利用反射的方法注册驱动

2.获取连接

Connection connection =DriverManager.gerConnection();
​
3  (String url, String user , String password)
​
2  (String url, Properties info(user password))
​
1  (String url?user=账号&password=密码)

参数 url :

jdbc:数据库厂商名://IP地址:port/数据库名 (如果是本机数据库且port端口为默认的3306 的话 可以省略为 jdbc:数据库厂商名:///数据库名) 数据库厂商名可以为:mysql或orcale

3.创建statement

静态 :

Statement statement =connection .createStatement();

预编译 :

PreparedStatement preparedstatement = connection.preparedStatement(sql语句结构);

4.占位符赋值

preparedstatement.setObject(?的位置 从左到右 从1 开始,值)

5.发送SQL语句获取结果

int rows =excuteUpdate(); // 非DQL
​
Rusultset = executeQurey();//DQL

6.查询结果集解析

//移动光标指向行数据 next();if(next()) while(next())
//获取列数据即可   get类型(int 列的下角标 从1 开始|int列的label(别名或者列名))
//获取列的信息    getMetadata() ; ResultsetMetaData对象 包含的就是列的信息
                getColumnCount(); | getCloumLebal(index)

7.关闭资源

close();

完整实现代码:

package com.atguigu.api.preparedstatement;
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import org.junit.jupiter.api.Test;
import javax.sql.ConnectionEvent;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PSCURDPart {

//    测试方法需要导入junit的测试包
    @Test
    public void testInert() throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu", "root", "1234");
        //3.编写SQL语句结果,动态值的部分使用?代替
        String sql="insert into t_user(account,password,nickname) values(?,?,?);";
        //4.创建preparedStatement,并且传入SQL语句结果
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        //5.占位符赋值
        preparedStatement.setObject(1,"test");
        preparedStatement.setObject(2,"test");
        preparedStatement.setObject(3,"二狗子");
        //6.发送SQL语句
        int rows = preparedStatement.executeUpdate();
        //7.输出结果
        if(rows >0 ) System.out.println("数据插入成功! ");
        else System.out.println("数据插入失败! ");
        //8.关闭资源
        preparedStatement.close();
        connection.close();
    }


    @Test
    public void testUpdate() throws ClassNotFoundException, SQLException {
        //1.注册驱动
         Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        Connection connection=DriverManager.getConnection("jdbc:mysql:///atguigu","root","1234");
        //3.编写SQL语句结果,动态值的部分使用?代替
        String sql="update t_user set id = ? where  account = ?;";
        //4.创建preparedStatement,并且传入SQL语句结果
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //5.占位符赋值
        preparedStatement.setObject(1,3);
        preparedStatement.setObject(2,"test");
        //6.发送SQL语句
        int rows = preparedStatement.executeUpdate();
        //7.输出结果
        if(rows>0) System.out.println("数据修改成功! ");
        else System.out.println("数据修改失败! ");
        //8.关闭资源
        preparedStatement.close();
        connection.close();
    }

    @Test
    public void testDelete() throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        Connection connection=DriverManager.getConnection("jdbc:mysql:///atguigu","root","1234");
        //3.编写SQL语句结果,动态值的部分使用?代替
        String sql="delete from t_user where id=?;";
        //4.创建preparedStatement,并且传入SQL语句结果
        PreparedStatement preparedStatement= connection.prepareStatement(sql);
        //5.占位符赋值
        preparedStatement.setObject(1,3);
        //6.发送SQL语句
        int i = preparedStatement.executeUpdate();
        //7.输出结果
        if(i>0) System.out.println("数据删除成功! ");
        else System.out.println("数据删除失败! ");
        //8.关闭资源
        preparedStatement.close();
        connection.close();

    }


    @Test
    public void testSelect() throws Exception {

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu", "root", "1234");
        //3.编写SQL语句结果,动态值的部分使用?代替
        String sql = "select id,account,password,nickname from t_user;";
        //4.创建preparedStatement,并且传入SQL语句结果
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //5.占位符赋值
        //6.发送SQL语句
        ResultSet resultSet = preparedStatement.executeQuery();
        //7.输出结果
        List<Map> list = new ArrayList<>();

        //获取当前结果及列的信息对象!
        ResultSetMetaData metaData= resultSet.getMetaData();;

        //有了它以后, 我们可以水平遍历列!
        int columnCount = metaData.getColumnCount();

        while (resultSet.next()) {

//          一行数据对应一个map
            Map map = new HashMap();

            //纯手动取值!!
//            map.put("id", resultSet.getInt("id"));
//            map.put("account", resultSet.getString("account"));
//            map.put("password", resultSet.getString("password"));
//            map.put("nickname", resultSet.getString("nickname"));


            //自动遍历取值
            for(int i=1;i<=columnCount;i++)
            {
                //获取指定下角标的值!
                Object value = resultSet.getObject(i);
                //获取指定下角标的列的名称!
                String columnLabel = metaData.getColumnLabel(i);

                map.put(columnLabel,value);
            }
            list.add(map);
        }
        //8.关闭资源
        System.out.println("list =" + list);
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值