首页 > 其他分享 >JDBC详细使用

JDBC详细使用

时间:2024-08-09 21:24:34浏览次数:8  
标签:JDBC String Statement 使用 Connection 详细 sql close password

JDBC

​ JDBC是一种标准,一种规则,主要作用是使用java语言操作数据库的
​ JDBC这个标准中有很多的接口,接口中有很多方法

JDBC开发步骤以及详解

1.准备

1.导入jar包
mysql-connector-java-8.0.25.jar
2.四大核心对象
DriverManager类: 注册驱动 -> 我们需要知道我们操作的是哪款数据库
Connection接口:连接数据库用的
Statement接口:执行sql语句用的
ResultSet接口:结果集接口 -> 主要用于处理查询操作的

2.详细步骤

1.注册驱动:DriverManager类

2.获取连接:DriverManager类中的静态方法 -> 返回的是Connection

static Connection getConnection(String url, String user, String password)

url:数据库的地址
user:数据库用户名
password:数据库用户密码

3.准备sql语句:写sql

4.获取执行平台:Connection中的方法 -> 返回的是Statement对象 -> 主要用于执行sql语句

Statement createStatement();

5.执行sql:Statement中的方法

int executeUpdate(String sql) //针对于增删改  ResultSet executeQuery(String sql) //针对于查询

6.处理结果集:ResultSet接口中的方法:

boolean next()  //判断有没有下一个元素  
getxxx()        //获取元素   

7.关闭资源:
close方法
结果集关闭 ResultSet
执行平台关闭 Statement
连接关闭 Connection

3.具体例子

使用数据表

以下四个代码分别是增删改查的例子

public void insert() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接,连接数据库
        String url = "jdbc:mysql://localhost:3306/day01";
        String name = "root";
        String password = "zsy20040820";
        Connection connection = DriverManager.getConnection(url, name, password);
        //3.准备sql语句
        String sql = "INSERT INTO `user`(username,password)VALUES('tom',123)";
        //4.获取执行平台Connection中的方法:
        //            Statement createStatement()
        Statement st = connection.createStatement();
        //5.执行sql:Statement中的方法
        //int executeUpdate(String sql) -> 针对于增删改操作的
        int i = st.executeUpdate(sql);
        System.out.println("i = " + i);
        //6.由于增删改不需要处理结果集,所以直接关闭资源
        st.close();
        connection.close();

    }
public void delete()throws Exception{
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接,连接数据库
        String url = "jdbc:mysql://localhost:3306/day01";
        String name = "root";
        String password = "zsy20040820";
        Connection connection = DriverManager.getConnection(url, name, password);
        //3.准备sql语句
        String sql = "DELETE FROM `user` WHERE uid = 2";
        //4.获取执行平台Connection中的方法:
        //            Statement createStatement()
        Statement st = connection.createStatement();
        //5.执行sql:Statement中的方法
        //int executeUpdate(String sql) -> 针对于增删改操作的
        int i = st.executeUpdate(sql);
        System.out.println("i = " + i);
        //6.由于增删改不需要处理结果集,所以直接关闭资源
        st.close();
        connection.close();
    }
public void update()throws Exception{
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.连接数据库
        String url = "jdbc:mysql://localhost:3306/day01";
        String name = "root";
        String password = "zsy20040820";
        Connection connection = DriverManager.getConnection(url, name, password);
        //3.准备sql语句
        String sql = "UPDATE`user` SET username = '刘涛' WHERE uid = 3";
        //4.获取执行平台
        Statement st = connection.createStatement();
        //5.执行
        int i = st.executeUpdate(sql);
        System.out.println("i = " + i);
        //6.由于增删改不需要处理结果集,所以直接关闭资源
        st.close();
        connection.close();
    }
public void select()throws Exception{
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.连接数据库
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/day01", "root", "zsy20040820");
        //3.准备sql语句
        String sql = "SELECT * FROM `user`";
        //4.获取执行平台
        Statement st = connection.createStatement();
        //5.执行
        ResultSet rs = st.executeQuery(sql);
        //6.处理结果集
        while (rs.next()){
            //String getString(String columnLabel)  -> 获取指定列名的数据
            //int getInt(String columnLabel) -> 获取指定列名的数据
            //String getString(int columnIndex)  -> 获取第几列的数据
            //int getInt(int columnIndex)  -> 获取第几列的数据
            int uid = rs.getInt("uid");
            System.out.println("uid = " + uid);
            String username = rs.getString(2);
            System.out.println("username = " + username);
            int password = rs.getInt("password");
            System.out.println("password = " + password);
        }
        //7.关闭资源
        rs.close();
        st.close();
        connection.close();

    }

由于重复性代码太多于是可以抽取工具类进行代码改进(这里用到了结合properties文件实现)

public class JDBCUtils {
    private static String url = null;
    private static String name = null;
    private static String password = null;

    static {
        try {
            Properties properties = new Properties();
            InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.propertites");
            properties.load(in);
            Class.forName(properties.getProperty("driverclass"));
            url = properties.getProperty("url");
            name = properties.getProperty("name");
            password = properties.getProperty("password");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, name, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static void close(Connection conn, ResultSet rs, Statement st) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

4.使用PreparedStatement预处理对象

概述:PreparedStatement extends Statement

获取:Connection中的方法

PreparedStatement prepareStatement(String sql)

方法:

void setObject(int parameterIndex, Object x)//为?赋值
parameterIndex:指定第几个?
x:为?赋的值
int executeUpdate() //针对增删改操作的
ResultSet executeQuery()  //针对于查询

具体使用场景:

public class Demo05PreparedStatement {
    public static void main(String[] args) throws SQLException {
        //1.创建scannner对象,键入用户和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        //2.连接数据库
        Connection conn = JDBCUtils.getConn();
        //3.准备sql
        String sql = "select * from user where username = ? and password = ?";
        //4.获取执行平台
        PreparedStatement pst = conn.prepareStatement(sql);
        //5.为?赋值
        pst.setObject(1,username);
        pst.setObject(2,password);
        //6.执行
        ResultSet rs = pst.executeQuery();
        //7.直接判断结果集中有没有数据
        if(rs.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登陆失败");
        }

    }
}

5.PreparedStatement实现批量添加

public class Demo07Batch {
    public static void main(String[] args)throws Exception {
        //1.获取连接
        Connection conn = JDBCUtils.getConn();
        //2.准备sql
        String sql = "insert into `user`(username,password) values (?,?)";
        //3.获取执行平台
        PreparedStatement pst = conn.prepareStatement(sql);
        //4.为?赋值
        //5.执行
        for (int i = 0; i < 10; i++) {
            pst.setObject(1,"张三");
            pst.setObject(2,"0000"+i);
            //将多条语句写入内存中
            pst.addBatch();
        }
        //将多条语句一起打包发送给mysql批量执行
        pst.executeBatch();
        //6.关流
        JDBCUtils.close(conn,null,pst);
    }
}

1.在设置完所有要添加的参数,调用PreparedStatement中的addBatch(),将SQL语句添加到PreparedStatement中

2.调用PreparedStatement中的executeBatch()方法批处理sql语句

6.改造JDBC工具类_结合Properties文件

driverclass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/day01
name=root
password=root
static {
    try {
        Properties properties = new Properties();
        InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.propertites");//自动扫描resource下的文件(可以简单理解为扫描out路径下的配置文件) 
        properties.load(in);//将流中的数据加载到集合中
        Class.forName(properties.getProperty("driverclass"));//获取Class对象
        url = properties.getProperty("url");
        name = properties.getProperty("name");
        password = properties.getProperty("password");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

以上代码是利用了类加载器

ClassLoader classLoader = 当前类.class.getClassLoader()
InputStream in = classLoader.getResourceAsStream("文件名称");

标签:JDBC,String,Statement,使用,Connection,详细,sql,close,password
From: https://blog.csdn.net/m0_73627305/article/details/141071093

相关文章

  • 高德地图 JS API2.0(入门级使用教程)
    高德地图JSAPI2.0入门使用教程准备工作注册高德地图开发者账号进入高德开放平台首页使用手机号注册,然后完成身份认证。创建应用[应用管理]-->[创建新的应用]–>[填写应用名称以及应用类型]-->[添加],然后获取到安全密钥和key即可。过程如下图:阅读参考文档......
  • Scanner类、String类和StringBuffer类的相关使用
     一、Scanner:主要用于键盘录入的  构造方法:    Scanner(InputStreamsource)构造一个新的Scanner,产生从指定输入流扫描的值。 1、next()和nextLine()区别: Stringline=sc.next();//不会接收特殊字符,比如空格回车这样的符号 Stringline=sc.nex......
  • 使用Python+moviepy做音频的淡入淡出效果
    一、音频的淡入效果frommoviepy.editorimport*au=AudioFileclip("/home/Download/test.mp3")au=au.fx(afx.audiofadein,duration=1)#一秒钟的淡入效果au.write_audiofile("/home/Download/fade.mp3")二、音频的淡出效果frommoviepy.editorimport*au=Audio......
  • 【kali系列】Metasploit Framework (MSF) 从基础到进阶使用指南
    引言一、MetasploitFramework介绍1.1MSF概述1.2MSF主要组件二、MetasploitFramework基础安装与配置2.1KaliLinux中的MSF2.2非KaliLinux环境下的安装2.3更新与升级三、MetasploitFramework基础用法3.1启动MSF控制台......
  • 使用Python操作MySQL的多种方式
    目录MySQL简介安装与配置使用MySQLConnector/Python连接数据库执行SQL语句处理查询结果事务管理使用SQLAlchemy安装SQLAlchemy连接数据库定义模型执行查询事务管理使用DjangoORM安装Django配置数据库定义模型执行查询事务管理总结MySQL简介MySQL是一种开源的关系......
  • openGauss安装和使用
    环境准备:操作系统:CentOS7.8极简版安装关闭防火墙#修改配置vim/etc/selinux/config​SELINUX=disabled​#重启操作系统reboot​​#检查关闭防火墙systemctlstatusfirewalld#关闭防火墙systemctldisablefirewalld.servicesystemctlstopfirewalld.service......
  • Java基础——注解1——注解的定义与使用
    ......
  • 如何在Docker容器中的Linux系统(Ubuntu + Centos Linux)里面使用systemctl
    前言正常情况下Docker容器里面运行的Linux是没有systemd进程的,所以不能正常开启systemctl我们还是希望使用systemd来管理我们的服务,如何开启systemd呢?通常,Docker容器是为了运行单个应用程序而设计的,而不是一个完整的操作系统。因此,通常容器中不需要像systemd这样复杂的初始......
  • 使用HTML一键打包工具模拟其他浏览器 - User-Agent的起源到应用
    最近经常有一些朋友对于HTML一键打包工具中的User-Agent不太理解是什么意思,以及它到底有什么用途, 本篇文章会介绍一下User-Agent的起源,发展历程,以及它的使用场景,帮助你更好的了解和使用它User-Agent的起源与发展历程User-Agent最早出现在1990年代初期,随着NCSAMosaic......
  • MAEKDOWN 使用语法
    标题#使用Mackdown语法的标题可以用#来写Markdown语法HTML预览效果#Headinglevel1<h1>Headinglevel1</h1>#Headinglevel1##Headinglevel2<h2>Headinglevel2</h2>##Headinglevel2###Headinglevel3<h3>Headinglevel3&......