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

JDBC简介

JDBC最基本的知识点要求理解并会使用下边的两个案例即可:

前言:

Jdbc操作步骤简析:

1.Connection conn=DriverManager.getConnection(url,账号,密码):DriverManager类的连接方法根据url账号密码连接数据库,并返回一个连接对象Connection conn

2.Connection对象表示java代码和数据库的一个连接(将连接封装为一个java对象了<里边包含连接的数据库名,连接地址,表信息,数据库时区,数据库编码等信息>)

3.PreparedStatement pstmt = conn.prepareStatement(sql语句) 表示用连接对象的prepareStatement(sql语句)将sql语句发送给数据库并获取到一个预编译对象,预编译对象可以用来设置占位符的值,同时可以给数据库发送执行sql语句的指令

4.ResultSet rs = pstmt.executeQuery(): 表示用预编译对象pstmt的executeQuery()方法给数据库发送执行sql语句的指令来让数据库执行SQL语句, 并将 插叙结果放到一个结果集对象ResultSet rs中(可以从此对象中获取查询结果)。 //如果是数据操作就调用int rs=pstmt.executeUpdate();执行数据更新操作并返回生效的行数。

一、DML:

package com.zyq.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;//本类和StmtDemo1_DML不同之处在于:
//     将Statement类换成了PreparedStatement类(调用的方法也不同 <改成了conn.prepareStatement(sql)>)
//     好处在于PreparedStatement类支持: 给sql语句中包含 占位符 ? (可以防止黑客的sql注入攻击)//     SQL注入介绍:   "select * from users  where  username= '+userName+' and password=  '+password+' ";
//     当输入了上面的用户名  "'1' or 1 = 1 --"   和密码"123" ,上面的SQL语句变成如下格式:
//     "SELECT * FROM user_table WHERE username='1' or  1=1   -- and password='123'"
//     此SQL中的  username='1' or  1=1   是一个永远成立的条件。  后边再加上两个减号  "--"  表示注释掉and password='123'"
//     则用此方式如论用户输什么账号密码,只要账号值后边加上   or  1=1   --   则总是能登录成功(这就是黑客最低级的攻击手段:SQL注入)。
public class PStmtDemo1_DML {public static void main(String[] args) throws Exception {//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tedu", "root", "root");//3.定义sqlString sql = "insert into dept(dept_id,dname,loc)value (?,?,'延安')";//String sql = "update dept set loc='yanAn' where dept_id=11";//String sql = "delete from  dept where dept_id=11";//String sql = "create table ts(id int(10),  name char(100))";// 4.获取执行sql的对象statementPreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, 12);//给sql语句中的第1个占位符?赋值为12(表示插入的dept_id的值是12)pstmt.setString(2, "java教学部");//给sql语句中的第2个占位符?赋值为"java教学部"(表示插入的dname值是"java教学部")//5.执行sql//int count = pstmt.executeUpdate();  //受影响的行//System.out.println(count);//打印1表示成功插入了1行数据boolean rs = pstmt.execute();  //受影响的行//6.处理结果System.out.println(rs);//打印1表示成功插入了1行数据//7.释放资源pstmt.close();conn.close();}}

二、DQL:

package com.zyq.jdbc;import java.sql.*;//本类和StmtDemo2_DQL不同之处在于:
//     将Statement类换成了PreparedStatement类(调用的方法也不同 <改成了conn.prepareStatement(sql)>)
//     好处在于PreparedStatement类支持: 给sql语句中包含 占位符 ? (可以防止黑客的sql注入攻击)
//     SQL注入介绍:   'select * from users  where  username=' "+userName+" ' and password=' "+password+" '";
//     SQL注入介绍:   "select * from users  where  username= '+userName+' and password=  '+password+' ";
//
//     当输入了上面的用户名  "'1' or 1 = 1 --"   和密码"123" ,上面的SQL语句变成如下格式:
//     "SELECT * FROM user_table WHERE username='1' or  1=1   -- and password='123'"
//     此SQL中的  username='1' or  1=1   是一个永远成立的条件。  后边再加上两个减号  "--"  表示注释掉and password='123'"
//     则用此方式如论用户输什么账号密码,只要账号值后边加上   or  1=1   --   则总是能登录成功(这就是黑客最低级的攻击手段:SQL注入)。
public class PStmtDemo2_DQL {public static void main(String[] args) throws Exception {//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tedu", "root", "root");//3.定义sqlString sql = "select * from dept where dept_id=?";// 4.获取执行sql的对象statementPreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, 10);//5.执行sql并获取executeQuery返回的结果集对象ResultSet rsResultSet rs = pstmt.executeQuery();  //受影响的行//6.处理结果(从结果集对象ResultSet rs中获取数据)while(rs.next()){//6.1.判断结果集对象中是否有数据int deptId=rs.getInt("dept_id");//6.2.从结果集对象ResultSet rs中获取数据dept_id//"dept_id"也可以换成1(表示结果集中的第1列)String dname=rs.getString(2);String loc=rs.getString(3);System.out.println("查询结果:" + deptId + ", " + dname + ", " + loc);}//7.释放资源pstmt.close();conn.close();}}

三、StmtDemo1_DML

package com.zyq.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class StmtDemo1_DML {public static void main(String[] args) throws Exception {//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tedu", "root", "root");//3.定义sqlString sql = "insert into dept(dept_id,dname,loc)value (11,'教学部','延安')";//String sql = "update dept set loc='yanAn' where dept_id=11";//String sql = "delete from  dept where dept_id=11";//String sql = "create table ts(id int(10),  name char(100))";// 4.获取执行sql的对象statementStatement stmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate(sql);  //受影响的行//6.处理结果System.out.println(count);//打印1表示成功插入了1行数据//7.释放资源stmt.close();conn.close();}}

四、StmtDemo2_DQL

package com.zyq.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class StmtDemo2_DQL {public static void main(String[] args) throws Exception {//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tedu", "root", "root");//3.定义sqlString sql = "select * from dept where dept_id=10";// 4.获取执行sql的对象statementStatement stmt = conn.createStatement();//5.执行sql并获取executeQuery返回的结果集对象ResultSet rsResultSet rs = stmt.executeQuery(sql);  //受影响的行//6.处理结果(从结果集对象ResultSet rs中获取数据)while(rs.next()){//6.1.判断结果集对象中是否有数据int deptId=rs.getInt("dept_id");//6.2.从结果集对象ResultSet rs中获取数据dept_id//"dept_id"也可以换成1(表示结果集中的第1列)String dname=rs.getString(2);String loc=rs.getString(3);System.out.println("查询结果:" + deptId + ", " + dname + ", " + loc);}//7.释放资源stmt.close();conn.close();}}


                                             by  zhaoYQ    2024-06-12  12:31

http://www.lryc.cn/news/373416.html

相关文章:

  • RK3568平台(触摸篇)触摸屏基本原理
  • 【太原理工大学】软件系统安全—分析题
  • 【仪器仪表/电源专题】浮地信号的测试的四种方案对比
  • Centos7安装jdk8或11以及切换方案
  • 计算机二级Access选择题考点—代码篇
  • 海外仓系统如何让海外仓受益,WMS海外仓系统使用指南
  • 贪心-区间问题
  • 算法分析与设计期末考试复习GDPU
  • 分批次训练和评估神经网络模型
  • 【CS.AL】算法核心之分治算法:从入门到进阶
  • leetcode刷题记录:hot100强化训练2:二叉树+图论
  • 湘潭大学信息与网络安全复习笔记2(总览)
  • C语言:头歌使用函数找出数组中的最大值
  • 【技巧】Leetcode 191. 位1的个数【简单】
  • 【Pandas驯化-02】pd.read_csv读取中文出现error解决方法
  • linux下C语言如何操作文件(三)
  • 6.14作业
  • MySQL数据库管理(一)
  • Kafka使用教程和案例详解
  • TGI模型- 同期群-评论文本
  • ESP32 BLE学习(0) — 基础架构
  • 【JAVA】Java中Spring Boot如何设置全局的BusinessException
  • pdf.js实现web h5预览pdf文件(兼容低版本浏览器)
  • SSID简介
  • PS通过GTX实现SFP网络通信1
  • 前端面试项目细节重难点(已工作|做分享)(九)
  • 区间预测 | Matlab实现BP-ABKDE的BP神经网络自适应带宽核密度估计多变量回归区间预测
  • 抢占人工智能行业红利,前阿里巴巴产品专家带你15天入门AI产品经理
  • MEMS:Lecture 16 Gyros
  • Java中List流式转换为Map的终极指南