一、statement对象介绍  

  Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。
  Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。
  Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。

1.1、CRUD操作-create

  使用executeUpdate(String sql)方法完成数据添加操作,示例操作:

1 Statement st = conn.createStatement();
2 String sql = "insert into user(….) values(…..) ";
3 int num = st.executeUpdate(sql);
4 if(num>0){
5 System.out.println("插入成功!!!");
6 }

1.2、CRUD操作-update

  使用executeUpdate(String sql)方法完成数据修改操作,示例操作:

1 Statement st = conn.createStatement();
2 String sql = “update user set name=‘’ where name=‘’";
3 int num = st.executeUpdate(sql);
4 if(num>0){
5 System.out.println(“修改成功!!!");
6 }

1.3、CRUD操作-delete

  使用executeUpdate(String sql)方法完成数据删除操作,示例操作:

1 Statement st = conn.createStatement();
2 String sql = “delete from user where id=1;
3 int num = st.executeUpdate(sql);
4 if(num>0){
5 System.out.println(“删除成功!!!");
6 }

1.4、CRUD操作-read

  使用executeQuery(String sql)方法完成数据查询操作,示例操作:

1 Statement st = conn.createStatement();
2 String sql = “select * from user where id=1;
3 ResultSet rs = st.executeUpdate(sql);
4 while(rs.next()){
5 //根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
6 }

二、使用jdbc对数据库增删改查

2.1、搭建实验环境

  1、在mysql中创建一个库,并创建user表和插入表的数据。

  SQL脚本如下:

 1 create database jdbcStudy;
2
3 use jdbcStudy;
4
5 create table users(
6 id int primary key,
7 name varchar(40),
8 password varchar(40),
9 email varchar(60),
10 birthday date
11 );

  2、新建一个JavaWeb工程,并导入MySQL数据库驱动。

  

  3、在src目录下创建一个db.properties文件,如下图所示:

  

  在db.properties中编写MySQL数据库的连接信息,代码如下所示:

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/jdbcStudy
3 username=root
4 password=XDP

  4、编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接,代码如下:

 1 package me.gacl.utils;
2
3 import java.io.InputStream;
4 import java.sql.Connection;
5 import java.sql.DriverManager;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.sql.Statement;
9 import java.util.Properties;
10
11 public class JdbcUtils {
12
13 private static String driver = null;
14 private static String url = null;
15 private static String username = null;
16 private static String password = null;
17
18 static{
19 try{
20 //读取db.properties文件中的数据库连接信息
21 InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
22 Properties prop = new Properties();
23 prop.load(in);
24
25 //获取数据库连接驱动
26 driver = prop.getProperty("driver");
27 //获取数据库连接URL地址
28 url = prop.getProperty("url");
29 //获取数据库连接用户名
30 username = prop.getProperty("username");
31 //获取数据库连接密码
32 password = prop.getProperty("password");
33
34 //加载数据库驱动
35 Class.forName(driver);
36
37 }catch (Exception e) {
38 throw new ExceptionInInitializerError(e);
39 }
40 }
41
42 /**
43 * @Method: getConnection
44 * @Description: 获取数据库连接对象
45 * @Anthor:孤傲苍狼
46 *
47 * @return Connection数据库连接对象
48 * @throws SQLException
49 */
50 public static Connection getConnection() throws SQLException{
51 return DriverManager.getConnection(url, username,password);
52 }
53
54 /**
55 * @Method: release
56 * @Description: 释放资源,
57 * 要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
58 * @Anthor:孤傲苍狼
59 *
60 * @param conn
61 * @param st
62 * @param rs
63 */
64 public static void release(Connection conn,Statement st,ResultSet rs){
65 if(rs!=null){
66 try{
67 //关闭存储查询结果的ResultSet对象
68 rs.close();
69 }catch (Exception e) {
70 e.printStackTrace();
71 }
72 rs = null;
73 }
74 if(st!=null){
75 try{
76 //关闭负责执行SQL命令的Statement对象
77 st.close();
78 }catch (Exception e) {
79 e.printStackTrace();
80 }
81 }
82
83 if(conn!=null){
84 try{
85 //关闭Connection数据库连接对象
86 conn.close();
87 }catch (Exception e) {
88 e.printStackTrace();
89 }
90 }
91 }
92 }

2.2、使用statement对象完成对数据库的CRUD操作

  测试代码如下:

  1 package me.gacl.demo;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.Statement;
6 import me.gacl.utils.JdbcUtils;
7
8 import org.junit.Test;
9
10 /**
11 * @ClassName: JdbcCRUDByStatement
12 * @Description: 通过Statement对象完成对数据库的CRUD操作
13 * @author: 孤傲苍狼
14 * @date: 2014-9-15 下午11:22:12
15 *
16 */
17 public class JdbcCRUDByStatement {
18
19 @Test
20 public void insert(){
21 Connection conn = null;
22 Statement st = null;
23 ResultSet rs = null;
24 try{
25 //获取一个数据库连接
26 conn = JdbcUtils.getConnection();
27 //通过conn对象获取负责执行SQL命令的Statement对象
28 st = conn.createStatement();
29 //要执行的SQL命令
30 String sql = "insert into users(id,name,password,email,birthday) values(3,'白虎神皇','123','bhsh@sina.com','1980-09-09')";
31 //执行插入操作,executeUpdate方法返回成功的条数
32 int num = st.executeUpdate(sql);
33 if(num>0){
34 System.out.println("插入成功!!");
35 }
36
37 }catch (Exception e) {
38 e.printStackTrace();
39 }finally{
40 //SQL执行完成之后释放相关资源
41 JdbcUtils.release(conn, st, rs);
42 }
43 }
44
45 @Test
46 public void delete(){
47 Connection conn = null;
48 Statement st = null;
49 ResultSet rs = null;
50 try{
51 conn = JdbcUtils.getConnection();
52 String sql = "delete from users where id=3";
53 st = conn.createStatement();
54 int num = st.executeUpdate(sql);
55 if(num>0){
56 System.out.println("删除成功!!");
57 }
58 }catch (Exception e) {
59 e.printStackTrace();
60
61 }finally{
62 JdbcUtils.release(conn, st, rs);
63 }
64 }
65
66 @Test
67 public void update(){
68 Connection conn = null;
69 Statement st = null;
70 ResultSet rs = null;
71 try{
72 conn = JdbcUtils.getConnection();
73 String sql = "update users set name='孤傲苍狼',email='gacl@sina.com' where id=3";
74 st = conn.createStatement();
75 int num = st.executeUpdate(sql);
76 if(num>0){
77 System.out.println("更新成功!!");
78 }
79 }catch (Exception e) {
80 e.printStackTrace();
81
82 }finally{
83 JdbcUtils.release(conn, st, rs);
84 }
85 }
86
87 @Test
88 public void find(){
89 Connection conn = null;
90 Statement st = null;
91 ResultSet rs = null;
92 try{
93 conn = JdbcUtils.getConnection();
94 String sql = "select * from users where id=3";
95 st = conn.createStatement();
96 rs = st.executeQuery(sql);
97 if(rs.next()){
98 System.out.println(rs.getString("name"));
99 }
100 }catch (Exception e) {
101 e.printStackTrace();
102 }finally{
103 JdbcUtils.release(conn, st, rs);
104 }
105 }
106 }

三、PreparedStatement对象介绍

  PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。
  Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

3.1、使用PreparedStatement对象完成对数据库的CRUD操作

  测试代码如下:

  1 package me.gacl.demo;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import java.util.Date;
7 import me.gacl.utils.JdbcUtils;
8 import org.junit.Test;
9
10 /**
11 * @ClassName: JdbcCRUDByPreparedStatement
12 * @Description: 通过PreparedStatement对象完成对数据库的CRUD操作
13 * @author: 孤傲苍狼
14 * @date: 2014-9-15 下午11:21:42
15 *
16 */
17 public class JdbcCRUDByPreparedStatement {
18
19 @Test
20 public void insert(){
21 Connection conn = null;
22 PreparedStatement st = null;
23 ResultSet rs = null;
24 try{
25 //获取一个数据库连接
26 conn = JdbcUtils.getConnection();
27 //要执行的SQL命令,SQL中的参数使用?作为占位符
28 String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";
29 //通过conn对象获取负责执行SQL命令的prepareStatement对象
30 st = conn.prepareStatement(sql);
31 //为SQL语句中的参数赋值,注意,索引是从1开始的
32 /**
33 * SQL语句中各个字段的类型如下:
34 * +----------+-------------+
35 | Field | Type |
36 +----------+-------------+
37 | id | int(11) |
38 | name | varchar(40) |
39 | password | varchar(40) |
40 | email | varchar(60) |
41 | birthday | date |
42 +----------+-------------+
43 */
44 st.setInt(1, 1);//id是int类型的
45 st.setString(2, "白虎神皇");//name是varchar(字符串类型)
46 st.setString(3, "123");//password是varchar(字符串类型)
47 st.setString(4, "bhsh@sina.com");//email是varchar(字符串类型)
48 st.setDate(5, new java.sql.Date(new Date().getTime()));//birthday是date类型
49 //执行插入操作,executeUpdate方法返回成功的条数
50 int num = st.executeUpdate();
51 if(num>0){
52 System.out.println("插入成功!!");
53 }
54
55 }catch (Exception e) {
56 e.printStackTrace();
57 }finally{
58 //SQL执行完成之后释放相关资源
59 JdbcUtils.release(conn, st, rs);
60 }
61 }
62
63 @Test
64 public void delete(){
65 Connection conn = null;
66 PreparedStatement st = null;
67 ResultSet rs = null;
68 try{
69 conn = JdbcUtils.getConnection();
70 String sql = "delete from users where id=?";
71 st = conn.prepareStatement(sql);
72 st.setInt(1, 1);
73 int num = st.executeUpdate();
74 if(num>0){
75 System.out.println("删除成功!!");
76 }
77 }catch (Exception e) {
78 e.printStackTrace();
79 }finally{
80 JdbcUtils.release(conn, st, rs);
81 }
82 }
83
84 @Test
85 public void update(){
86 Connection conn = null;
87 PreparedStatement st = null;
88 ResultSet rs = null;
89 try{
90 conn = JdbcUtils.getConnection();
91 String sql = "update users set name=?,email=? where id=?";
92 st = conn.prepareStatement(sql);
93 st.setString(1, "gacl");
94 st.setString(2, "gacl@sina.com");
95 st.setInt(3, 2);
96 int num = st.executeUpdate();
97 if(num>0){
98 System.out.println("更新成功!!");
99 }
100 }catch (Exception e) {
101 e.printStackTrace();
102
103 }finally{
104 JdbcUtils.release(conn, st, rs);
105 }
106 }
107
108 @Test
109 public void find(){
110 Connection conn = null;
111 PreparedStatement st = null;
112 ResultSet rs = null;
113 try{
114 conn = JdbcUtils.getConnection();
115 String sql = "select * from users where id=?";
116 st = conn.prepareStatement(sql);
117 st.setInt(1, 1);
118 rs = st.executeQuery();
119 if(rs.next()){
120 System.out.println(rs.getString("name"));
121 }
122 }catch (Exception e) {
123
124 }finally{
125 JdbcUtils.release(conn, st, rs);
126 }
127 }
128 }

  以上就是使用JDBC对数据库进行CRUD的简单总结。

javaweb(三十三)——使用JDBC对数据库进行CRUD的更多相关文章

  1. javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  2. Java基础(三十三)JDBC(3)操作数据库

    一.添加数据 在SQL语句中,一条INSERT语句只能添加一条记录,因此分为几种情况进行添加数据操作. 1.添加一条记录 (1)如果只需要添加一条记录,通常情况下通过Statament实例完成. tr ...

  3. 十六:使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  4. JDBC(2):JDBC对数据库进行CRUD

    一. statement对象 JDBC程序中的Connection用于代表数据库的链接:Statement对象用于向数据库发送SQL语句:ResultSet用于代表Sql语句的执行结果 JDBC中的s ...

  5. Spring Boot教程(三十三)使用Redis数据库(1)

    Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, So ...

  6. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  7. JDBC操作数据库的三种方式比较

    JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...

  8. javaweb(三十四)——使用JDBC处理MySQL大数据

    一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...

  9. jdbc链接数据库的三种方式

    /** * jdbc连接数据库 * @author APPle * */ public class Demo1 { //连接数据库的URL private String url = "jdb ...

随机推荐

  1. Altium 技巧 记录

    1.隐藏全部网络,即隐藏全部的飞线,便于布局,在 PCB 编辑器下,选择工具→连接→显示或隐藏全部网络即可 2.元器件非常多时,模块化布局的小技巧,参考:Altium Designer(DXP)小技巧 ...

  2. Git IDEA Move or commit them before merge

    提交代码遇到这个问题. Move or commit them before merge 百度了一下都是在Gitbash 中敲命令. 在团队协作中 你总不能去敲命令吧 后来在组长的怂恿下,我删除了一个 ...

  3. Instruments Time profiler 调优APP 之图片解码

    以前闲时用instruments的Time profiler调试过APP,发现用tableView: cellForRowAtIndexPath: 中cell的图片设置耗时较多,之前改了一下,如下 d ...

  4. 《算法竞赛进阶指南》0x10 基本数据结构 Hash

    Hash的基本知识 字符串hash算法将字符串看成p进制数字,再将结果mod q例如:abcabcdefg 将字母转换位数字(1231234567)=(1*p9+2*p8+3*p7+1*p6+2*p5 ...

  5. #leetcode刷题之路25- k个一组翻转链表

    给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表.k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 :给定这个链表:1- ...

  6. CentOS6安装各种大数据软件 第五章:Kafka集群的配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  7. solve the promble of VMware Workstation Ubuntu18.04 ethernet interface losting

    $ ifconfig -aens33: flags=4098<BROADCAST,MULTICAST>  mtu 1500    ether 00:**:**:**:**:**  txqu ...

  8. linux静态IP最简配置

    vi /etc/sysconfig/network-scripts/ifcfg-xxx TYPE="Ethernet"BOOTPROTO="static"ONB ...

  9. JDK1.8降到1.7技巧

    前言: 最近部署一个产品,该产品不支持JDK1.8,碰巧我的机器安装的是1.8,这就需要降到1.7才能部署启动成功.那么我也是不赞成卸载1.8来安装1.7,因为很多时候可能需要1.8和1.7来回切换. ...

  10. sign

    sign字段构成:登录类型(2Bytes) + userid(不定长,最长10Bytes,用户id或设备id) + time(10Bytes) + token(32Bytes).其中:token = ...