栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC笔记

目录

JDBC

类加载

JDBC的连接

导入jar包

加载驱动类

链接数据库

获得一个Statement对象

执行sql语句

ResultSet

获得结果的方法

PrepareStatement

事务

 总结


JDBC

是Java访问数据库的标准规范 (接口),具体实现是由不同的数据库厂商来完成的

类加载

将类的信息从字节码文件读取到JVM中

方式:new、调用静态属性或者静态方法、用子类、手动类加载(Class.forName())

JDBC的连接
  1. 导入jar包
  2. 加载驱动(类)
  3. 链接数据库
  4. 获得一个Statement对象
  5. 执行sql语句

导入jar包

加载驱动类

Class.forName("com.mysql.cj.jdbc.Driver");

驱动路径有两种:"com.mysql.cj.jdbc.Driver"(使用于mysql8,兼容mysql5)和"com.mysql.jdbc.Driver"(适用于mysql5)

链接数据库

String url = "jdbc:mysql://127.0.0.1:3306/数据库名称?serverTimezone=GMT";

Connection conn = DiverManger.getConnection(url,"账户名","密码");

获得一个Statement对象

Statement stmt = conn.createStatemt();

执行sql语句
  • stmt.execute(String sql)方法,可以执行ddl、dml、dql语句,但建议执行ddl,返回值boolean类型,判断是否有返回结果
  • stmt.executeUpdate(String sql)方法,可以执行ddl、dml、dql语句,但建议执行dml,返回值int类型,判断有几条返回结果
  • stmt.executeQuery(String sql)方法,只能执行dql语句,返回值为一个ResultSet对象

ResultSet

stmt.executeQuery(String sql)返回的结果的集合,只有一个方法next()

刚开始ResultSet指向结果中第一个记录的前面,必须使用next()使ResultSet指向的位置移动

String sql = "select * from emp";
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()){
            int empno = rs.getInt("empno");
            String ename = rs.getString("ename");
            String job = rs.getString("job");
            String mgr = rs.getString("mgr");
            if (mgr==null) mgr = "无";
            Date hiredate = rs.getDate("hiredate");
            int sal = rs.getInt("sal");
            int comm = rs.getInt("comm");
            String deptno = rs.getString("deptno");
            if (deptno==null) deptno="无";
            System.out.println("雇员编号:"+empno+",姓名:"+ename+",职业:"+job+",经理编号:"+mgr+",入职时间:"+hiredate+",薪水:"+sal+",奖金:"+comm+",部门编号:"+deptno);
        }

获得结果的方法

要获得int类型就调用getInt方法,要获得String类型就调用getString方法,以此类推

getXXX()方法中需要输入参数,可以是String类型的字段名,也可以是int类型字段对应的下标(JDBC下标从1开始)

PrepareStatement

预编译:先将sql语言模板发到数据库,再发送数据

String sql = "select * from emp where ? or ?";
PreparedStatement pstmt = conn.preparedStatement(sql);
pstmt.setString(1,"替换第一个?");
pstmt.setInt(2,999);//替换第二个?

事务
package JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Savepoint;

public class demo04 {
    public static void main(String[] args) {
        Connection conn = JDBCUtil.getConnection();
        Savepoint A = null;
        try {
            //不同的操作不能用同一个PreparedStatement
            PreparedStatement pstmt1 = conn.prepareStatement("update emp set sal = sal-? where ename=?");
            PreparedStatement pstmt2 = conn.prepareStatement("update emp set sal = sal+? where ename=?");
            pstmt1.setInt(1,100);
            pstmt2.setInt(1,100);
            pstmt1.setString(2,"ALLEN");
            pstmt2.setString(2,"SMITH");
            //关闭自动提交(start transaction)
            conn.setAutoCommit(false);
            pstmt1.executeUpdate();
            pstmt2.executeUpdate();
            //设置存档点
            A = conn.setSavepoint("name");
            //制造异常让程序终止
            int i=1/0;
            pstmt1.executeUpdate();
            pstmt2.executeUpdate();
            //提交
            System.out.println("提交");
            conn.commit();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                //如果程序出错,回滚到存档点A
                System.out.println("程序出错,回滚到A");
                conn.rollback(A);
                conn.commit();//回滚完还要提交
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

 总结
  • JDBC是一种规范,对于不同的数据库厂商,JDBC都是一样的,不同的是驱动地址、url等
  • 用PreparedStatement代替Statement
  • JDBC的下标从1开始

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号