4-4 JDBC基础

第1关:JDBC与数据库的连接
任务描述:

本关任务:使用jdbc连接数据库

相关知识:

DriverManager:此类管理数据库驱动程序列表。可在JDBC下识别某个子协议的第一个驱动程序,用于建立数据库连接。

Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。

Connection:此接口具有用于联系数据库的所有方法。 Connection对象表示通信上下文,即与数据库的所有通信仅通过连接对象。

加载注册驱动:

Java加载数据库驱动通常是使用Class类的静态方法forName(),语法格式如下: Class.forName(String driverManager)

示例:

try 
{
    Class.forName("com.mysql.jdbc.Driver" );
} 
catch (ClassNotFoundException e) 
{
    e.printStackTrace();
}
建立连接:

成功加载完数据库驱动后,就可以建立数据库的连接了,使用DriverManager的静态方法getConnection()来实现。如下:

Connection conn = DriverManager.getConnection(url, user, password);

url用于标识数据库的位置,通过url地址告诉JDBC程序连接信息。

user是建立的数据库的用户名。

passwrod是数据库的密码。

示例(本数据库的信息情况):

String url = "jdbc:mysql://localhost:3306/";
String user = "root";
String password = "123123";
释放资源:

Jdbc程序运行完后,切记要释放程序在运行过程中创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, StatementConnection对象。

特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。

Connection的使用原则是尽量晚创建,尽量早的释放。

为确保资源释放代码能运行,资源释放代码一定要放在finally语句中。

编程要求:

根据提示,在右侧编辑器补充代码: 加载驱动,连接数据库

测试说明:

平台会对你编写的代码进行测试:

测试输入:无;

预期输出:

Stuid INT(10)
name VARCHAR(20)
sex VARCHAR(4)
age INT(10)
数据库连接成功!

实现如下:

package JDBCcon;

import java.sql.*;

public class jdbccon 
{
    public static void getConn()
    {
        //forName加载驱动
        /********* Begin *********/
        try
        {
            Class.forName("com.mysql.cj.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }

        /********* End *********/
        Connection conn = null;
        Statement statement = null;

        // 定义连接信息, "root"和"123123"是针对MySQL设置了用户名(root)和密码(123123)的情况
        // localhost:3306是mysql服务器地址及端口。
        // /********* Begin *********/
        String URL = "jdbc:mysql://localhost:3306";
        String USER = "root";
        String PASSWORD = "123123";


        /********* End *********/
        try
        {
            //getConnection建立连接
            /********* Begin *********/
            conn = DriverManager.getConnection(URL, USER, PASSWORD);

            /********* End *********/
            statement = conn.createStatement();
            statement.executeUpdate("drop database if exists mysql1");
            statement.executeUpdate("create database mysql1");
            statement.executeUpdate("use mysql1");
            String sql = "create table student(" +
                    "Stuid int , " +
                    "name varchar(20), " +
                    "sex varchar(4), " +
                    "age int" +
                    ")";
            statement.executeUpdate(sql);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if(statement!=null)
                    statement.close();
                if(conn!=null)
                    conn.close();
            }
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
        }

    }
}
第2关:JDBC数据库和表的建立
任务描述:

本关任务:运用jdbc建立建立数据库和表。

相关知识

本关会用到的方法:

Connetion类主要用来链接数据库,常通过DriverManager.getConnection()来获取一个连接对象。

Statement对象用于执行sql语句,Statement的常用方法:executeUpdata()方法:运行增,删,改操作,返回更新的行数。

初始化对象:

ConnetionStatement两个对象进行初始化定义

Connection conn = null;
Statement statement = null;
创建数据库和表:

连接建立完毕后,就可以使用Connection接口的createStatement()方法来获取Statement对象;

statement = conn.createStatement();

并通过调用executeUpdate()方法来执行SQL语句。

statement.executeUpdate("sql语句");

需要执行的sql语句为(本关以Mysql为例):

//判断是否存在数据库mysql1
"drop database if exists mysql1"
//创建数据库mysql1
"create database mysql1"
//选择使用mysql
"use mysql1"  
//创建表student并创建表中数据
"create table student(" +
          "Stuid int , " +
    "name varchar(20), " +
      "sex varchar(4), " +
               "age int" +
                      ")";
编程要求

创建数据库mysql1

创建表student

student表结构为:

字段名 类型 备注 约束
id int 学生id 非空
name varchar(20) 学生姓名
sex varchar(4) 学生性别
age int 学生年龄
测试说明:

平台会对你编写的代码进行测试:

测试输入:无

预期输出:

Stuid INT(10)
name VARCHAR(20)
sex VARCHAR(4)
age INT(10)
数据库表搭建成功!

实现如下:

package JDBCbuild;

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

public class jdbcb 
{
    public static void build()
    {
        //初始化Connection Statement值
        /********* Begin *********/
        Connection conn = null;
        Statement statement = null;

        /********* End *********/
        try
        {
            conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/","root", "123123");
            /********* Begin *********/
            // 1. 执行SQL语句来创建数据库(如果数据库不存在)创建数据库 mysql1(如果不存在)
            String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS mysql1";
            statement = conn.createStatement();
            statement.execute(createDatabaseSQL);

            // 选择使用 mysql1 数据库
            statement.execute("USE mysql1");

            // 2. 执行SQL语句来创建表
            String createTableSQL = "CREATE TABLE student (" +
                    "Stuid INT(10), " +
                    "name VARCHAR(20), " +
                    "sex VARCHAR(4), " +
                    "age INT(10)" +
                    ")";
            statement.execute(createTableSQL);

            /********* End *********/
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if(statement!=null)
                    statement.close();
                if(conn!=null)
                    conn.close();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }
}
第3关:JDBC在表中增添数据
任务描述

本关任务:在建立的数据库表中减价数据。

相关知识

Connetion类主要用来链接数据库,常通过DriverManager.getConnection()来获取一个连接对象。

Statement的常用方法:executeUpdata()方法:运行增,删,改操作,返回更新的行数。

表中数据的添加

调用execute();执行sql语句来增添数据; 示例: statement.execute("sql语句");

sql增添语句

增添格式为: INSERT INTO '表名' VALUES ('数据',...,'数据'); 示例在student表中添加数据: statement.execute("INSERT INTO 'student' VALUES ('101', '张三', '男');");

编程要求

表中结构为:

字段名 类型 约束
no varchar(255) NULL
name varchar(255) NULL
password varchar(255) NULL
sex varchar(255) NULL
salary decimal(10,2) NULL

根据提示,在右侧编辑器补充代码,在student表中插入如下数据 no:11 name:张三 password:123 sex:男 salary:300.0 no:12 name:李四 password:123 sex:男 salary:80.0 no:21 name:王五 password:133 sex:女 salary:40.0

测试说明

平台会对你编写的代码进行测试:

测试输入:无;

预期输出:

no:11	name:张三	password:123	sex:男	salary:300.0
no:12	name:李四	password:123	sex:男	salary:80.0
no:21	name:王五	password:133	sex:女	salary:40.0
增添表数据成功!

实现如下:

package JDBCadd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.sql.ResultSet;

public class addbc 
{
    static final String url = "127.0.0.1:3306";
    static final java.util.Properties info = new Properties();
    static {
        info.put("user", "root");
        info.put("password", "123123");
        initTableData();
    }

    private static void initTableData() {
        Connection connection = null;
        Statement statement = null;
        //建立数据库
        try {
            connection = DriverManager.getConnection("jdbc:mysql://" + url + "/information_schema", info);
            Statement createStatement = connection.createStatement();
            createStatement.execute("drop database if exists tsgc");
            createStatement.execute("create database tsgc");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection = DriverManager.getConnection("jdbc:mysql://" + url + "/tsgc?useUnicode=true&characterEncoding=utf-8", info);
            //建立表
            statement = connection.createStatement();
            statement.execute("CREATE TABLE employee (no  varchar(255) NULL ,name  varchar(255) NULL ,password  varchar(255) NULL ,sex  varchar(255) NULL ,salary  decimal(10,2) NULL) DEFAULT CHARSET=utf8;");
            //在数据库的表中增添数据
            /********* Begin *********/

            // 建立表
            statement.execute("CREATE TABLE student (" +
                    "no VARCHAR(255), " +
                    "name VARCHAR(255), " +
                    "password VARCHAR(255), " +
                    "sex VARCHAR(255), " +
                    "salary DECIMAL(10,2)" +
                    ")  DEFAULT CHARSET=utf8;");

            // 插入数据
            statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('11', '张三', '123', '男', 300.0)");
            statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('12', '李四', '123', '男', 80.0)");
            statement.addBatch("INSERT INTO student (no, name, password, sex, salary) VALUES ('21', '王五', '133', '女', 40.0)");

            // 执行批处理
            statement.executeBatch();

                        // 查询数据并输出
            ResultSet resultSet = statement.executeQuery("SELECT * FROM student");
            while (resultSet.next())
            {
                System.out.print("no:"+ resultSet.getInt(1) +"\t");
                System.out.print("name:"+ resultSet.getString(2) +"\t");
                System.out.print("password:"+ resultSet.getString(3) +"\t");
                System.out.print("sex:"+ resultSet.getString(4) +"\t");
                System.out.println("salary:"+ resultSet.getDouble(5));
            }
            /********* End *********/
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}
第4关:JDBC表中数据的删除
任务描述

本关任务:在建立的数据库表中减价数据。

相关知识

Connetion类主要用来链接数据库,常通过DriverManager.getConnection()来获取一个连接对象。

Statement的常用方法:executeUpdata()方法:运行增,删,改操作,返回更新的行数。

perparedStatement();对象用于执行带或不带参数的预编译SQL语句;

setString();`:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);
表中数据的删除

1,调用PerparedStatement();执行sql语句来删除数据; 示例: PreparedStatement pstmt = connection.prepareStatement(sql); 然后定义sql语句, String sql ="sql语句";

2,sql删除语句 删除格式为: delete from +表名 where +元组中属性 =? 示例在表employee中删除数据: delete from employee where no = ?

3,调用setString();设置?(问号为需要填充的内容)。

示例:

//将第一处的?设置成21。
pstmt.setString(1,"21");
编程要求

表中结构为:

字段名 类型 约束
no varchar(255) NULL
name varchar(255) NULL
password varchar(255) NULL
sex varchar(255) NULL
salary decimal(10,2) NULL

根据提示,在右侧编辑器补充代码,在student表中删除no为21的所有数据。

测试说明

平台会对你编写的代码进行测试:

测试输入:无;

预期输出:

no:11	name:张三	password:123	sex:男	salary:300.0
no:12	name:李四	password:123	sex:男	salary:80.0
删除表数据成功!

实现如下:

package JDBCdelete;

import java.sql.*;
import java.util.Properties;

public class deletebc {

    static final String url = "127.0.0.1:3306";
    static final java.util.Properties info = new Properties();
    static {
        info.put("user", "root");
        info.put("password", "123123");
        initTableData();
    }

    private static void initTableData() {
        Connection connection = null;
        Statement statement = null;
        //建立数据库
        try {
            connection = DriverManager.getConnection("jdbc:mysql://" + url + "/information_schema", info);
            Statement createStatement = connection.createStatement();
            createStatement.execute("drop database if exists tsgc");
            createStatement.execute("create database tsgc");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection = DriverManager.getConnection("jdbc:mysql://" + url + "/tsgc?useUnicode=true&characterEncoding=utf-8", info);
            //建立表
            statement = connection.createStatement();
            statement.execute("CREATE TABLE employee (no  varchar(255) NULL ,name  varchar(255) NULL ,password  varchar(255) NULL ,sex  varchar(255) NULL ,salary  decimal(10,2) NULL) DEFAULT CHARSET=utf8;");
            //在数据库的表中增添数据

            statement.execute("INSERT INTO `employee` VALUES ('11', '张三', '123', '男', '300.00');");
            statement.execute("INSERT INTO `employee` VALUES ('12', '李四', '123', '男', '80.00');");
            statement.execute("INSERT INTO `employee` VALUES ('21', '王五', '133', '女', '40.00');");
            //在数据库的表中删除数据
            /********* Begin *********/

            // 删除数据
            statement.execute("DELETE FROM employee WHERE no = '21'");

            // // 查询数据并输出
            // ResultSet resultSet = statement.executeQuery("SELECT * FROM employee");
            // while (resultSet.next())
            // {
            //     System.out.print("no:"+ resultSet.getInt(1) +"\t");
            //     System.out.print("name:"+ resultSet.getString(2) +"\t");
            //     System.out.print("password:"+ resultSet.getString(3) +"\t");
            //     System.out.print("sex:"+ resultSet.getString(4) +"\t");
            //     System.out.println("salary:"+ resultSet.getDouble(5));
            // }

            /********* end *********/
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}
第5关:JDBC在表中查询数据
任务描述

本关任务:在建立的数据库表中减价数据。

相关知识

Connetion类主要用来链接数据库,常通过DriverManager.getConnection()来获取一个连接对象。

Statement的常用方法:executeUpdata()方法:运行增,删,改操作,返回更新的行数。

PerparedStatement对象用于执行带或不带参数的预编译SQL语句;

setString(); `:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);

ResultSet(); : 执行executeQuery()方法后返回的结果集.

表中数据的查找

1,调用PerparedStatement();执行sql语句来选择表;

示例(选择employee表):

statement = conn.prepareStatement("select * from employee ");

2,调用executeQuery()方法后返回的结果集.

示例:

ResultSet resultSet = statement.executeQuery();

3,调用next();遍历返还的结果集。得到结果集里面的数据。 示例

while (resultSet.next())
{
//取结果集中的数据,getInt取数字,getString取字符串。
int no = resultSet.getInt(1);
}

4,打印数据。

编程要求

表中结构为:

字段名 类型 约束
no varchar(255) NULL
name varchar(255) NULL
password varchar(255) NULL
sex varchar(255) NULL
salary decimal(10,2) NULL

根据提示,在右侧编辑器补充代码,查询并打印出表中所有数据。

注意:输出打印时用\t分隔。

测试说明

平台会对你编写的代码进行测试:

测试输入:无;

预期输出:

no:11	name:张三	password:123	sex:男	salary:300.0
no:12	name:李四	password:123	sex:男	salary:80.0
no:21	name:王五	password:133	sex:女	salary:40.0
查询全部表数据成功!

实现如下:

package JDBCseek;

import java.sql.*;

public class jdbcseek {
    public static void updateDB() {


        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        String url = "jdbc:mysql://localhost:3306/tsgc";
        String user = "root";
        String password = "123123";
        Connection conn= null;
        PreparedStatement statement = null;
        try{
            conn = DriverManager.getConnection (url,user,password );
            /********* Begin *********/
            //执行sql语句选择表
            statement = conn.prepareStatement("SELECT * FROM employee");
            ResultSet resultSet = statement.executeQuery();

            //遍历表,在控制到打印出全部数据
            while (resultSet.next())
            {
                System.out.print("no:"+ resultSet.getInt(1) +"\t");
                System.out.print("name:"+ resultSet.getString(2) +"\t");
                System.out.print("password:"+ resultSet.getString(3) +"\t");
                System.out.print("sex:"+ resultSet.getString(4) +"\t");
                System.out.println("salary:"+ resultSet.getDouble(5));
            }
            
             /********* End *********/
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally
        {
            try {
                if(statement!=null)
                    statement.close();
                if(conn!=null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}
第6关:JDBC表中数据的更新
任务描述

本关任务:在建立的数据库表中减价数据。

相关知识

Connetion类主要用来链接数据库,常通过

DriverManager.getConnection()来获取一个连接对象。

Statement的常用方法:executeUpdata()方法:运行增,删,改操作,返回更新的行数。

PerparedStatement对象用于执行带或不带参数的预编译SQL语句;

setString();`:设置代替sql语句中的问号? 格式为`void setString(int parameterIndex,String x);
表中数据的更新

调用prepareStatement();执行sql语句来更新数据; 示例: statement=conn.prepareStatement("sql语句");

sql更新语句

更新格式为: update 表名 set 更新元组中属性 = ‘更新属性值’ where元组中属性 =‘属性值’ 示例在employee表中更新数据: //更新元组中属性为‘男’的密码为222; update employee set password = '222' where sex ='男' 最后调用 executeUpdate();完成更新。

编程要求

表中结构为:

字段名 类型 约束
no varchar(255) NULL
name varchar(255) NULL
password varchar(255) NULL
sex varchar(255) NULL
salary decimal(10,2) NULL

根据提示,在右侧编辑器补充代码,在student表中更新性别sex员工的密码password222

测试说明

平台会对你编写的代码进行测试:

测试输入:无;

预期输出:

no:11	name:张三	password:222	sex:男	salary:300.0
no:12	name:李四	password:222	sex:男	salary:80.0
no:21	name:王五	password:133	sex:女	salary:40.0
更新表数据成功!

实现如下:

package JDBCupdata;

import java.sql.*;

public class jdbcupdata {
    public static void updateDB() {


        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        String url = "jdbc:mysql://localhost:3306/tsgc";
        String user = "root";
        String password = "123123";
        Connection conn= null;
        PreparedStatement statement = null;

        try {
            conn = DriverManager.getConnection (url,user,password );
            /********* Begin *********/
            //调用方法执行sql语句
            statement = conn.prepareStatement("UPDATE employee SET password = '222' WHERE sex = '男'");

            //更新数据
            statement.executeUpdate();


            /********* End *********/
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try{
            conn = DriverManager.getConnection (url,user,password );

            //执行sql语句选择表
            statement = conn.prepareStatement("select * from employee ");
            ResultSet resultSet = statement.executeQuery();
            //遍历表,在控制到打印出全部数据
            while (resultSet.next()) {
                int no = resultSet.getInt(1);
                String name = resultSet.getString(2);
                int pw = resultSet.getInt(3);
                String sex = resultSet.getString(4);
                double salary = resultSet.getDouble(5);
                System.out.println("no:"+no + "\t" +"name:"+ name + "\t"+ "password:"+pw+ "\t"+"sex:"+sex + "\t" +"salary:"+ salary);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        finally
        {
            try {
                if(statement!=null)
                    statement.close();
                if(conn!=null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

}

先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!

你可能感兴趣的:(Java工具类,java)