JDBC快速入门


给宝宝们一个建议, JSP别学啦, 我给你们分享一下我学习的路程吧!! (重点)指的是需要彻底理解,不仅仅是会用
Java基础(都是重点, 但反射和IO最重要),前端基础(HCJ三者) Socket, Servlet(重点)+Tomcat, Mysql数据库 【到这里,基本方面已经OK,开始学习web框架】

Spring(重点), SpringMVC(JDBC看你学不学咯), MyBatis, SpringBoot, 前端的: Jquery, Vue(一定要学) 【到这里你已经可以做出自己的网站了,可以学习其它框架】

Linux(重点,命令熟能生巧), Docker, Es7, FastDFS, Git, MQ(推荐学习RabbitMQ和Kafka), Nginx, Redis,Zookeeper, SpringCloud
也不能忘记了基础以及进阶JVM, JUC, WebSocket, Netty 【到这里已经可以自信一点面试了,前提是你理解了并且能表达出来,然后学习大数据方面】

Hadoop全家桶, Kafka, Flink, Spark, K8S
我现在正在学习Flink, 发现感觉自己是弱鸡, 兴趣最重要, 是学完的必要条件. 目标也最重要, 是提升个人高度天花板的必要条件, 表达和展示能力很重要, 要不没人知道你会

一、概念

JDBC(Java DataBase Connectivity),Java数据库连接,Java语言操作数据库
本质:是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。然后各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们学者可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

二、快速入门

	步骤:
    	1. 导入驱动jar包   mysql-connector-java-8.0.19 
    	2. 注册驱动
    	3. 获取数据库连接对象Connection
    	4. 定义sql语句
    	5. 获取执行sql语句的对象Statement,因为connection不能直接执行
    	6. 执行sql,接收返回结果
    	7. 处理结果
    	8. 释放资源(以免造成内存泄漏)
    	9. 代码如下:
package com.jdbc;

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

public class JdbcDemo1 {
    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2. 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3.获取数据库连接对象                            //localhost:3306为ip地址 /db3为选中的数据库名
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?serverTimezone=GMT","root","root");
        //4.定义SQL语句     
        String sql= "update account set balance=500 where id=1";
        //5.获取执行sql的对象 Statement
        Statement statement = conn.createStatement();
        //6.执行SQL语句
        int count = statement.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        statement.close();
        conn.close();

    }

}

三、详解各个对象

1. DriverManager:驱动管理对象
* 功能为:
1、注册驱动
static void registerDriver(Driver driver):注册给定的驱动程序DriverManager
然后代码使用只有这一句话:Class.forName(“com.mysql.jc.jdbc.Driver”);(注意mysql5之后的驱动jar包可以省略不写)
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块

 		static{
			try{
				java.sql.DriverManage.registerDriver(new Driver());
			}catch{
				throw new RuntimeException("Can't register driver!"); 
			}
		}

   2、获取数据库连接
  方法:static Connection getConnection(String url, String user, String password)
  url(参数):指定连接的路径,其语法为jdbc:mysql://ip地址(域名):端口号/数据库名称?serverTimezone=GMT

2. Connection:数据库连接对象
* 功能为:
1、获取执行sql的对象
Statement createStatement()  /  preparedStatement prepareStatement(String sql)
2.管理事务:
 开启事务:setAutoCommit(boolean autocommit)  该方法的参数设置为false即开启事务
 提交事务:commit()
 回滚事务:rollback()

3. Statement:执行sql的对象(执行静态的SQL语句,就是sql里面参数值是已知给出的)
* 功能为:
1、执行sql
 boolean execute(String sql) 可以执行任意的sql语句
 int executeUpdate(String sql) 执行DML语句(操作表里的数据insert、update、delete)、DDL语句(操作数   据库和表 create、alter、drop)
 ResultSet executeQuery(String sql) 执行DQL语句(对表中的数据进行select)

4. ResultSet:结果集对象
1、boolean next():游标向下移动一行,判断当前航是否是最后一行末尾,如果是,则返回false;不是返回true
2、getString(1) / getInt(1) / getDouble(“id”):参数“1”表示第一列,参数“id”表示列名id

5. PreparedStatement:执行sql的对象(执行动态的SQL语句)
1、SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。造成安全问题
  1.输入用户名(随便写的),输入密码:a’ or ‘a’ = ‘a
  2.sql: select *from user where username=‘wyb’ and password =’ a’ or ‘a’ = 'a ’
2、解决sql注入问题:使用preparestatement对象来解决
3、预编译的sql:参数使用?作为占位符

四、抽取JDBC工具类:JdbcUtils(简化书写)

就是新建一个util文件夹,工程的结构如下所示:
在这里插入图片描述
JDBCUtils.java的代码如下:

package com.util;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static String url;
    private static String user;
    private static  String password;
    private static  String driver;
    /*
    * 配置文件的读取,只需要读取一次即可拿到这些值,利用静态代码块
    * */

    static {
        //读取资源文件,获取值
        try {
            //1. 创建properties集合类
            Properties pro = new Properties();
            //获取src路径下的文件的方式
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res = classLoader.getResource("jdbc.properties"); //参数是以src为根目录的
            String path = res.getPath();
            //2.加载文件
            pro.load(new FileReader(path));
            //3.获取数据,赋值
            url =pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4.注册驱动
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    /*
    * 获取连接对象*/
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    /*
    * 释放资源
    * */
    public static void close(Statement st, Connection conn) {
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /*
    * 释放资源(针对的是查询sql语句)
    * */
    public static void close(ResultSet rs, Statement st, Connection conn) {
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}


JDBCDemo2的代码如下:

package com.jdbc;

import com.domain.Emp;
import com.util.JDBCUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

//使用了JDBCUtil工具类
//定义一个方法,查询emp表的数据将其封装为对象,然后转载集合,返回
public class JdbcDemo2 {
    public static void main(String[] args) {
        List<Emp> list = new JdbcDemo2().findAll();
        System.out.println(list);
    }

    /*
    *演示Jdbc工具类*/
    public List<Emp> findAll(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        List<Emp> list = null;

        try {
            conn = JDBCUtils.getConnection();
            //3.定义SQL语句
            String sql = "select * from emp";
            //4.获取执行sql对象
            st = conn.createStatement();
            //5.执行SQL语句
            rs = st.executeQuery(sql);

            Emp emp = new Emp();
            list = new ArrayList<Emp>();
            while (rs.next()){
                int id = rs.getInt("id");
                String ename = rs.getString("ename");
                int job_id = rs.getInt("job_id");
                double salary = rs.getDouble("salary");
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                emp.setSalary(salary);
                list.add(emp);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
         //   JDBCUtils.close(rs,st,conn);
        }

        return list;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值