• JDBC增删改数据库的操作


    JDBC入门及简单增删改数据库的操作

    一、JDBC的引入                                                                                                                    

    1、JDBC的概念

    JDBC:Java Database Connection,表示数据库连接(任何数据库都支持JDBC的连接),是一个独立于特定数据库管理系统、通用的sql数据库存取和操作的公共接口。它是java中专门提供的一组用于操作数据库的标准,所有的数据库生产商如果要是想为java提供支持,则必须支持此标准。既然是标准的话,所以说JDBC实际上是一套访问数据库的接口

    2、常用操作类/接口

    Connection接口、Statement接口、PreapredStatement接口、ResultSet接口、CallableStatement接口、DriverManager类。

    3、JDBC应用步骤

    • 1.注册加载一个驱动
    • 2.创建数据库连接(Connection)
    • 3.构造SQL语句
    • 4.创建statement,发送sql语句
    • 5.执行sql语句
    • 6.处理sql结果
    • 7.关闭statement和connection 

                                                                                    

    二、驱动程序下载:                                                                                                                 

    根据上一段的定义,我们明白了,java定义JDBC接口,数据库来实现这个接口。不同的厂商对JDBC有不同的实现,所以厂商要提供自己数据库的驱动,让应用程序来访问。而应用程序则只通过自己的一套JDBC接口来访问就行了,然后驱动程序来实现这个接口,从而让驱动来调用数据库。所以我们终于明白了这句话:驱动程序由数据库提供商提供下载

    在Java中,驱动程序是以jar包的形式提供的,MySQL驱动程序的下载地址:http://dev.mysql.com/downloads/

    be475b59-0e1a-4ce9-a806-c3b2b3b0719f

    01bc3198-0a7c-4e3a-b682-0ddecf5639b6

    上图中,选择“Connector/J”的版本进行下载,弹出下一个界面,让我们选择平台来下载:如果选择windows平台,界面如下:

    567dacb7-1537-472d-9b92-137ce68deede

    如果选择跨平台,界面会变成下面的这个样子:

    9bfcd9a3-a4ee-456f-b3cf-c50e6819da3d

    上图中,第一个版本是Linux平台的压缩包,第二个是Windows平台中的压缩包,那我们选择上图中的红框部分进行下载:

    796b6f84-526a-40b4-a7b8-1fda0983d1c6

    上图中,不用注册,直接下载。下载完成后,解压:

    68e84edc-f208-42d5-98de-72fdf568cf7d

    上图中,红框部分的mysql-connector-java-5.1.33-bin.jar就是我们所需要的包。

    三、JDBC实现简单增删改操作                                                                                                      

    • 1、JDBC操作前的准备工作
    • 2、实现插入操作
    • 3、实现更新操作
    • 4、实现删除操作
    • 5、代码优化(写成工具类):将字段换成变量

    1、JDBC操作前的准备工作:

    首先创建数据库表:person。字段:id,name,age,description。建表的命令如下:

    CREATE TABLE person(
    id int primary key auto_increment,
    name varchar(20),
    age int(2),
    description varchar(100)
    );

    创建的空表如下:

    60645d0c-10b1-49c7-855f-37cf8297ac91

    紧接着导入数据库驱动包:

    打开eclipse,新建Java工程JDBC01,然后在根目录下新建一个文件夹libs:

    0060622e-8f67-44bf-92a1-b8210147f4b3

    然后复制之前下载的驱动包mysql-connector-java-5.1.33-bin.jar,粘贴到libs目录下,然后到了最关键的一步:将该Java包添加到工程的Build path中,操作如下图:

    96965c34-a0e5-4198-8286-0aed4e7bddac

    如果生效之后,就会多出一个文件出来:(下图中的箭头处)

    eaacea91-5cb9-4023-993b-e336f5c103fb

    2、实现插入操作:

    步骤如下:

    • 1、加载数据库驱动程序:Class.forName(驱动程序类);
    • 2、通过用户名密码和连接地址url获取数据库连接对象:Connection connnction = DriverManager.getConnection(连接地址url,用户名,密码)。每个数据库都有指定的url,同一格式如下:jdbc:mysql://ip地址:端口号/数据库名字。
    • 3、构造插入的SQL语句。注:在Java程序当中,SQL语句是以字符串的形式使用,程序不认识此SQL语句,传到数据库后让数据库来识别。
    • 4、创建Statement实例:Statement stmt = connction.createStatement()。Statement是用来发送SQL语句的载体,因为Java代码无法解析,要交给数据库来解析。
    • 5、执行插入SQL语句:stmt.executeUpdate(sql)。这里的执行是发送SQL语句。返回值为int类型,表示有多少条记录被更新了。
    • 6、关闭连接:stmt.close()、 connnction.close()。关闭是为了释放资源。

    注:这个步骤是通俗的用法,可以当做模板来用。我们来举个例子。

    在工程文件中新建一个java类,作为主程序:

    821f8625-b677-4617-a8ae-da9d93852d75

    JdbcTest.java完整版代码如下:(注释很详细)

    复制代码
     1 package com.vae.jdbc;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 public class JdbcTest {
     9 
    10     /**
    11      * @param args
    12      */
    13     
    14     //数据库连接地址
    15     private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
    16     //用户名
    17     public final static String USERNAME = "root";
    18     //密码
    19     public final static String PASSWORD = "smyh";
    20     //加载的驱动程序类(这个类就在我们导入的jar包中)
    21     public final static String DRIVER = "com.mysql.jdbc.Driver";
    22     
    23     public static void main(String[] args) {
    24         // TODO Auto-generated method stub
    25         insert();
    26     }    
    27     
    28     
    29     //方法:插入数据
    30     public static void insert(){
    31         try {
    32             //1、加载数据库驱动程序
    33             Class.forName(DRIVER);
    34             
    35             //2、获取数据库连接
    36             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    37             
    38             //3、构造SQL语句(插入具体的数据)
    39             String sql = "insert into person(name,age,description)values('生命壹号',22,'学到哪里,我的博客就写到哪里')";
    40             
    41             //4、构造一个Statement实例(用来发送SQL语句的载体)
    42             Statement state = connection.createStatement();
    43             
    44             //5、执行SQL语句(其实是向数据库中发送sql语句)
    45             state.executeUpdate(sql);
    46             
    47             //6、关闭连接(释放资源)
    48             state.close();
    49             connection.close();
    50             
    51             System.out.println("insert success");
    52             
    53             
    54         } catch (ClassNotFoundException e) {
    55             e.printStackTrace();
    56         } catch (SQLException e) {
    57             e.printStackTrace();
    58         }
    59         
    60     }    
    61  
    62 }
    复制代码

    注意程序在导包时,导入的是下面的这些包:

    59f98e98-25e7-4692-bc00-9eaa3e58c995

    代码解释:

    15行的url代表连接接数据库的地址。命名格式统一如下:url = "jdbc:mysql://ip地址:端口号/数据库名字"。如果是本机的话,IP地址可以写成localhost。

    17行、19行:指的是数据库的用户名和密码。如果输入错误,会报错如下:

    27b8873b-2305-4025-bd10-22f98a66d57c

    21行:我们所加载的驱动程序类的名字是:com.mysql.jdbc.Driver,其实它就指的就是jar包中的com.mysql/jdbc/Driver.class文件。

    程序运行成功后,后台会输出:

    16bae3e3-831e-4881-9e73-cecebd987187

    我们再去数据库看一下,发现数据真的填充进去了:

    1220663a-58dd-44c2-a82e-8e6ff2e63caf

    终于实现了Java代码与数据库之间的联系,任务完成。

    3、实现更新操作:

    和上面的插入操作相比,只是sql语句不一样而已(因为插入数据和更新数据其实都是更新嘛)

    步骤如下:

    更新操作的方法如下:(代码解释请参照上面的代码就懂了)

    复制代码
     1   //方法:更新数据
     2     public static void update(){
     3         try {
     4             Class.forName(DRIVER);
     5             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     6             String sql = "update person set age=24 where id=1";
     7             Statement state = connection.createStatement();
     8             state.executeUpdate(sql);
     9             state.close();
    10             connection.close();
    11             System.out.println("update success");
    12         } catch (ClassNotFoundException e) {
    13             e.printStackTrace();
    14         } catch (SQLException e) {
    15             e.printStackTrace();
    16         }
    17     }
    复制代码

    核心代码是第6行,我们将之前的22岁改为24岁。程序运行后,数据库里也会对应的进行更新。

    4、实现删除操作

    同样的道理,和上面的插入操作相比,只是sql语句不一样而已(因为插入数据、更新数据、删除数据其实都是更新嘛)

    删除操作的方法如下:

    复制代码
     1     //方法:删除操作
     2     public static void delete(){
     3         try {
     4             Class.forName(DRIVER);
     5             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     6             String sql = "delete from person where id=1";
     7             Statement state = connection.createStatement();
     8             state.executeUpdate(sql);
     9             state.close();
    10             connection.close();
    11             System.out.println("delete success");
    12         } catch (ClassNotFoundException e) {
    13             e.printStackTrace();
    14         } catch (SQLException e) {
    15             e.printStackTrace();
    16         }
    17     }
    复制代码

    核心代码是第06行和第08行。

    5、代码优化(写成工具类):将字段换成变量

    我们上面的增删该的操作都是直接在sql里面放入具体的参数,但是有可能这种参数是外面传进来的,所以一种更方便的写法是把参数换成变量,我们以插入操作为例:

    复制代码
     1     //方法:插入数据(代码优化)
     2     public static void insert2(){
     3         String name = "生命贰号";
     4         int age  = 22;
     5         String description = "哈哈,我是优化之后的代码哦";
     6         try {
     7             Class.forName(DRIVER);
     8             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     9             //拼接SQL语句
    10             String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')";  //注意拼接的格式
    11             Statement state = connection.createStatement();
    12             state.executeUpdate(sql);
    13             state.close();
    14             connection.close();
    15             System.out.println("success.");
    16             
    17             
    18         } catch (ClassNotFoundException e) {
    19             e.printStackTrace();
    20         } catch (SQLException e) {
    21             e.printStackTrace();
    22         }
    23         
    24     }
    复制代码

    核心代码是第10行,这里的sql语句是以变量的形式出现的,符合工具类的特性,注意它拼接的格式哦~~~来把它拆开再仔细瞧一瞧:

    String sql = "insert into person(name,age,description)values(' "+name+" ',      "+age+",    '  "+description+"  ')";

    运行之后,效果如下:

    97f4bb25-e4b6-460a-94bb-26350c8a73ea

    其实这种拼接的方式很不好:既麻烦又不安全。数据库的查询操作以及详细解释将在下篇文章中学习到,加油!!!

    哦,对了,最后再贴一下上方所有代码的完整版:

    复制代码
      1 package com.vae.jdbc;
      2 
      3 import java.sql.Connection;
      4 import java.sql.DriverManager;
      5 import java.sql.SQLException;
      6 import java.sql.Statement;
      7 
      8 public class JdbcTest {
      9 
     10     /**
     11      * @param args
     12      */
     13     
     14     //数据库连接地址
     15     private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
     16     //用户名
     17     public final static String USERNAME = "root";
     18     //密码
     19     public final static String PASSWORD = "smyh";
     20     //加载的驱动程序类(这个类就在我们导入的jar包中)
     21     public final static String DRIVER = "com.mysql.jdbc.Driver";
     22     
     23     public static void main(String[] args) {
     24         // TODO Auto-generated method stub
     25         insert();
     26         //update();
     27         //delete();
     28         //insert2();
     29     }   
     30     
     31     
     32     //方法:插入数据
     33     public static void insert(){
     34         try {
     35             //1、加载数据库驱动程序
     36             Class.forName(DRIVER);
     37             
     38             //2、获取数据库连接
     39             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     40             
     41             //3、构造SQL语句(插入具体的数据)
     42             String sql = "insert into person(name,age,description)values('生命壹号',22,'学到哪里,我的博客就写到哪里')";
     43             
     44             //4、构造一个Statement实例(用来发送SQL语句的载体)
     45             Statement state = connection.createStatement();
     46             
     47             //5、执行SQL语句(其实是向数据库中发送sql语句)
     48             state.executeUpdate(sql);
     49             
     50             //6、关闭连接(释放资源)
     51             state.close();
     52             connection.close();
     53             
     54             System.out.println("insert success");
     55             
     56             
     57         } catch (ClassNotFoundException e) {
     58             e.printStackTrace();
     59         } catch (SQLException e) {
     60             e.printStackTrace();
     61         }
     62         
     63     }
     64     
     65 
     66     //方法:插入数据(代码优化)
     67     public static void insert2(){
     68         String name = "生命贰号";
     69         int age  = 22;
     70         String description = "哈哈,我是优化之后的代码哦";
     71         try {
     72             Class.forName(DRIVER);
     73             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     74             //拼接SQL语句
     75             String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')";  //注意拼接的格式
     76             Statement state = connection.createStatement();
     77             state.executeUpdate(sql);
     78             state.close();
     79             connection.close();
     80             System.out.println("success.");
     81             
     82             
     83         } catch (ClassNotFoundException e) {
     84             e.printStackTrace();
     85         } catch (SQLException e) {
     86             e.printStackTrace();
     87         }
     88         
     89     }
     90     
     91 
     92   //方法:更新数据
     93     public static void update(){
     94         try {
     95             Class.forName(DRIVER);
     96             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
     97             String sql = "update person set age=24 where id=1";
     98             Statement state = connection.createStatement();
     99             state.executeUpdate(sql);
    100             state.close();
    101             connection.close();
    102             System.out.println("update success");
    103         } catch (ClassNotFoundException e) {
    104             e.printStackTrace();
    105         } catch (SQLException e) {
    106             e.printStackTrace();
    107         }
    108     }
    109     
    110     
    111     //方法:删除操作
    112     public static void delete(){
    113         try {
    114             Class.forName(DRIVER);
    115             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    116             String sql = "delete from person where id=1";
    117             Statement state = connection.createStatement();
    118             state.executeUpdate(sql);
    119             state.close();
    120             connection.close();
    121             System.out.println("delete success");
    122         } catch (ClassNotFoundException e) {
    123             e.printStackTrace();
    124         } catch (SQLException e) {
    125             e.printStackTrace();
    126         }
    127     }    
    128 
    129 }
    复制代码
  • 相关阅读:
    python 得到列表的第二大的元素
    PHP 打印输出数组内容及结构 print_r 与 var_dump 函数
    php 数组元素加法
    PHP unlink() 函数
    PHP 文件创建/写入
    PHP chmod() 函数
    php 压缩文件
    php 每隔30s在页面显示字符串
    PHP basename() 函数
    PHP rtrim() 函数
  • 原文地址:https://www.cnblogs.com/timssd/p/4796092.html
Copyright © 2020-2023  润新知