JDBC-DAY01——数据库的连接,查询,日期插入,预编译,模拟登陆注册

这篇博客介绍了JDBC的基础知识,包括如何建立数据库连接,使用Statement执行SQL语句,特别是DQL查询。强调了SQL注入的安全问题,并展示了预编译的PreparedStatement如何防止注入并提高效率。此外,还讲解了日期插入、事务处理和批量执行SQL的操作,最后提到了模拟登陆注册的情景。
摘要由CSDN通过智能技术生成


JDBC: Java DataBase Connective
Java连接数据库的规范 - 接口
java.sql -> JDBC 规范相关的接口,类
实现类: 各个数据库厂商来提供

Connection - 数据库的连接

1.Connection - 连接
a.引入jar包
mysql-connector-java-5.1.8-bin.jar(推荐数据库版本: 5.5 5.7 5.x )
mysql-connector-java-8.0.16.jar(推荐数据库版本: 8.x)
b.加载驱动 - 类
Class.forName(“驱动类名”);
连接mysql与oracle sql的驱动类名不同:
1.oracle: oracle.jdbc.driver.OracleDriver
2.mysql: com.mysql.jdbc.Driver
c.获得连接
DriverManager.getConnection(url, username, password);
url: jdbc:mysql://ip:port/database ?serverTimezone=GMT
注: jdbc连接的url中配置的时区有问题可将?serverTimezone=GMT加到上述位置
username: 数据库账号
password: 数据库密码


Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/db_day01",
 "root", "123456");

d.获得执行SQL语句的Statement对象
e.执行SQL, 获得结果 boolean int ResultSet
f.释放资源
连接案例:

package com.zzxx.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDemo01 {
   
    public static void main(String[] args) {
   
        // 1.导入jar包
        /* 2.加载驱动
            可能产生异常: ClassNotFoundException
            原因: 1.没有导入jar包
                 2.类名写错
         */
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 3.获得连接对象 DriverManager
            /* DriverManager 提供了一个静态方法 getConnection
               参数1: 连接数据库的url地址
                     jdbc:mysql://ip:port/dataBase
               参数2: 连接数据库的账号
               参数3: 连接数据库的密码

               可能产生异常: SQLException
                 1.dataBase 指定错误
                 2.账号/密码错误
                 3.端口错误 -> Connection refused
                 4.ip错误 -> Network is unreachable
                 5.jdbc:mysql 错误 -> No suitable driver
                   结论: 连接数据库url需要匹配合适的驱动类
             */
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
            // 4.获得操作数据库的Statement对象 - 执行sql语句
            Statement stmt = conn.createStatement();
            // 5.执行sql语句  DDL DML DQL
            String sql = "create table u (id int primary key, name varchar(20))";
            stmt.execute(sql);
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }
}

Statement 中执行sql语句的方法有三个(execute)

boolean execute(String sql)
DDL DML: 返回false DQL: 返回true
因为DML 和 DQL有专门的执行方法, 所以该方法通常用来执行DDL
返回值: 有没有结果
int executeUpdate(String sql)
只能执行 DML
返回值: 影响了几行
ResultSet executeQuery(String sql)
只能执行 DQL
返回值: 查询出来的结果集

package com.zzxx.jdbc;

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDemo02 {
   
    @Test
    public void testDDL() {
   
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
            Statement stmt = conn.createStatement();
            // 5.执行sql语句  DDL DML DQL
            /* Statement 中执行sql语句的方法有三个
                boolean execute(String sql)
                    DDL DML: 返回false    DQL: 返回true
                    因为DML 和 DQL有专门的执行方法, 所以该方法通常用来执行DDL
                    返回值: 有没有结果
                int executeUpdate(String sql)
                    只能执行 DML
                    返回值: 影响了几行
                ResultSet executeQuery(String sql)
                    只能执行 DQL
                    返回值: 查询出来的结果集
             */
            // 执行DDL
            String sql = "create table u1 (id int primary key, name varchar(20))";
            boolean b = stmt.execute(sql); // false
            System.out.println(b);
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }
    @Test
    public void testDML() {
   
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root");
            Statement stmt = conn.createStatement();
            // 5.执行sql语句  DDL DML DQL
            // 执行DML
            String sql = "insert into u values(1, 'lucy')";
            boolean b = stmt.execute(sql); // false
            System.out.println(b);
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值