JDBC的一些基础认识,写的不是特别完善,希望大家看的时候别太介意嘿嘿嘿

JDBC

1,概念和本质

Java DataBase Connectivity Java 数据库链接, Java语言操作数据库

JDBC的本质:是一套操作所有关系型数据库的规则(接口)而JDBC所有的实现类,数据库驱动jar包,都由数据库的厂商自己实现。我们可以用这套接口进行编程,但真正执行的代码是驱动jar包的实现类。

 

## 2,快速入门
  • 步骤

  • 1,导入驱动jar包

    网上搜一下,记得注意版本,不同数据库的版本是不一样的!

     

  • 2,注册驱动

    Class.forName("com.mysql.jdbc.Driver");
  • 3,获取数据库链接对象 Connection

    • DriverManager类的静态方法getConnection获取Connection对象

    Connection connection = DriverManager.getConnection("jdbc:mysql://localgost(这里想主机名):3306(这里是端口号)/zhoupeng(数据库名)","root","root");

     

  • 4,定义sql语句

    String sql="update book set `bauthor`='南派三叔' where `bid`='b1'";
    ​
    这里sql语句后面不要加分号

     

  • 5,获取执行sql语句的对象 Statement

    • Connection对象调用createStatement方法,获取Statement对象

    Statement statement = connection.createStatement();

     

  • 6,执行sql,接受返回结果

    int i = statement.executeUpdate(sql);

     

  • 7,处理结果

    System.out.println(i==1?"操作成功":"操作失败");

     

  • 8,释放资源

    connection.close();
    statement.close();

2,对象详解

1,DriverManager :驱动管理对象

功能

  1. 驱动注册

    static void registerDriver(Driver driver) 
              向 DriverManager 注册给定驱动程序。 
    写代码使用:Class.forName("com.mysql.jdbc.Driver");

    通过查看源码可知,com.mysql.jdbc.Driver 这个类中存在静态代码块如下

    static {
            try {
                DriverManager.registerDriver(new Driver());
            } catch (SQLException var1) {
                throw new RuntimeException("Can't register driver!");
            }
        }

    这里我们就会发现,实际上注册驱动的,是 DriverManager.registerDriver(new Driver()) 这句代码,所以在代码中,实际上进行注册的是 DriverManager 这个类

    所以所谓的注册驱动,事实上是告诉程序,我们在使用哪个数据库

    注意:

    在mysql5之后的版本,这一步实际上是可以省略的!

     

  2. 获取数据库连接

    方法:

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

    参数:

    url:指定连接的路径

     

    语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    例子:jdbc:mysql://localhost:3306/zhoupeng;
    ​
    这里说一下,如果连接的是本地mysql,并且mysql的默认端口号是3306,那么url可以简写为:
    jdbc:msyql:///数据库名;

    user:用户名

    password:密码

2,Connection :数据库连接对象

功能

  1. 获取执行sql对象

    Statement createStatement()
    ​
    PreparedStatement prepareStatement(String sql)
  2. 管理事务

    开始事务

    viod setAutoCommit(boolean autoCommit)   :调用该方法设置参数为false,即开启事务

    提交事务

    viod commit()

    回滚事务

     void rollback() 

     

3,Statement :执行sql对象

执行sql:

 int executeUpdate(String sql) ;
 
 执行DML(增删改)语句,DDL(对表和库的操作)语句
 
 但一般只用于DML语句
 
 这个返回值,表示的是影响行数!我们可以通过影响的行数,判断DML语句有没有执行成功
 ResultSet executeQuery(String sql) 
 
 执行DQL(select)语句

 

4,ResultSet :结果集对象,封装查询结果

方法:

    boolean next()      游标向下移动一行
                        判断当前这一行是否有数据,有数据返回true
                                            没有数据返回false
getXxx(参数):获取数据
    XXX:代表数据类型,,比如:int getInt()   String getString()
    参数:
        1,  int : 代表列的编号,从1开始  如:getString(1)
        2,  String : 代表列的名称, 如: getInt("id")

遍历 ResultSet :

a1是 ResultSet 类型

for (; a1.next() ; ) {
    System.out.println(a1.getString(1)+"----"+a1.getString(2)+"----"+a1.getString(3)+"----"+a1.getString(4));
}

5,PreparedStatement :功能更加强大的执行sql对象

 

 

SQL注入问题:在拼接sql时,有一些特殊的关键字参与字符串的拼接,会造成安全性问题!

如:登录问题,,输入用户名随便,然后密码输入 a' or '1' = '1

此时的sql语句会形成:

select * from user where 账号='随便输入' and 密码 = 'a' or 'a' = 'a';

 

解决sql问题,使用PreparedStatement来解决

PreparedStatement会预编译sql,参数使用?作为占位符

步骤:

 

  • 步骤

  • 1,导入驱动jar包

  • 2,注册驱动

  • 3,获取数据库链接对象 Connection

  • 4,定义sql语句

    • 注意:使用参数?作为占位符,比如

    select * from user where `账号`=? and `密码` = ?;

     

  • 5,获取执行sql语句的对象 PreparedStatement

    • Connection对象调用prepareStatement方法,获取PreparedStatement对象

    PreparedStatement preparedStatement = c.prepareStatement(sql语句);

     

  • 6,给?赋值

    方法:sexXxx(参数1,参数2)

    参数1,是?的位置,从1开始
    参数2,是你要赋的值

     

  • 7,执行sql,接受返回结果

    int i = statement.executeUpdate(sql);

    ResultSet r = statement.executeQuery(sql);

     

  • 8,处理结果

    System.out.println(i==1?"操作成功":"操作失败");

     

  • 9,释放资源

 

 

注:后面基本都用的是PreparedStatement对象

两个好处:1,防止SQL注入

2,效率更高

posted @   牛杂刻师傅  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示