当前位置:网站首页>卷妹带你学jdbc---2天冲刺Day1
卷妹带你学jdbc---2天冲刺Day1
2022-06-24 09:40:00 【京与旧铺】
卷妹带你学jdbc—2天冲刺Day1
博客主页:京与旧铺的博客主页
欢迎关注点赞收藏留言
本文由京与旧铺原创,csdn首发!
系列专栏:java学习
参考网课:动力节点
首发时间:2022年6月17日
你做三四月的事,八九月就会有答案,一起加油吧
如果觉得博主的文章还不错的话,请三连支持一下博主哦
最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
JDBC
1、JDBC是什么?
Java DataBase Connectivity(Java语言连接数据库)
2、JDBC的本质是什么?
JDBC是SUN公司制定的一套接口(interface)
java.sql.*; (这个软件包下有很多接口。)
接口都有调用者和实现者。
面向接口调用、面向接口写实现类,这都属于面向接口编程。
为什么要面向接口编程?
解耦合:降低程序的耦合度,提高程序的扩展力。
多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)
建议:
Animal a = new Cat();
Animal a = new Dog();
// 喂养的方法
public void feed(Animal a){ // 面向父类型编程。
}
不建议:
Dog d = new Dog();
Cat c = new Cat();
思考:为什么SUN制定一套JDBC接口呢?
因为每一个数据库的底层实现原理都不一样。
Oracle数据库有自己的原理。
MySQL数据库也有自己的原理。
MS SqlServer数据库也有自己的原理。
…
每一个数据库产品都有自己独特的实现原理。
JDBC的本质到底是什么?
一套接口。
3、JDBC开发前的准备工作,先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。
classpath=.;D:\course\06-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar
以上的配置是针对于文本编辑器的方式开发,使用IDEA工具的时候,不需要配置以上的环境变量。
IDEA有自己的配置方式。
4、JDBC编程六步(需要背会)
第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭通道。)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句(DQL DML…)
第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)
第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,开启之后一定要关闭。)
/* JDBC编程六步 */
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
public class JDBCTest01{
public static void main(String[] args){
Connection conn = null;
Statement stmt = null;
try{
//1、注册驱动
Driver driver = new com.mysql.jdbc.Driver(); // 多态,父类型引用指向子类型对象。
// Driver driver = new oracle.jdbc.driver.OracleDriver(); // oracle的驱动。
DriverManager.registerDriver(driver);
//2、获取连接
/* url:统一资源定位符(网络中某个资源的绝对路径) https://www.baidu.com/ 这就是URL。 URL包括哪几部分? 协议 IP PORT 资源名 http://182.61.200.7:80/index.html http:// 通信协议 182.61.200.7 服务器IP地址 80 服务器上软件的端口 index.html 是服务器上某个资源名 jdbc:mysql://127.0.0.1:3306/bjpowernode jdbc:mysql:// 协议 127.0.0.1 IP地址 3306 mysql数据库端口号 bjpowernode 具体的数据库实例名。 说明:localhost和127.0.0.1都是本机IP地址。 jdbc:mysql://192.168.151.27:3306/bjpowernode 什么是通信协议,有什么用? 通信协议是通信之前就提前定好的数据传送格式。 数据包具体怎么传数据,格式提前定好的。 oracle的URL: jdbc:oracle:thin:@localhost:1521:orcl */
String url = "jdbc:mysql://192.168.151.9:3306/bjpowernode";
String user = "root";
String password = "981127";
conn = DriverManager.getConnection(url,user,password);
// [email protected]
System.out.println("数据库连接对象 = " + conn);
//3、获取数据库操作对象(Statement专门执行sql语句的)
stmt = conn.createStatement();
//4、执行sql
String sql = "insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
// 专门执行DML语句的(insert delete update)
// 返回值是“影响数据库中的记录条数”
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "保存成功" : "保存失败");
//5、处理查询结果集
}catch(SQLException e){
e.printStackTrace();
}finally{
//6、释放资源
// 为了保证资源一定释放,在finally语句块中关闭资源
// 并且要遵循从小到大依次关闭
// 分别对其try..catch
try{
if(stmt != null){
stmt.close();
}
}catch(SQLException e){
e.printStackTrace();
}
try{
if(conn != null){
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
/* 注册驱动的另一种方式(这种方式常用) */
import java.sql.*;
public class JDBCTest03{
public static void main(String[] args){
try{
//1、注册驱动
// 这是注册驱动的第一种写法。
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// 注册驱动的第二种方式:常用的。
// 为什么这种方式常用?因为参数是一个字符串,字符串可以写到xxx.properties文件中。
// 以下方法不需要接收返回值,因为我们只想用它的类加载动作。
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","333");
// [email protected]
System.out.println(conn);
}catch(SQLException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
//将连接数据库的所有信息配置到配置文件中
/* 实际开发中不建议把连接数据库的信息写死到java程序中。 */
import java.sql.*;
import java.util.*;
public class JDBCTest04{
public static void main(String[] args){
// 使用资源绑定器绑定属性配置文件
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
Connection conn = null;
Statement stmt = null;
try{
//1、注册驱动
Class.forName(driver);
//2、获取连接
conn = DriverManager.getConnection(url,user,password);
//3、获取数据库操作对象
stmt = conn.createStatement();
//4、执行SQL语句
String sql = "update dept set dname = '销售部2', loc = '天津2' where deptno = 20";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "修改成功" : "修改失败");
}catch(Exception e){
e.printStackTrace();
}finally{
//6、释放资源
if(stmt != null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
/* 处理查询结果集(遍历结果集。) */
import java.sql.*;
public class JDBCTest05{
public static void main(String[] args){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","333");
//3、获取数据库操作对象
stmt = conn.createStatement();
//4、执行sql
String sql = "select empno as a,ename,sal from emp";
// int executeUpdate(insert/delete/update)
// ResultSet executeQuery(select)
rs = stmt.executeQuery(sql); // 专门执行DQL语句的方法。
//5、处理查询结果集
/* boolean flag1 = rs.next(); //System.out.println(flag1); // true if(flag1){ // 光标指向的行有数据 // 取数据 // getString()方法的特点是:不管数据库中的数据类型是什么,都以String的形式取出。 String empno = rs.getString(1); // JDBC中所有下标从1开始。不是从0开始。 String ename = rs.getString(2); String sal = rs.getString(3); System.out.println(empno + "," + ename + "," + sal); } flag1 = rs.next(); if(flag1){ // 以下程序的1 2 3 说的第几列。 String empno = rs.getString(1); String ename = rs.getString(2); String sal = rs.getString(3); System.out.println(empno + "," + ename + "," + sal); } */
while(rs.next()){
/* String empno = rs.getString(1); String ename = rs.getString(2); String sal = rs.getString(3); System.out.println(empno + "," + ename + "," + sal); */
/* // 这个不是以列的下标获取,以列的名字获取 //String empno = rs.getString("empno"); String empno = rs.getString("a"); // 重点注意:列名称不是表中的列名称,是查询结果集的列名称。 String ename = rs.getString("ename"); String sal = rs.getString("sal"); System.out.println(empno + "," + ename + "," + sal); */
// 除了可以以String类型取出之外,还可以以特定的类型取出。
/* int empno = rs.getInt(1); String ename = rs.getString(2); double sal = rs.getDouble(3); System.out.println(empno + "," + ename + "," + (sal + 100)); */
int empno = rs.getInt("a");
String ename = rs.getString("ename");
double sal = rs.getDouble("sal");
System.out.println(empno + "," + ename + "," + (sal + 200));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//6、释放资源
if(rs != null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(stmt != null){
try{
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
//6、释放资源
if(rs != null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(stmt != null){
try{
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn != null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
边栏推荐
- Regular matching mobile number
- indexedDB本地存储,首页优化
- 一群骷髅在飞canvas动画js特效
- Which of the top ten securities companies has the lowest Commission and is the safest and most reliable? Do you know anything
- 简单的价格表样式代码
- Use of vim
- Wechat applet learning to achieve list rendering and conditional rendering
- Desktop software development framework reward
- [Eureka source code analysis]
- 观察者模式
猜你喜欢

Basic operations on binary tree

Arbre binaire partie 1

In depth study paper reading target detection (VII) Chinese English Bilingual Edition: yolov4 optimal speed and accuracy of object detection

nVisual数字基础设施运营管理软件平台

二叉树第一部分

oracle池式连接请求超时问题排查步骤

操作符详解

微信小程序學習之 實現列錶渲染和條件渲染.

Cicflowmeter source code analysis and modification to meet requirements

Development of anti fleeing marketing software for health products
随机推荐
微信小程序学习之 实现列表渲染和条件渲染.
引擎国产化适配&重构笔记
英伟达这篇CVPR 2022 Oral火了!2D图像秒变逼真3D物体!虚拟爵士乐队来了!
GIS实战应用案例100篇(十四)-ArcGIS属性连接和使用Excel的问题
Impdp leading schema message ora-31625 exception handling
canvas掉落的小球重力js特效动画
PHP uses recursive and non recursive methods to create multi-level folders
买的长期理财产品,可以转短吗?
一群骷髅在飞canvas动画js特效
canvas 绘制图片
桌面软件开发框架大赏
利用pandas读取SQL Sever数据表
Programming questions (continuously updated)
CVPR 2022 Oral | 英伟达提出自适应token的高效视觉Transformer网络A-ViT,不重要的token可以提前停止计算
413 binary tree Foundation
大中型企业如何构建自己的监控体系
About thinkphp5, use the model save() to update the data prompt method not exist:think\db\query- & gt; Error reporting solution
物联网?快来看 Arduino 上云啦
[db2] sql0805n solution and thinking
SQL-统计连续N天登陆的用户