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/

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

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

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

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

上图中,红框部分的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)
);

创建的空表如下:

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

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

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

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

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类,作为主程序:

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 }

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

代码解释:

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

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

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

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

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

终于实现了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+"  ')";

运行之后,效果如下:

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

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

  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 }

JDBC增删改数据库的操作的更多相关文章

  1. MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. 使用原生JDBC方式对数据库进行操作

    使用原生JDBC方式对数据库进行操作,包括六个步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM.可以通过java.lang.Class类的静态方法forNa ...

  3. JDBC增删改查,PreparedStatement和Statement的区别

    此篇是在上一篇的基础上使用PreparedStatement对象来实现JDBC增删改查的 具体工具类JDBCTools和实现类和配置文件在上一篇Statement对象实现的时候有写. 上一篇地址htt ...

  4. legend3---14、所有增删改的前置操作可以是什么

    legend3---14.所有增删改的前置操作可以是什么 一.总结 一句话总结: 先查询数据有没有,这样既起到了服务端验证的功能,也避免了很多增删改可能的错误 1.用户收藏视频,收藏课程有必要建立用户 ...

  5. mysql增删改查相关操作

    mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...

  6. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  7. ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)

    ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...

  8. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作

    必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...

  9. jdbc 增删改查以及遇见的 数据库报错Can't get hostname for your address如何解决

    最近开始复习以前学过的JDBC今天肝了一晚上 来睡睡回笼觉,长话短说 我们现在开始. 我们先写一个获取数据库连接的jdbc封装类 以后可以用 如果不是maven环境的话在src文件下新建一个db.pr ...

随机推荐

  1. javascript笔记整理(对象基础)

    一.名词解释 1.基于对象(一切皆对象,以对象的概念来编程) 2.面向对象编程(Object Oriented Programming,OOP) A.对象(JavaScript 中的所有事物都是对象) ...

  2. Python笔记之面向对象

    1.类和对象 #create a class class fruit: def say(self): print "hello, python" if __name__ == &q ...

  3. Android原生APP内分享

    Android原生APP内分享,可实现数据分享以及assets文件夹分享及私有文件分享 项目地址:https://github.com/json-pu/AndroidAppShare.git

  4. 基于visual Studio2013解决C语言竞赛题之1058打印数字

       题目 解决代码及点评 /************************************************************************/ /* 58 ...

  5. Servlet的学习(二)

    本篇接上一篇<Servlet的学习(一)>,讲述如何利用MyEclipse来创建web工程, 同时讲述如何在MyEclipse中配置Tomcat服务器. 在MyEclipse中,新建“We ...

  6. Tomcat详细用法学习(五)

    本篇接上一篇<Tomcat详细用法学习(四)>,主要讲解Tomcat服务器的管理平台 我们可能会将很多web应用交给Tomcat,那么Tomcat服务器就要对我们这些载入的web应用进行管 ...

  7. QNX---Interrupt vector numbers(原创!!!)

    Interrupt intr Description 0 A clock that runs at the resolution set by ClockPeriod() 1 Keyboard 2 S ...

  8. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  9. Js三级联动菜单

    效果演示: <SCRIPT LANGUAGE="JavaScript"> <!-- function CreateSelect(_FormName,_SName, ...

  10. TPL异步并行编程之取消任务

    TPL异步并行编程之简单使用 在上篇随笔里面说明了Task的使用,仅仅是简单使用,有时候把一个任务交给Task去执行,但是呢还是要管理下,比如说:我要叫这个任务停止了,不做了,任务取消了,或者超时了 ...