首页 > 其他分享 >JDBC学习

JDBC学习

时间:2024-05-17 23:20:18浏览次数:16  
标签:语句 JDBC stm SQL 学习 sql 执行 con

简介:

JDBC (Java Database Connectivity   :Java数据库连接)

             概念: 使用Java语言操作关系型数据库的一套API

             作用: 同一套Java代码,操作不同的关系型数据库

JDBC就是一套标准接口

 

 

基础代码:

// 1.创建工程,导入驱动jar包
// 2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 3.获取连接
Connection con=DriverManager.getConnection(url, username, password);
// 4.定义SQL语句
String sql="update ...";
// 5.获取执行SQL对象
Statement stm=con.createStatement();
// 6.执行SQL语句
stm.executeUpdate(sql);

//可以返回一个受影响的行数
int cnt=stm.executeUpdate(sql);
// 7.处理返回结果

//System.out.println(cnt);
// 8.释放资源
stm.close();
con.Close();

 

 

API 详解

1.DriverManager (驱动管理类):

         1.)注册驱动

         2.)获取数据库连接

                getConnection(String url, String user, String pwd)

                 * url : 连接路径

                           语法:jdbc:mysql://ip地址:端口号/数据库名

                           示例:jdbc:mysql://127.0.0.1:3306/db

                           (如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名) 

 

2.Connection (数据库连接对象):

           1.)获取执行SQL的对象

                  * 普通执行SQL对象

                      Statement         createStatement()

                  * 预编译SQL的执行SQL对象:防止SQL注入

                      PreparedStatement        prepareStatement(sql)

                   * 执行存储过程的对象

                      CallableStatement         prepareCall(sql)

           2.)事务管理

                   * Mysql 事务管理  (MySQL默认自动提交事务)

                      开启事务:BEGIN; / START  TRANSACTION;

                      提交事务:COMMIT;

                      回滚事务:ROLLBACK;   

                   * JDBC事务管理  (Connection接口中定义了3个对应的方法)

                          开启事务:setAutoCommit (boolean autoCommit)    :  true为自动提交事务,false为手动提交事务 

                       提交事务:commit()

                       回滚事务:rollback()

try{
    //开启事务
    con.setAutoCommit(false);
    
    int cnt1=stm.executeUpdate(sql1);
    System.out.println(cnt1);
    int cnt2=stm.executeUpdate(sql2);
    Syatem.out.println(cnt2);

    //提交事务
    con.commit();
}catch (Exception throwables) {
    //回滚事务
    con.rollback();
    throwables.printStackTrace();
}

 

3.Statement (执行SQL语句) :

       *  int      executeUpdate (sql) :    执行DML、DDL语句

           返回值:(1)执行DML语句后,返回影响的行数 

                         (2) 执行DDL语句后,执行成功也可能返回0

       *  ResultSet          executeQuery (sql) 

            返回值:  执行DQL语句后,返回ResultSet结果集对象  

 

4.ResultSet (结果集对象) :

         boolean  next()  :  判断当前行是否有效

         xxx   getXxx(参数) :  获取数据

ResultSet rs=stm.executeQuery(sql);

while(rs.next()){
    int id=rs.getInt(1);
    String name=rs.getString(2);
    double money=rs.getDouble(3);

    System.out.println(id);
    System.out.println(name);
    System.out.println(money);
}

 

5.PreparedStatement  (预编译SQL语句并执行,预防SQL注入) :

        关于SQL注入:通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

// 1.获取PreparedStatement对象
String sql="select  *  from  table  where  username=?  and  password=?";
PreparedStatement pst=con.prepareStatement(sql);

// 2.设置参数值
pst.setString(1,"root");
pst.setString(2,"123456");

// 3.执行SQL
executeUpdate();
//或者 executeQuery();
//不需要再传递sql

 

标签:语句,JDBC,stm,SQL,学习,sql,执行,con
From: https://www.cnblogs.com/ztCoding/p/18198875

相关文章

  • MIT 6.S081 学习笔记 -- page tables
    Chapter3Pagetable1.FromUserperspetive,howVAmapstoPA?lab1:printpagetableforpid==1, PR: https://github.com/nipperhou/xv6-riscv/commit/eb8e0008c019cfa0f3687989a90a63a7d45bde6fOutput: ```xv6kernelisbootingtrampoline:0x00000000800070......
  • 数据结构学习笔记-有向图的度
    求有向图的度问题描述:已知有向图G用邻接矩阵存储,设计算法以分别求解顶点vi的入度、出度和度。【算法设计思想】出度的计算(getOutDegree)遍历法:通过遍历邻接矩阵中顶点vi所在行的所有元素来计算vi的出度。对于每个元素matrix[vi][j],如果其值不为0(表示存在从顶点vi到顶点......
  • 深度学习项目-MobileNetV2水果识别模型
    FruitRecognitionDeepLearning深度学习小项目,利用CNN和MobileNetV2搭建的水果识别模型。github地址fruit为本次大作业使用的数据集。geneFruit为数据增强后的数据集。FruitRecognition为本次大作业相关代码及相关曲线热力图。项目使用conda环境进行训练,相关测试版本如下:......
  • 动画里喜欢的音乐制作学习
    末日三问音乐:加藤達也KatouTatsuya【加藤达也:负责了少歌、末日三问、境界线上的地平线2、Free的配乐】青い記憶(あおいきおき)艺术家:田所あずさ/TRUE(唐沢美帆)/山田タマル作曲:加藤達也/Q-MHz/南田健吾/h-wonder/山田タマル作词:Q-MHz/唐沢美帆(TRU......
  • Day01学习随笔
    Day01学习随笔记录我的学习之旅常用的Dos命令盘符切换直接输入希望进入的盘符+:。(用英文版":")查看当前目录下所有文件 dir切换目录 cd(不能跳转到另一个盘符内的文件夹,只有先跳转到相应的盘符,才能进入对应的目录)返回上级目录 cd..清理屏幕......
  • Springcloud学习笔记67--springboot 整合 任务调度框架Quartz
    1.背景定时任务Job的作业类中无法注入Service等由Spring容器所管理的Bean。例如下面这种情况,TaskCronJobService就无法成功注入。importjava.util.Iterator;importjavax.annotation.Resource;importorg.quartz.Job;importorg.quartz.JobExecutionContext;importor......
  • 设计模式学习(二)工厂模式——工厂方法模式
    目录前言工厂方法模式简介示例优点缺点使用场景前言前一篇文章介绍了简单工厂模式,提到了简单工厂模式的缺点(违反开闭原则,扩展困难),本文要介绍的工厂方法模式在一定程度上弥补了简单工厂模式的缺点。工厂方法模式简介工厂方法模式是创建型设计模式之一,它在抽象工厂类中声明创建......
  • Springcloud学习笔记66---@Autowired注入为null的几种情况
    1.在应用的Filter或Listener中使用了@Autowired原因:因为Filter和Listener加载顺序优先于spring容器初始化实例,所以使用@Autowired肯定为null了~~解决:用ApplicationContext根据bean名称(注意名称为实现类而不是接口)去获取bean,随便写个工具类即可2.你写的代码有问题,没加@Service、......
  • 运维必备Linux学习day3(面试常问的linux指令)
    一.问题:列举Linux高级命令,至少6个(百度)netstat//网络状态监控 top//系统运行状态 lsblk //查看硬盘分区findps-aux//查看运行进程chkconfig//查看服务启动状态systemctl//管理系统服务器二.问题:Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?(......
  • 在langchain中的rag学习使用之旅-从半知半解到实现效果
    rag我简单理解来看就是我先有一段文本,先把它转成向量,保存到向量数据库中,下次我调用llm时将向量数据库中查询的结果给llm作参考并回答。对rag了解不多,所以开启学习之旅,学完了要应用到实际的需求中,因为最近手里有一个订单就是需要用到这个技术,但是又一知半解。现在新知识太多了,学......