首页 > 其他分享 >JDBC学习笔记

JDBC学习笔记

时间:2023-01-20 23:33:29浏览次数:31  
标签:语句 JDBC 数据库 接口 学习 笔记 Statement sql

1.JDBC的基本概念

    1.1  JDBC是什么     

JDBC(Java DataBase Connectivity Java数据库连接),可以理解为是一种用于执行SQL语句的API。

    1.2 JDBC的本质

        其本质是sun公司指定的一套接口(interface)

        面向接口编程---面向接口调用、面向接口写实现类,

        Java.sql.*; (这个软件包下有很多的接口)

     1.3 JDBC接口的产生

       每个数据库都有自己的独特的底层实现原理, 不方便使用,JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

 2.JDBC的使用

      2.1JDBC驱动

             JDBC驱动就是JDBC厂家根据其规范制作的JDBC实现类,通过这些实现类去对数据库进行操作。及对Connection等接口的实现类的jar文件。所以在JDBC开发前,先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。(文本开发)IDEA等工具则不需要,有自己的配置方式。

      2.2JDBC访问数据库具体步骤

             加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

             第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)

             mysql-connector-java5 的是 com.mysql.jdbc.Driver

             mysql-connector-java 6的是 com.mysql.cj.jdbc.Driver

             第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭通道。)

                      Connection conn = DriverManager.getConnection(url, user, password);

             URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL格式: 协议://主机号:端口号/数据库名 ? 参数名:参数值

             例如:jdbc:mysql://localhost:3306/jdbc

             其他参数:useUnicode=true&characterEncoding=utf8(用于指定字符的编码和解码格式)

             第三步:获取数据库操作对象(专门执行sql语句的对象)

//Statement

String id = "*";

String sql = "delete from table where id=" + id;

Statement st = conn.createStatement();

st.executeQuery(sql);

 

   存在sql注入的危险(将输入的参数修改拼接成可执行的sql语句从而传给数据库服务器以进行操作)

   例如用户传入的id为 5 'or' 1'='1 那么将删除表中的所有记录

   PreparedStatement 有效的防止sql注入(SQL语句在程序运行前已经进行了预编译,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1' ,数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令)

//PreparedStatement
String sql = “insert into user (name,pwd) values(?,?)”;

PreparedStatement ps = conn.preparedStatement(sql);

ps.setString(1, “col_value”); //占位符顺序从1开始

ps.setString(2, “123456”); //也可以使用setObject

ps.executeQuery();

 

             第四步:执行SQL语句(DQL DML....)

ResultSet rs = ps.executeQuery();

While(rs.next()){

rs.getString(“col_name”);

rs.getInt(1);

}

 

              第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)

             第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,开启之后一定要关闭。

if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

 

3.接口

    3.1 Driver接口

     Driver接口由数据库厂家提供,程序员可以通过这个接口来加载对应的数据库驱动,通常在第一步进行。

  • 装载MySql驱动:Class.forName("com.mysql.cj.jdbc.Driver");
  • 装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

    3.2 Connection接口 

          Connection与特定的数据库进行连接,建立会话,并在会话执行sql语句并返回结果。

  • 连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "user", "password");
  • 连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
  • 连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

           常用方法:

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit() :在链接上提交事务。
  • rollback() :在此链接上回滚事务。

    3.3 Statement接口

       用于执行静态SQL语句并返回它所生成结果的对象。

两种主要的Statement类:

  • Statement:createStatement创建,用于发送简单的SQL语句
  • PreparedStatement:继承Statement接口,preparedStatement创建,用于发送含有一个或多个参数的SQL语句。

           PreparedStatement与Statement相比各有优点,前者可以防止sql注入,一般使用稍多,但在一些特殊情况(需要sql注入)仍需使用Statement接口

常用Statement方法:

  • execute(String sql):运行语句,返回是否有结果集
  • executeQuery(String sql):运行select语句,返回ResultSet结果集。
  • executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

    3.4ResultSet接口

      ResultSet提供检索不同类型字段的方法,例如:

        getString(int index)、getString(String Name):获得在数据库里是varchar、char等类型的数据对象。

        getObject(int index)、getObject(String Name):获取在数据库里任意类型的数据。

       ResultSet还提供了对结果集进行滚动的方法:

  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

  使用顺序:Driver——>Connection——>Statemrnt——>ResultSet——>Statement——>Connection

 

(ps:以上仅供个人学习使用,并且很多都是看了其他大佬写的的文章,这样稍微按照自己的理解整理了一下思路发出来方便以后复习查看)

 

标签:语句,JDBC,数据库,接口,学习,笔记,Statement,sql
From: https://www.cnblogs.com/qymblogs/p/17062703.html

相关文章

  • 无监督学习之聚类
    点头出品,必属精品!!!嘿嘿嘿( ̄y▽, ̄)╭![image]嗯~~~~,还是先从聚类到底是什么开始吧。一、聚类概述有关聚类的思考数据挖掘导论中提到过:聚类可以看做一种分类,它用类标号......
  • 数据库笔记小结
    ACID是靠什么保证的?原子性由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;一致性由其他三大特性保证,程序代码需要保证业务上的一致性;......
  • 学习笔记——SpringMVC消息转换器概述;使用消息转换器处理请求报文;使用消息转换器处理
    2023-01-20一、SpringMVC消息转换器概述1、HttpMessageConverter<T>消息转换器作用:(1)将java对象与请求报文及响应报文进行相互转化(2)使用HttpMessageConverter<T>将请......
  • [ 5--Token学习 | 青训营笔记]
    这是我参与「第五届青训营」伴学笔记创作活动的第5天Token介绍Token,就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码......
  • stm32笔记[3]-OpenOCD调试
    保命声明:笔者代码能力有限,若行文中有错漏之处欢迎大家指出。openocd介绍[https://openocd.org]OpenOCD,theOpenOn-ChipDebugger(片上调试器).macOS+STM32CubeIDE+......
  • excel的学习8
    工作表及页眉页脚操作工作表的相关操作什么是工作表也就是我们excel页面最下面的sheet相关操作移动sheet:把鼠标放在要移动的sheet,按住鼠标不放然后移动复制sheet:......
  • 【python】pandas库学习笔记
    北京理工大学嵩天Pandas课程学习笔记。部分内容补充自菜鸟教程。Pandas库提供了共性能易用数据类型和分析工具的第三方python库。Pandas库基于Numpy库实现。Pandas......
  • 机器学习(day1)
    1、MachineLearningGrowoutofworkinAINewcapabilityforcomputers2、ExamplesDatabaseminingLargedatabasefromgrowthofautomation/webEg.Webcli......
  • markdown学习
    Markdown学习标题x个#号对应x级标题,#后面要打上空格字体粗体字体两边各加两个*斜体字体两边各加一个*粗斜字体两边各加三个*横线字体两边各加两个波浪号引用......
  • java 多态学习笔记
    因为在想去一个家乡的小国企,每个月五六千块钱或许也不错,所以懈怠了学习。但是论语中有说:取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。如果我想着只是进一个小地......