当前位置:网站首页>卷妹带你学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();
}
}
}
}
}
边栏推荐
- 100 GIS practical application cases (XIV) -arcgis attribute connection and using Excel
- TP5 using post to receive array data times variable type error: solution to array error
- Jcim | AI based protein structure prediction in drug discovery: impacts and challenges
- Graffiti smart brings a variety of heavy smart lighting solutions to the 2022 American International Lighting Exhibition
- Phpstrom code formatting settings
- Detailed explanation of ThinkPHP 5.0 Model Association
- Go language development environment setup +goland configuration under the latest Windows
- LeetCode: 137. Number II that appears only once
- 一群骷髅在飞canvas动画js特效
- 如何管理海量的网络基础设施?
猜你喜欢

Development of anti fleeing marketing software for health products

vim的使用

Latex formula and table recognition

Canvas draw picture

Mise en œuvre du rendu de liste et du rendu conditionnel pour l'apprentissage des applets Wechat.

indexedDB本地存储,首页优化

Programming questions (continuously updated)

Binary tree part I

Basic operations on binary tree

形状变化loader加载jsjs特效代码
随机推荐
Dragging El table sortablejs
Oracle database expdp only exports tables
Why is JSX syntax so popular?
413-二叉树基础
ByteDance Interviewer: talk about the principle of audio and video synchronization. Can audio and video be absolutely synchronized?
SVG+js拖拽滑块圆形进度条
Detailed explanation of PHP singleton mode
机器学习——主成分分析(PCA)
美国电子烟巨头 Juul 遭遇灭顶之灾,所有产品强制下架
el-table表格的拖拽 sortablejs
Detailed explanation of ThinkPHP 5.0 Model Association
Go language development environment setup +goland configuration under the latest Windows
LeetCode: 377. Combined sum IV
[db2] sql0805n solution and thinking
Amendment to VPP implementation policy routing
How do novices choose the grade of investment and financial products?
Five heart matchmaker
一群骷髅在飞canvas动画js特效
Error reading CSV (TSV) file
Symbol.iterator 迭代器