zoukankan      html  css  js  c++  java
  • MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作

    【声明】 

    欢迎转载,但请保留文章原始出处→_→ 

    生命壹号:http://www.cnblogs.com/smyhvae/

    文章来源:http://www.cnblogs.com/smyhvae/p/4050825.html

     

    【正文】                                                                                                                                             

    一、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 }
  • 相关阅读:
    LeetCode "Median of Two Sorted Arrays"
    LeetCode "Distinct Subsequences"
    LeetCode "Permutation Sequence"

    LeetCode "Linked List Cycle II"
    LeetCode "Best Time to Buy and Sell Stock III"
    LeetCode "4Sum"
    LeetCode "3Sum closest"
    LeetCode "3Sum"
    LeetCode "Container With Most Water"
  • 原文地址:https://www.cnblogs.com/qianguyihao/p/4050825.html
Copyright © 2011-2022 走看看