JDBC基础超详细(一)(连接数据库,实现增删改查四项主要功能)

JDBC基础超详细(二)(PreparedStatement与Statement的区别,避免mysql注入)

源码奉上,大家和我一起操作,印象更加深刻

import java.sql.*;


public class Javatell {
    public static void main(String []args){
        Connection connection=null;
        Statement statement=null;
        ResultSet resultSet=null;
        //注册驱动
        try {
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            //获取链接
            String url="jdbc:mysql://localhost:3306/user";
            String user="root";
            String password="200101";
            connection=DriverManager.getConnection(url,user,password);
            //获取数据库操作对象
            statement=connection.createStatement();
            //定义插入语句
            String insertSql="insert into user_information values (4,'你好','123456')";
            //定义更新语句
            String updateSql="update user_information set user_name='王五' where user_name='李四'";
            //定义删除语句
            String deleteSql="delete from user_information where user_name='张三' ";
            //定义查询语句
            String selectSql="select * from user_information ";
            //首先定义count表示结果展示的行数
            int count=0;
            //专门执行dml语句(insert,delete,update)
            count =  statement.executeUpdate(insertSql);
            //判断结果,如果输出一行,表示该语句影响到了一行,表示成功
            System.out.println(count==1?"插入成功":"插入失败");
            count=statement.executeUpdate(updateSql);
            System.out.println(count==1?"更新成功":"更新失败");
            count=statement.executeUpdate(deleteSql);
            System.out.println(count==1?"删除成功":"删除失败");
            resultSet=statement.executeQuery(selectSql);
            while (resultSet.next()) {
                //不管数据库中是什么类型,都是取出string
                String userId= resultSet.getString("user_id");
                String userName= resultSet.getString("user_name");
                String userPassword= resultSet.getString("user_password");
                System.out.println(userId+userName+userPassword);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            if (resultSet!=null){try{
                resultSet.close();

            }
            catch (SQLException e) {
                e.printStackTrace();}}
            try {
                if (statement!=null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try{
                if (connection!=null){
                    connection.close();
                }
            }catch (SQLException e){
                e.printStackTrace();
            }
        }

    }
}

一、注册驱动(第一步)

驱动

驱动,即我们从官网下载的jar包,如果没有jar包,我们可以编译程序,但是程序无法运行,将官网下载的jar包添加到依赖。如下图:

驱动注册的两种方式

  • 多层注册(为了保证代码的整洁,这里将抛出异常的语句删除,com.mysql.jdbc.Driver()这一条语句是来源于刚刚导入的jar包,并不是idea自带的
Driver driver=new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);
  • 利用反射机制注册(最常用,直接导入Driver这个类
Class.forName("com.mysql.jdbc.Driver");

二、获取链接与获取数据库操作对象(第二、三步)

  • 代码示例
//获取链接
Connection connection=DriverManager.getConnection(url,user,password);
//获取数据库操作对象
Statement  statement=connection.createStatement();
  • url(这里以MySql数据库为例子):url=jdbc:mysql://ip地址:端口/数据库名称
//本地数据库,user为数据库名称
String url="jdbc:mysql://localhost:3306/user";
//数据库的用户为root
String user="root";
//进入数据库的密码,一定要更改成自己的
String password="123456";

三、定义sql语句以及结果判断

定义sql语句(查询单独讲解)

//定义插入语句
String insertSql="insert into user_information values (4,'你好','123456')";
//定义更新语句
String updateSql="update user_information set user_name='王五' where user_name='李四'";
//定义删除语句
String deleteSql="delete from user_information where user_name='张三' ";

结果判断statement.executeUpdate(插入,更新,删除) 

  • 这是我的初始表

  •  判断语句
int count=0;
//专门执行dml语句(insert,delete,update)
count =  statement.executeUpdate(insertSql);
//判断结果,如果输出一行,表示该语句影响到了一行,表示成功
System.out.println(count==1?"插入成功":"插入失败");
count=statement.executeUpdate(updateSql);
System.out.println(count==1?"更新成功":"更新失败");
count=statement.executeUpdate(deleteSql);
System.out.println(count==1?"删除成功":"删除失败");
  • 结果展示

 结果判断statement.executeQuery(查询)

在Java中,有一个ResultSet的数据类型,专门用于存储select的语句的结果,而其还拥有一个

resultSet.next()类似与C语言中指针类型的操作,关系如下图:

 所以我们既然可以定位到每一个行,就可以在行中定位到每一列,最后输出行列中的值

  • 判断语句与输出语句
Statement resultSet=statement.executeQuery(selectSql);
            while (resultSet.next()) {
                //不管数据库中是什么类型,都是取出string,取出相应的列数
                String userId= resultSet.getString("user_id");
                String userName= resultSet.getString("user_name");
                String userPassword= resultSet.getString("user_password");
                //另外一种方式 ,不建议,列数对应一旦改变就无法精准输出
                /*String userId= resultSet.getString(1);
                String userName= resultSet.getString(2);
                String userPassword= resultSet.getString(3);*/
                System.out.println(userId+userName+userPassword);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
  • 结果展示

四、关闭通道(重要)

  • 当我们执行jdbc时,这个时候是多个线程在同时运行,如果我们结束时候没有结束这些线程,他们会一直保存着,这个连接是与数据库服务器的一个连接,虽然你的方法结束了,但是这个资源依然存在数据库连接并没有释放,如果不设置close,长时间使用,你会发现自己的电脑卡的飞起。👻
  • 线程结束的顺序(就像栈那样,先进行链接,在获取对象,最后看结果,而关闭时,先进后出):

打开时:Connection -> PreparedStatement -> ResultSet
关闭时:ResultSet-> PreparedStatement -> Connection

  • 代码演示(要在finally语句中进行,保证结束后不会在进行其他操作)
finally {
            if (resultSet!=null){try{
                resultSet.close();

            }
            catch (SQLException e) {
                e.printStackTrace();}}
            try {
                if (statement!=null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try{
                if (connection!=null){
                    connection.close();
                }
            }catch (SQLException e){
                e.printStackTrace();
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值