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:

java 复制代码
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.定义sql
        String 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的对象statement
        PreparedStatement 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:

java 复制代码
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.定义sql
        String sql = "select * from dept where dept_id=?";
        // 4.获取执行sql的对象statement
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, 10);
        //5.执行sql并获取executeQuery返回的结果集对象ResultSet rs
        ResultSet 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

java 复制代码
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.定义sql
        String 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的对象statement
        Statement stmt = conn.createStatement();
        //5.执行sql
        int count = stmt.executeUpdate(sql);  //受影响的行
        //6.处理结果
        System.out.println(count);//打印1表示成功插入了1行数据
        //7.释放资源
        stmt.close();
        conn.close();
    }

}

四、StmtDemo2_DQL

java 复制代码
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.定义sql
        String sql = "select * from dept where dept_id=10";
        // 4.获取执行sql的对象statement
        Statement stmt = conn.createStatement();
        //5.执行sql并获取executeQuery返回的结果集对象ResultSet rs
        ResultSet 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

相关推荐
qq_529835351 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New3 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6753 小时前
数据库基础1
数据库
我爱松子鱼3 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo4 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser5 小时前
【SQL】多表查询案例
数据库·sql
Galeoto5 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)5 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231115 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白5 小时前
PostgreSQL:更新字段慢
数据库·postgresql