JDBC

JDBC是什么:

Java database Connectivity(Java语言链接数据库)

本质是什么:

JDBC是SUN公司制定的一套接口(interface)
Java.sql.*;(这个包下有很多的接口)
接口都有调用者和实现者

面向接口调用,面向接口写实现类,这都属于面向接口编程

为什么要面向接口编程

耦合度:降低程序的耦合度,提高程序的拓展力
多态机制就是非常典型的:面向接口编程(不要面向具体编程)
建议:

Animal a = new Cat();
Animal a = new Dog();
public void feed(Animal a){//面向父类型编程

}

不建议:

Dog d = new Dog();
Cat d = new Cat();

思考:
为什么SUN制定一套JDBC接口
每一个数据库的底层实现原理都不一样
Oracle数据库有自己的原理
MySQL数据库也有自己的原理
SQL Server数据库也有自己的原理
......
每一个数据库产品都有自己独特的实现原理

3.JDBC开发前的准备工作:
先去官网下载对应的驱动Jar包,然后将其配置到环境变量classpath当中
classpath=.;路径
以上配置针对文本编辑器开发,使用idea工具的时候,不需要配置以上的环境变量

4.JDBC编程六步

1.注册驱动:(告诉Java程序,即将不要连接的是那个数据库)
(原始的写法)
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
/*
1.加载驱动
这个最常用
Class.forName("com.mysql.jdbc.Driver");
为什么这个最常用:
因为参数是一个字符串,字符串可以写到XXXXX.properties文件中
*/

2.获取连接:(表示JVM的进程和数据库进程之间的通道打开了,这个属于进程之间的,重量级的,使用完之后一定要关闭通道)
3.获取数据库操作对象(专门执行SQL语句的对象)
4.执行SQL语句(DQL,DML...)
5.处理查询结果集(只有当第四部执行select语句的时候,才有这第五步的查询结果集)
6.释放资源(使用完之后一定要关流)

具体代码如下:

//增加

package com.jdbc;

import java.sql.*;

/*
编程6步
*/ public class dbConn { public static void main(String[] args) throws SQLException { String url = "jdbc:mysql://localhost:3306/test2"; String username = "root"; String password = "root"; Connection conn = null; Statement stmt = null; try { //1.注册驱动 Driver driver = new com.mysql.jdbc.Driver(); DriverManager.registerDriver(driver); //2.获取连接 conn = DriverManager.getConnection(url,username,password); // System.out.println(conn);//获取数据库连接com.mysql.jdbc.JDBC4Connection@14bf9759 // conn.close();//关流 //3.获取数据库操作对象(Statement,专门执行SQL语句的) stmt = conn.createStatement(); //4.执行SQL String sql = "insert into user(username,pwd) values ('ljy','ljy')"; //专门执行DML语句(insert,delete,update) //返回值是影响数据库中的记录条数 int count = stmt.executeUpdate(sql); System.out.println(count == 1?"保存成功":"保存失败"); //5.结果处理器 } catch (SQLException e) { e.printStackTrace(); }finally { //6.关流 if (stmt !=null){ stmt.close(); } if (conn != null){ conn.close(); } } } }

//删除

package com.jdbc;

import java.sql.*;

public class del {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mysql://localhost:3306/test2";
        String username = "root";
        String password = "root";
        Connection conn = null;
        Statement stmt = null;

        try {
            //1.注册驱动

            Driver driver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(driver);
            //2.创建连接
            conn = DriverManager.getConnection(url,username,password);
            //3.获取数据库操作对象(Statement,专门执行SQL语句的)
            stmt = conn.createStatement();
            //4.执行SQL
            String sql = "delete from user where id = 2";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1?"删除成功":"删除失败");
            //5.结果处理

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //6.关流
            if (stmt !=null){
                stmt.close();
            }
            if (conn !=null){
                conn.close();
            }
        }
    }
}

//更改

package com.demo;

import java.sql.*;

public class delDBConn {
    public static void main(String[] args) {
        //定义四个属性 driver url username password
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/test2";
        String username = "root";
        String password = "root";
        //定义三个对象
        Connection conn = null;//连库对象
        Statement st = null;//Statement,专门执行SQL语句的
        ResultSet rs = null;//结果处理集对象

        try {
            //1.加载驱动
            Class.forName(driver);
            //2.连库
            conn = DriverManager.getConnection(url, username, password);
            //3.获取数据库操作对象
            st = conn.createStatement();
            //4.执行SQL
            String sql = "delete from user where id = 3";
            int count = st.executeUpdate(sql);
            System.out.println(count == 1 ? "删除成功!" : "删除失败!");
            //5.处理结果集

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            //6.关流
            try {
                if (st != null) {
                    st.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

//查询

package com.demo;

import java.sql.*;

public class findAllDBConn {
    public static void main(String[] args) {
        //定义四个属性 driver url username password
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/test2";
        String username = "root";
        String password = "root";
        //定义三个对象
        Connection conn = null;//连库对象
        Statement st = null;//Statement,专门执行SQL语句的
        ResultSet rs = null;//结果处理集对象

        try {
            //1.加载驱动
            Class.forName(driver);
            //2.连库
            conn = DriverManager.getConnection(url,username,password);
            //3.获取连接对象
            st = conn.createStatement();
            //4.执行SQL
            String sql = "select * from user";
            rs = st.executeQuery(sql);
            //5.结果处理集
            //如果查询多个使用,使用while循环进行所有数据获取
            //技巧:如果查询结果最多1条,使用  if(rs.next()) {  查询到了 } else {  没有数据 }
            while (rs.next()){
                String id = rs.getString(1);
                String user = rs.getString(2);
                String pwd = rs.getString(3);
                System.out.println(user+","+pwd+",");
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            //6.关流
                try {
                    if (rs !=null) {
                        rs.close();
                    }
                    if (st !=null) {
                        st.close();
                    }
                    if (conn !=null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
原文地址:https://www.cnblogs.com/ljy9/p/13946808.html