当前位置:网站首页>卷妹带你学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();
}
}
}
}
}
边栏推荐
- SQL Server AVG函数取整问题
- 有关二叉树 的基本操作
- JCIM|药物发现中基于AI的蛋白质结构预测:影响和挑战
- Error reading CSV (TSV) file
- Jcim | AI based protein structure prediction in drug discovery: impacts and challenges
- 读取csv(tsv)文件出错
- 十大证券公司哪个佣金最低,最安全可靠?有知道的吗
- PostgreSQL DBA快速入门-通过源码编译安装
- 411 stack and queue (20. valid parentheses, 1047. delete all adjacent duplicates in the string, 150. inverse Polish expression evaluation, 239. sliding window maximum, 347. the first k high-frequency
- Geogebra instance clock
猜你喜欢

ByteDance Interviewer: talk about the principle of audio and video synchronization. Can audio and video be absolutely synchronized?

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

How to improve the efficiency of network infrastructure troubleshooting and bid farewell to data blackouts?

二叉树第一部分

How to manage massive network infrastructure?

impdp导schema报ORA-31625异常处理

Prct-1400: failed to execute getcrshome resolution

Arbre binaire partie 1

美国电子烟巨头 Juul 遭遇灭顶之灾,所有产品强制下架

2021-08-17
随机推荐
涂鸦智能携多款重磅智能照明解决方案,亮相2022美国国际照明展
Canvas draw picture
微信小程序学习之 实现列表渲染和条件渲染.
canvas管道动画js特效
Impdp leading schema message ora-31625 exception handling
[custom endpoint and implementation principle]
416 binary tree (first, middle and last order traversal iteration method)
Producer / consumer model
Oracle viewing data file header SCN information
PHP uses recursive and non recursive methods to create multi-level folders
Open Oracle server under Linux to allow remote connection
Graffiti smart brings a variety of heavy smart lighting solutions to the 2022 American International Lighting Exhibition
NVIDIA's CVPR 2022 oral is on fire! 2D images become realistic 3D objects in seconds! Here comes the virtual jazz band!
PostgreSQL DBA快速入门-通过源码编译安装
观察者模式
416-二叉树(前中后序遍历—迭代法)
利用pandas读取SQL Sever数据表
canvas 绘制图片
indexedDB本地存储,首页优化
414-二叉树的递归遍历