JDBC:Connection链接,Statement方法。链接的封装。PreparedStatement预编译。事务回滚。

本文介绍了JDBC中的Connection连接数据库的基本操作,包括加载驱动、获取连接和执行SQL。接着讲解了Statement对象的使用,并对比了PreparedStatement的预编译特性,强调其在防止SQL注入和提高效率上的优势。最后,文章探讨了JDBC事务管理,包括如何设置手动提交、回滚事务以及使用保存点。
摘要由CSDN通过智能技术生成

一。JDBC: Java DataBase Connective 是 Java连接数据库的规范 - 接口

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

  • 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(“驱动类名”);
    oracle: oracle.jdbc.driver.OracleDriver
    mysql: com.mysql.jdbc.Driver
    c.获得连接
    DriverManager.getConnection(url, username, password);
    url: jdbc:mysql://ip:port/database?serverTimezone=GMT
    username: 账号
    password: 密码
    d.获得执行SQL语句的Statement对象
    e.执行SQL, 获得结果 boolean int ResultSet
    f.释放资源

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo1 {
   
    public static void main(String[] args) {
   
        //加载驱动
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");// cj 控制台升级
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        }
//建立连接
        try {
   
             /*
            账号或密码错误:SQLException: Access denied for user 'liuliudr'@'localhost' (using password: YES)
            时区错误:java.sql.SQLException: The server time zone value
            port错误:java.net.ConnectException:
            ip错误:UnknownHostException
            
            可能产生异常: SQLException
                 1.dataBase 指定错误
                 2.账号/密码错误
                 3.端口错误 -> Connection refused
                 4.ip错误 -> Network is unreachable
                 5.jdbc:mysql 错误 -> No suitable driver
                   结论: 连接数据库url需要匹配合适的驱动类
             */
            // url:(jdbc:mysql://ip:port/database?serverTimezone=GMT),user,password;
            Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/work01?serverTimezone=GMT","liuliudr","123456");
            // url也可写成jdbc:mysql:///database前提是localhost

            //System.out.println(conn);

            /*
            Statement 中:
            boolean execute(String sal)
            执行DDL DQL 返回 false,执行DCL返回true。返回值看他有没有结果
             */
            Statement statement = conn.createStatement();
            //DDL
            String sql="create table sks(id int(10) primary key auto_increment,name varchar(20));";
            statement.execute(sql);
            //DQL
            String sql1="insert into sks value(1,'黑土');";
            statement.execute(sql1);
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }
}
    1. Statement 中执行sql语句的方法有三个

          boolean execute(String sql)
              DDL DML: 返回false    DQL: 返回true
              因为DML 和 DQL有专门的执行方法, 所以该方法通常用来执行DDL
              返回值: 有没有结果
          int executeUpdate(String sql)
              只能执行 DML
              返回值: 影响了几行
          ResultSet executeQuery(String sql)
              只能执行 DQL
              返回值: 查询出来的结果集
      
 @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();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        }
    }

    @Test
    public void testDQL() {
   
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day01", "root", "root"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值