Jdbc练习

本文详细介绍了JDBC的7大操作步骤,包括注册驱动、获取数据库连接等,并讲解了DDL和DML语句的使用。同时,文章讨论了Statement与PreparedStatement的差异,强调了PreparedStatement的预编译优势及安全特性。此外,提到了数据库连接池Druid的使用和作用,以及Commons-DbUtils在项目中的应用。最后,文章提及了CSS选择器、样式属性和JavaScript基础知识。
摘要由CSDN通过智能技术生成

12-5

1.JDBC原生7大操作步骤涉及的到的API

1)导包---导入msyql驱动包
2)注册驱动--->

  Class.forName("com.mysql.jdbc.Driver") ;  //为了向后兼容 ---在加载类

  本身注册驱动需要用到java.sql.DriverManager:驱动管理类(管理诸如JDBC的服务)
  提供静态功能:
        1)注册驱动public static void registerDriver(Driver driver) throws SQLException
        参数为:java.sql.Drvier---->需要接口的实现类---驱动jar包里面com.mysql.jdbc.Drvier

    如果上面的写法使用    DriverManager.registerDriver(new com.mysql.jdbc.Driver());这种方式,会多注册一遍
    com.mysql.jdbc.Driver的原码里面
        public class Driver extends NonRegisteringDriver implements java.sql.Driver {
            public Driver() throws SQLException {
            }

            static {  //静态代码块
                try {
                    DriverManager.registerDriver(new Driver());  //注册驱动了
                } catch (SQLException var1) {
                    throw new RuntimeException("Can't register driver!");
                }
            }
        }

        获取数据库的连接对象,返回值 java.sql.Connection
       2)public static Connection getConnection(String url,
                                                String user,
                                                String password)
                                         throws SQLException

            url: 协议://域名:端口/库名   (统一资源定位符号)
               jdbc:mysql://localhost:3306/库名
            user:mysql的用户名: root用户
            password:密码


java.sql.Connection:与特定数据库连接会话 接口

         Statement createStatement() throws SQLException; 获取执行对象

                返回返回的数据库执行对象--->里面创建具体子实现类对象
                public class StatementImpl implements Statement

java.sql.Statement:用于执行静态SQL语句并返回其生成的结果的对象。
            静态sql语句:
                    弊端
                        1)硬编码
                        2)存在sql字符串拼接

             String sql = "update account set balance = balance + 500 where id =1 " ;

            两种通用操作

                针对DDL语句(针对表/库相关的操作),DML语句的insert ,update,delete   更新操作
                public int executeUpdate(String sql)

                针对DQL语句:数据库查询语句 ,返回表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
                ResultSet executeQuery(String sql) throws SQLException

 java.sql.ResultSet 据库结果集的数据表
              boolean next():是否下一个结果集

2.JDBC:DDL语句,DML语句----都能直接操作

JDBC配置文件

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/表名
user=root
password=数据库密码

书写JDBC工具类

package com.qf.jdbc_utils_02;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * 提供这样一个工具类,构造方法私有,目的就是为了让外界不能new对象
 *  封装哪些
 *
 *          1)每一次书写7大不步骤,都需要去获取数据库的连接对象,需要优化
 *          2)每一次都要释放资源的代码,也需要优化
 */
public class JdbcUtils {

    //成员变量声明三个变量
    private static String url = null ;
    private static String user = null ;
    private static String password = null ;
    private static String driverClass = null ;

    //模拟 驱动jar包---Driver驱动类---提供静态代码块
    static{
        try {
            //想办法获取这些参数---->提供配置文件  后缀名.properties---->放在src下面
            //1)读取配置文件内容
            InputStream inputStream = JdbcUtils.class.getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            //2)创建一个属性集合列表Properties
            Properties prop = new Properties() ;
            //System.out.println(prop) ;//测试 ---肯定空列表
            //3)将1)获取资源文件的输入流对象---加载到属性集合列表中
            prop.load(inputStream);
           // System.out.println(prop) ; //测试--->有属性列表内容
            //4)通过key获取value
            driverClass = prop.getProperty("driverClass");
            url = prop.getProperty("url") ;
            user = prop.getProperty("user") ;
            password = prop.getProperty("password") ;
            //5)加载驱动类
            Class.forName(driverClass) ;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }



    private  JdbcUtils(){}


    /**
     * 提供方法,获取数据库的连接对象
     * @return
     */
    public static Connection getConnection(){

        try {
            //需要驱动管理DriverManager获取连接对象
            Connection connection = DriverManager.getConnection(url, user, password);//获取这三个参数的内容
            return connection ;

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return  null ;
    }

    /**
     * 释放资源,针对DQL语句操作释放的相关资源对象
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rs,Statement stmt,Connection conn){
       if(rs!=null){
           try {
               rs.close();
           } catch (SQLException throwables) {
               throwables.printStackTrace();
           }
       }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    /**
     * 释放资源,针对DDL语句,DML语句
     * @param stmt
     * @param conn
     */
    public static void close(Statement st
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值