当前位置: 首页 > article >正文

JDBC API详解一

DriverManager

驱动管理类,作用:1,注册驱动;2,获取数据库连接

1,注册驱动

Class.forName("com.mysql.cj.jdbc.Driver");

查看Driver类源码

	static{
	        try{
	                DriverManager.registerDriver(newDriver());
	        }catch(SQLExceptionvar1){
	                thrownewRuntimeException("Can'tregisterdriver!");
	        }
	}

提示:mysql5之后的驱动包,可以省略注册驱动步骤; 自动加载jar包中

2,获取数据库连接

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

URL连接时,如果不设置SSL会报warnings,可以显示设置SSL=false;

Connection

1,  获取执行SQL的对象

普通执行SQL对象

Statement createStatement()

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

PreparedStatement prepareStatement(sql)

执行存储过程的对象--不常用

CallableStatement prepareCall(sql)

2, 管理事务

MySQL管理事务

  • 开启事务: BEGIN;/ START TRANSACTION;
  • 提交事务:COMMIT;
  • 回滚事务:ROLLBACK;
  • MySQL默认自动提交事务

JDBC管理事务:Connection接口中定义了3个方法

  • 开启事务: setAutoCommit(boolean autoCommit); true为自动提交;false为手动提交,即开启
  • 提交事务:commit()
  • 回滚事务: rollback();

Statement

执行SQL,分为executeUpdate()和executeQuery()方法

executeUpdate(sql) 

用于DDL和DML:如INSERT/UPDATE/DELETE,CREATE/DROP/TRUNCATE ,执行后返回int,表示受影响的行,执行DDL返回0

 executeQuery(sql) 

执行DQL语句(select),返回值:ResultSet结果集对象;

ResultSet

获取查询结果集

1,boolean next(): 

作用:a,将光标移动到下一行;b,判断当前行是否有效;

返回值:true 有效,当前行有数据; false:无效,当前行没数据

2, 获取数据getXxx();

xxx表数据类型getInt(参数),getString(参数)

参数: int:列编号,从1开始;

 String: 列名 

	while(rs.next()){
	System.out.println(rs.getInt("id")+""+rs.getString("name")+""+rs.getFloat("age"));
	}

案例 

 案例代码

Account实体类

packagecom.content.pojo;

publicclassAccount{
privateintid;
privateStringname;
privatedoublemoney;

publicAccount(){
}

publicAccount(intid,Stringname,doublemoney){
this.id=id;
this.name=name;
this.money=money;
}

publicintgetId(){
returnid;
}

publicvoidsetId(intid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicdoublegetMoney(){
returnmoney;
}

publicvoidsetMoney(doublemoney){
this.money=money;
}
@Override
publicStringtoString(){
return"Account{"+
"id="+id+
",name='"+name+'\''+
",money="+money+
'}';
}
}

代码主类 

packagecom.content.jdbc;

importcom.content.pojo.Account;
importjava.util.ArrayList;
importjava.util.List;
importjava.sql.*;
publicclassJDBCDemo1_ResultSet{
//1,定义实体类Account
//2,查询数据,封装到Account对象中
//3,将Account对象存入ArrayList集合中
publicstaticvoidmain(String[]args)throwsSQLException{
//1.注册驱动
//Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Stringurl="jdbc:mysql://x.x.x.x:xxxx/test01?useSSL=false&serverTimezone=UTC";
Stringusername="test01_rw";
Stringpassword="1234545";

Connectionconn=DriverManager.getConnection(url,username,password);

//3.定义sql
StringsqlQuery="selectid,name,moneyfromaccount";
//4.获取执行sql的对象
Statementstmt=conn.createStatement();
//5.执行sql
ResultSetrs=stmt.executeQuery(sqlQuery);
List<Account>list=newArrayList<>();
//6.处理结果
while(rs.next()){
Accountaccount=newAccount();
//获取数据
intid=rs.getInt("id");
Stringname=rs.getString("name");
Doublemoney=rs.getDouble("money");

//封装数据
account.setId(id);
account.setName(name);
account.setMoney(money);
list.add(account);
}
System.out.println(list);
//7.释放资源
rs.close();
stmt.close();
conn.close();
}
}

 运行结果


http://www.kler.cn/a/303297.html

相关文章:

  • UE5 UE4 播放视频没有声音解决
  • STM32 51单片机设计半导体制冷片温控设计
  • Python Plotly 库使用教程
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • react + ts定义接口类型写法
  • Java 责任链模式 减少 if else 实战案例
  • FPGA低功耗设计
  • 【python - 数据】
  • 自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)
  • MATLAB基础应用精讲-【数模应用】卡方拟合优度检验(附MATLAB、python和R语言代码实现)
  • C语言 | Leetcode题解之第403题青蛙过河
  • 【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
  • 即时零售,电商平台们的「新战场」?
  • Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中
  • 单页面应用和vite的基本使用(props,class,style)
  • 基于YOLO深度学习和百度AI接口的手势识别与控制项目
  • Claude Prompt 汉语新解
  • 与 D3.js 的对比:ECharts 在前端可视化中的优势与劣势
  • Xcode 16 RC (16A242) 发布下载,正式版下周公布
  • 【网易低代码】第3课,页面表格删除功能
  • 828华为云征文|部署多媒体流媒体平台 Plex
  • 如何选择合适的数据报表工具?
  • JS面试真题 part5
  • 【HTML】元素的分类(块元素、行内元素、行内块元素)
  • 探索数据可视化的奥秘:Seaborn库的魔力
  • appium server gui详细按照步骤