JDBC技术(一)

在之前我们操作mysql数据库的时候,我们是使用sqlyog客户端连接数据库,然后发送sql语句到服务器端,并执行,现在我们要使用Java程序来连接数据库,并发送sql语句到数据库,操作数据库。
使用Java程序连接数据库,这就是用到了JDBC技术(Java Database Connection),JDBC技术是oracle -sun 公司设计的一套专门用于Java程序操作数据库的接口。
我们在使用Java程序了解数据库的时候,一般是Java程序连接数据库的驱动,然后连接数据库的服务器,而Java程序和数据库的驱动都是让Java程序员去做,为了减少工作量,oracle-sun公司设计了一套专门用于Java程序连接数据库的接口,然后让数据库的厂商去设计驱动的实现类。
在这里插入图片描述

JDBC 使用说明:

JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
连接数据源,如:数据库。
为数据库传递查询和更新指令。
处理数据库响应并返回的结果。
JDBC 架构
分为双层架构和三层架构。
双层:
在这里插入图片描述
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
三层:在这里插入图片描述
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。

JDBC的条件
使用Java程序连接数据库:数据库主机,端口号,数据库用户名和密码,要连接的数据库,
四,JDBC的一些重要的api
由于我们在之前的一些库文件不够用,我们必须把Jar文件导入,在项目工程下创建一个lib文件,然后将jar文件复制进去,然后在 将改文件,buildpath,设置为相关库文件。
(1)Driver 接口,数据库驱动程序的接口,所有的数据库厂商需要实现此接口
(2)Connection 接口,用于获取数据库的连接

获取连接的三种方式
package com.jdbc.a_driver;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DriverDemo {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    //jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
    private static String user = "root";
    private static String password="root";
    public static void main(String[] args) throws Exception {
        /* java程序连接mysql数据库
         * 1.mysql数据库的主机地址
         * 2.端口号
         * 3.用户名
         * 5.密码
         * 6.需要连接的数据库 
         * 需求:先使用java程序连接我们的数据库,需要一个连接对象Connection     */
        //conn1();
        //conn2();
        conn3();
    }
    //我们以后就使用这种方式获取数据库的连接对象
    private static void conn3() throws Exception {
        //注册驱动,我们发现mysql驱动程序的Driver实现类已经帮我们在静态代码块中注册好了驱动,
        //我们在此时只需要将Driver实现类加载到我们的内存中,static代码块就会自动执行,我们的驱动也就自动注册了
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //获取java连接数据库的对象
        Connection conn = DriverManager.getConnection(url, user, password);
        //打印这个连接对象
        System.out.println(conn);
    }
    private static void conn2() throws Exception {
        //使用驱动管理类,连管理我们的驱动程序,并获取连接
        //1.注册驱动
        //public static void registerDriver(Driver driver)throws SQLException
        Driver driver = new com.mysql.jdbc.Driver();
        DriverManager.registerDriver(driver);
        //获取连接
        //public static Connection getConnection(String url,String user,String password)throws SQLException
        Connection conn = DriverManager.getConnection(url, user, password);
        //打印这里数据库连接
        System.out.println(conn);
    }
    //直连
    private static void conn1() throws SQLException {
        //创建一个驱动类对象Driver
        Driver driver = new com.mysql.jdbc.Driver();
        //获取java连接数据库的连接
        //Connection connect(String url, Properties info)throws SQLException
        //创建一个properties集合
        Properties prop = new Properties();
        prop.setProperty("user", user);
        prop.setProperty("password", password);
        Connection conn = driver.connect(url, prop);
        //打印这个连接对象,如果连接对象不为空,就说明我们已经成功获取到了连接对象
        System.out.println(conn);
    }
}

三种获取连接的方式:
1.利用properties将数据库的用户名和密码传进去,获取连接
2.先注册驱动,利用驱动的管理类来获取连接方式
3.我们知道注册驱动这个过程是静态的,然后可以利用字节码文件对象的方法,将这个类直接加载到我们的类存中,然后再次利用驱动管理类,获取连接,在以后我们就利用这个方法 ,更快,更方便
(3)Statement 接口,用于执行静态的sql语句
Statement createStatement()创建一个静态的sql语句对象
PreparedStatement PreparedStatement(String sql) 创建预编译语句执行对象
CallableStatement prepareCall(String sql) 创建存储过程的sql语句执行对象,
int executeUpdata (String sql)用于执行更新的语句操作,可以执行
DDL语句(数据定义语言)(create,drop,alter,Declare);
DML语句(数据操控语句)(delete,updata,insert);
ResultSet executeQuery (String sql) 执行DQLY语句(数据)(select)
1.执行DDL语句:

package com.jdbc.b.statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";
    public static void main(String[] args){
        Connection conn = null;
        Statement stmt = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //通过驱动管理类获取数据库连接
            conn = DriverManager.getConnection(url, user, password);
            //创建语句执行者
            stmt = conn.createStatement();
            //int executeUpdate(String sql)
            //throws SQLException执行给定 SQL 语句,
            //该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
            String sql = "CREATE TABLE student("+
                            "id INT,"+
                            "NAME VARCHAR(20),"+
                            "age INT"+
                            ");";
            //使用语句执行者执行创建的sql语句
            int count = stmt.executeUpdate(sql);
            //打印一下影响的结果
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            //释放资源
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }   
    }
}

2.执行DQL语句:

package com.jdbc.b.statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import com.jdbc.Util.JDBCUtil;
public class Demo2 {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";
    public static void main(String[] args) {
        testInsert();//给数据库添加一条记录
        testUpdate();//修改数据库中的一条数据
        testDelete();
    }
    private static void testDelete() {
        //需求:将刘德华改为岳云鹏
        Connection conn = null;
        Statement stmt = null;
        try{
            //2.获取连接对象
            conn  =JDBCUtil.getConn();
            //3.准备sql
            String sql = "DELETE FROM student WHERE id=1;";
            //4.获取语句执行者
            stmt = conn.createStatement();
            //5.发送兵长执行sql
            int count = stmt.executeUpdate(sql);
            //打印影响的行数
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            JDBCUtil.close(conn, stmt, null);
        }
    }
    private static void testUpdate() {
        //需求:将刘德华改为岳云鹏
        Connection conn = null;
        Statement stmt = null;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            conn  =DriverManager.getConnection(url, user, password);
            //3.准备sql
            String sql = "UPDATE student SET NAME='岳云鹏' WHERE id=1;";
            //4.获取语句执行者
            stmt = conn.createStatement();
            //5.发送兵长执行sql
            int count = stmt.executeUpdate(sql);
            //打印影响的行数
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    private static void testInsert() {
        //专门测试添加功能
        Connection conn = null;
        Statement stmt = null;
        try{
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取连接
            conn = DriverManager.getConnection(url, user, password);
            //定义sql
            String sql = "INSERT INTO student VALUES(1,'刘德华',50);";
            //获取语句执行者
            stmt = conn.createStatement();
            //使用语句执行者发送并执行sql语句,并返回影响的行数
            int count = stmt.executeUpdate(sql);
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            //释放资源
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}```

发布了62 篇原创文章 · 获赞 55 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Veer_c/article/details/103845176
今日推荐