初始JDBC编程

我发现要学习一个新的知识,首先要搞懂它是什么?能做什么?怎么去做?学习了数据库的DDL、DML了的基本操作,备操作的数据库要和java代码产生连接,我们就必须学会JDBC编程。

目录

java中JDBC的定义

JDBC使用步骤

创建数据库连接Connection

创建操作命令Statement

使用操作命令来执行SQL

处理结果集ResultSet

释放资源

完整代码

JDBC常用接口和类 

数据库连接Connection

Statement对象

ResultSet对象 

 


java中JDBC的定义

JDBC,即Java Database Connectivityjava数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个APIjava.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供 了一个标准的API,可以为多种关系数据库提供统一访问。即JDBC是一个连接java程序的数据库的一个标准,在代码中的表现是一组 interface。

JDBC使用步骤

创建数据库连接Connection

1.加载JDBC驱动

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

这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法区,并执行该类的静态方法块、静态属性。

2.创建数据库连接:

        String url = "jdbc:mysql://127.0.0.1:3306/people?                
                      useSSL=false&characterEncoding=utf8";
        String user = "root"; // 连接 mysql 的用户名
        String password = ""; // 连接 mysql 的密码
        Connection connection = DriverManager.getConnection(
                url, user, password
        );

jdbc:mysql:// :在jdbc中使用mysql的固定协议
127.0.0.1:本机的IP地址(localhost or 本地的域名)
3306:mysql服务器的标准端口
people:默认的数据库
useSSl:是否使用安全的套接字
characterEncoding=utf8:采用utf-8编码方式进行编码

因此可以得出其固定格式是:

jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值

创建操作命令Statement

Statement statement = connection.createStatement();

使用操作命令来执行SQL

增:

        String sql = "INSERT INTO users (id, name) VALUES (1, '东东')";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句

删:

        String sql = "DELETE FROM users WHERE id = 1";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句

改:

        String sql = "UPDATE users SET name = '西西' WHERE id = 1";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句

查:

        {
            Statement statement = connection.createStatement();
            String sql = "SELECT id, name FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            List<String> nameList = new ArrayList<>();
            while (resultSet.next()) {
                int id = resultSet.getInt(1);   // 下标是从 1 开始的,不是从 0 开始的
                int id = resultSet.getInt("id"); // 通过字段名称获取
                // 结果集马上需要销毁,所以通过 List 保存结果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

            resultSet.close();

            statement.close();
        }

-需要拿到结果集对象,从结果集对象中遍历获取数据,销毁结果集对象[反向销毁]

-不同的类型调用不同的方法

                int r = resultSet.getInt();
                long r = resultSet.getLong();
                String r = resultSet.getString();

-获取属性的两种方法

                int id = resultSet.getInt(1);
                String name = resultSet.getString("name");

注意下标是从1开始的。 

处理结果集ResultSet

            while (resultSet.next()) {
                int id = resultSet.getInt(1);   // 下标是从 1 开始的,不是从 0 开始的
                int id = resultSet.getInt("id"); // 通过字段名称获取
                // 结果集马上需要销毁,所以通过 List 保存结果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

next()的作用:1.返回false或true 2.判断是否还有数据 

释放资源

            resultSet.close();

            statement.close();

完整代码

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        String url = "jdbc:mysql://127.0.0.1:3306/people?useSSL=false&characterEncoding=utf8";
        String user = "root"; // 连接 mysql 的用户名
        String password = ""; // 连接 mysql 的密码
        Connection connection = DriverManager.getConnection(
                url, user, password
        );

        /*
        Statement statement = connection.createStatement();
        String sql = "INSERT INTO users (id, name) VALUES (1, '东东') ,(2,'西西'),(3,'南南'),(4,'北北')";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
        statement.close();
        */


      /*
        String sql = "UPDATE users SET name = '西西' WHERE id = 1";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
        */

      /*
        String sql = "DELETE FROM users WHERE id = 1";
        statement.executeUpdate(sql); // 通过 statement 对象来执行 SQL 语句
        */

        {
            Statement statement = connection.createStatement();
            String sql = "SELECT id, name FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            List<String> nameList = new ArrayList<>();
            while (resultSet.next()) {
                /*
                需要不同的类型,调用不同的方法
                int r = resultSet.getInt();
                long r = resultSet.getLong();
                String r = resultSet.getString();
                */
                /*
                int id = resultSet.getInt(1);   // 下标是从 1 开始的,不是从 0 开始的
                int id = resultSet.getInt("id"); // 通过字段名称获取
                 */
                int id = resultSet.getInt(1);
                String name = resultSet.getString("name");
                // 结果集马上需要销毁,所以通过 List 保存结果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

            resultSet.close();

            statement.close();
        }


    }
}

一般来说Driver注册只需要一次,Connection也只需要一次(特殊情况需要多个连接)。获取多个Statement,每个statement最好只执行一条sql。 

JDBC常用接口和类 

数据库连接Connection

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

一种是通过DriverManager(驱动管理类)的静态方法获取:

//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接
Connectionconnection=DriverManager.getConnection(url);

一种是通过DataSource(数据源)对象获取:

DataSourceds=newMysqlDataSource();
((MysqlDataSource)ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource)ds).setUser("root");
((MysqlDataSource)ds).setPassword("root");
Connectionconnection=ds.getConnection();
以上两种方式的区别是:
1. DriverManager 来获取的Connection连接 ,是 无法重复利用 的,每次使用完以后释放资源时,通过
connection.close() 都是关闭物理连接。
2. DataSource 提供连接池的支持。 连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用
的,每次使用完数据库连接, 释放资源调用connection.close()都是将Conncetion连接对象回收。

Statement对象

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象。

Statement:用于执行不带参数的简单sql语句

PreparedStatement:用于执行带或者不带参数的sql语句,sql语句会预编译在数据库系统,执行速度快于Statement对象

CallableStatement :用于执行数据库存储过程的调用 

主要的方法:

executeQuery() 方法执行后返回单个结果集的,通常用于select语句

executeUpdate() 方法返回值是一个整数,指示受影响的行数,通常用于 update insert delete 语句

ResultSet对象 

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。

ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

 

发布了52 篇原创文章 · 获赞 17 · 访问量 5476

猜你喜欢

转载自blog.csdn.net/qq_41185460/article/details/104248546