JDBC连接数据库

通过JDBC连接

1.简介

JDBC是一套执行SQL语句的标准Java API编程接口,应用程序可调用API接口连接数据库,并使用SQL语句对数据库进行操作。

应用程序与数据库连接的关系如下:
在这里插入图片描述

2.文件准备

连接不同种类的数据库时,JDBC需要联系不同的数据库驱动。
a.下载不同驱动JAR包:
MySQL数据库所需的MySQL驱动jar包:https://dev.mysql.com/downloads/

Oracle数据库所需的Oracle驱动jar包:https://www.mysql.com/
b.导入数据库驱动:
在这里插入图片描述
在这里插入图片描述

3.常用API

(1)Driver接口:
必须实现的JDBC驱动接口,可加载驱动jar包
(2)DriverManager类:
其方法registerDriver()可用于加载JDBC驱动
(3)Connection接口:
是Java程序和数据库的连接,可访问并操作数据库
(4)Statement接口:
用于执行静态SQL语句,并会返回一个结果对象。

String sql="select * from user where id=3";

(5)PreparedStatement接口
是Statement的子接口,用于执行预编译的SQL语句,并会返回一个结果对象。

String sql="select * from user where id=?";

(6)ResultSet接口
保存执行SQL语句返回的结果集。

4.代码实现

(1)搭建数据库环境-创建数据库表

create table stu2(
id int primary key auto_increment,//可不予赋值且自动增长
name varchar(20) not null ,
age int not null);

(2)编写JDBC程序-连接数据库

            Class.forName("com.mysql.cj.jdbc.Driver");
            //通过字符串的形式传入驱动程序并加载注册
            String url="jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8";
            String user="root";
            String password="12345";
            con=DriverManager.getConnection(url, user, password);//获取连接
            System.out.println("连接成功!");

(3)实现对数据库的操作程序-增删改查
executeQuery()用于执行查询语句,返回ResultSet对象
executUpdate()用于执行增删改语句,返回int行数对象

import java.sql.*;

public class JDBC {
    static ResultSet rs=null; static Statement stmt=null;
    static PreparedStatement pstmt=null;
    static Connection con;

    public static void ShowAllDate() throws Exception {//创建一个显示数据方法
        stmt = con.createStatement();//创建执行静态SQL语句的statement接口对象
        rs = stmt.executeQuery("select * from stu2");//实现执行静态SQL语句,并返回查询的结果对象
            while (rs.next()) {
                String name = rs.getString("name");//用ResultSet对象装执行查询的结果
                int age = rs.getInt("age");
                String password = rs.getString("password");
                System.out.println("学生姓名:"+name +"年龄:"+age+"密码:"+password);
		    	}}
    public static void add(String name, int age, String password) throws Exception {
        String sql= "insert into stu2(name,age,password) values(?,?,?)";//创建动态SQL插入语句
        pstmt= con.prepareStatement(sql);//预编译方法执行动态SQL语句
        pstmt.setString(1,"name");//将参数设置为第一个占位符?
        pstmt.setInt(2,age);//将参数设置为第二个占位符?
        pstmt.setString(3,"password");//将参数设置为第三个占位符?
        pstmt.executeUpdate();//实现执行更新语句,并返回一个int行数的结果对象
    }
    public static void delete(int id)throws Exception{//创建一个删除方法
        String sql= "delete from stu2 where id=?";//创建动态SQL插入语句
        pstmt= con.prepareStatement(sql);//预编译方法执行动态SQL语句
        pstmt.setInt(1,id);//将参数设置为第一个占位符?
        pstmt.executeUpdate();//实现执行更新语句,并返回一个int行数的结果对象
    }

    public static void update(int id,int age)throws Exception{
        String sql= "update stu2 set age=? where id=?";//创建动态SQL插入语句
        pstmt= con.prepareStatement(sql);//预编译方法执行动态SQL语句
        pstmt.setInt(1,age);//将参数设置为第一个占位符?
        pstmt.setInt(2,id);//将参数设置为第一个占位符?
        pstmt.executeUpdate();//实现执行更新语句,并返回一个int行数的结果对象
       }
    public static void main(String[] args) throws Exception {
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            //通过字符串的形式传入驱动程序并加载注册
            String url="jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8";
            String user="root";
            String password="12345";
            con=DriverManager.getConnection(url, user, password);//获取连接
            System.out.println("连接成功!");
            System.out.println("添加新同学后结果:");
            JDBC.add("水龙头", 22,"1238");
            JDBC.ShowAllDate();
            System.out.println("删除id为1的同学后结果:");
            JDBC.delete(1);
            JDBC.ShowAllDate();
            System.out.println("将id为2的同学修改年龄为19后结果:");
            JDBC.update(2, 19);
            JDBC.ShowAllDate();
            }catch(Exception e){e.printStackTrace();//在命令行打印异常信息出错的位置及原因。
            }finally{//回收资源
            if (rs!=null){rs.close();
            }else if (pstmt!=null){pstmt.close();
            }else if (stmt!=null){stmt.close();
            }else if (con!=null){con.close();
            }
        }
    }
}

最后,希望能对大家有帮助,小可爱们整理不易,给个小拇指鼓励一下吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值