开发者社区> 技术小阿哥> 正文

JDBC实现数据库的增删改查

简介:
+关注继续查看

本文主要讲解: 

  1. JDBC的概念

  2. JDBC的原理

  3. 创建用于测试的数据库

  4. 使用JDBC操作数据库

  5. 思考与分析


  1. 关于JDBC

JDBCJava DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java APIJDBCJava访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。

2.JDBC原理:

JDBC说白了就是一套AIP接口,一套规范.然后各大数据库的驱动都实现并遵守了这套接口.


  3.准备数据库:


mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test              |

+--------------------+

4 rows in set (0.00 sec)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql> create database xinsz08;
  
mysql> use xinsz08;
Database changed
mysql> create table category(
   -> cid int primary key auto_increment,
   -> cname varchar(100)
   -> );
Query OK, 0 rows affected (0.36 sec)
  
mysql>
mysql> set names gbk;
Query OK, 0 rows affected (0.27 sec)
  
mysql> INSERT INTO category (cname)VALUES('家电');
Query OK, 1 row affected (0.08 sec)
  
mysql> INSERT INTO category (cname)VALUES('服饰');
Query OK, 1 row affected (0.03 sec)
  
mysql> INSERT INTO category (cname)VALUES('化妆品');
Query OK, 1 row affected (0.03 sec)
  
mysql> select from category;
+-----+--------+
| cid | cname  |
+-----+--------+
|   1| 家电      |
|   2| 服饰       |
|   3| 化妆品     |
+-----+--------+
rows in set (0.00 sec)

 

     导入驱动包

创建lib目录,用于存放当前项目需要的所有jar包

选择jar包,右键执行build path / Add to Build Path


 

4.使用JDBC实现数据库增删改查的步骤:

  • 注册驱动

  • 获得连接

  • 获得执行sql语句的对象

  • 执行SQL语句,并返回结果

  • 处理结果

  • 释放资源

 

 

代码示例1:

使用JDBC插入数据到数据库:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package cn.xinsz.boke01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
publicclass demo1 {
    publicstaticvoid main(String[] args) throws Exception {
       Class.forName("com.mysql.jdbc.Driver");
       String url = "jdbc:mysql://localhost:3306/xinsz08";
       String user="root";
       String password="root";
       Connection conn = DriverManager.getConnection(url,user,password);
        
       Statement stat = conn.createStatement();
       String sql="insert into category (cname)values('玩具')";
       introw=stat.executeUpdate(sql);
       System.out.println(row);
       stat.close();
       conn.close();
    }
  
}

 

mysql> select * from category;

+-----+--------+

| cid | cname  |

+-----+--------+

|   1| 家电      |

|   2| 服饰       |

|   3| 化妆品     |

|   4| 玩具       |

|

+-----+--------+

6 rows in set (0.00 sec)

 可以看到插入了一行数据,第4条.


 

使用JDBC对数据进行查看和删除

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package cn.xinsz.boke01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
  
publicclass demo1 {
    publicstaticvoid main(String[] args) throws Exception {
       Class.forName("com.mysql.jdbc.Driver");
       String url = "jdbc:mysql://localhost:3306/xinsz08";
       String user = "root";
       String password = "root";
       Connection conn = DriverManager.getConnection(url, user, password);
  
       Statement stat = conn.createStatement();
       select(stat);//查询数据
       delete(stat);
       stat.close();
       conn.close();
    }
  
    privatestaticvoid delete(Statement stat) throws Exception {
       String sql= "delete from  category where cid=5";
       introw = stat.executeUpdate(sql);
       if(row>0){
           System.out.println("执行成功");
       }else{
           System.out.println("执行失败");
       }             
        
    }
  
    privatestaticvoid select(Statement stat) throws Exception {
       String sql = "select * from category";
       ResultSet rs = stat.executeQuery(sql);
       while (rs.next()) {
  
           System.out.println(rs.getString("cid") + rs.getString("cname"));
  
       }
       rs.close();
  
    }
  
}

代码分析:

使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。

Connection

java.sql 
接口 Connection


public interface Connectionextends Wrapper

 

与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getMetaData 方法获得的。

 

  PreparedStatemnt

java.sql 
接口 PreparedStatement


public interface PreparedStatementextends Statement

表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

 

常用方法

 boolean  execute()

          在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。

 ResultSet  executeQuery()

          在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

 int  executeUpdate()

          在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。

  

  ResultSet  

java.sql 
接口 ResultSet


public interface ResultSetextends Wrapper

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。


5.思考与分析


  • 每次SQL的操作都需要建立和关闭连接,我们是否可以考虑对JDBC进行封装?

    答:事实上很多对JDBC的封装已经这么做了.

  • JDBC在整个java开发中占了很大的比重,是务必要学会的内容,当然原生态JDBC的增删改查比较简单.


    总结: JDBC技术,可以理解为是一门基于Java语言的数据库连接与开发技术,通过使用JDBC技术,可以利用Java语言更好更快地进行数据库开发。


          特别喜欢李小龙的一句话:"我不怕会一万种招式的对手,我怕把一种招式练一万遍的对手."



本文转自 维度2018 51CTO博客,原文链接:http://blog.51cto.com/xinsz08/1947929,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
实战教学--怎样提高报表呈现的性能?
实战教学--怎样提高报表呈现的性能?
6 0
Java从入门到精通十(java异常)
异常的引入 整理一下自己的思路,java为什么要引入异常处理机制?当然啊!因为程序运行可能会出错,在某一步骤出现问题,所以这个时候需要抛出异常,需要告诉用户是哪里是出现了问题。简单来说,这样说其实是没有问题的。但是还是没有进行严格的思考。程序运行中出现问题不一定就是异常所导致的(Exception),也有可能是错误(Error),不错,这是两个继承自Throwable类,但是其实在程序处理方面有很大的区别,所以我们区分看待。
11 0
超级详细的数据库中的事务机制学习笔记
事务的英文是transaction,从英文中你也能看出来它是进行一次处理的基本单元,要么完全执行,要么都不执行。 事务的特性:ACID……
8 0
Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器
Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器
8 0
一篇文章搞懂数据仓库:数据治理(目的、方法、流程)
一篇文章搞懂数据仓库:数据治理(目的、方法、流程)
7 0
mysql的学习笔记(阶段二)
- mysql函数,控制流函数 SELECT IF ( 5 > 3, "大于", "小于" );-- 5 >3 显示大于,否则就是小于 SELECT *, IF ( score >= 85, '优秀', '及格' ) flag FROM score;
6 0
从生活聊用消息队列的利弊
小豆跟心仪的开发部妹子,每天一起上下班,聊的很嗨。终于等到了情人节,然后小豆写了一封表白情书,没好意思直接送过,中间托二狗帮个忙送过去……
7 0
MySQL下count(*)、count(1)和count(字段)的查询效率比较
COUNT(*)和COUNT(1)都是对所有结果进行计算。如果有WHERE子句,则是对所有符合筛选条件的数据行进行统计;如果没有WHERE子句,则是对数据表的数据行数进行统计。
10 0
【LeetCode】23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表……
7 0
13692
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载