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/


上图中,选择“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完整版代码如下:(注释很详细)
package com.vae.jdbc; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class JdbcTest { /**
* @param args
*/ //数据库连接地址
private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
//用户名
public final static String USERNAME = "root";
//密码
public final static String PASSWORD = "smyh";
//加载的驱动程序类(这个类就在我们导入的jar包中)
public final static String DRIVER = "com.mysql.jdbc.Driver"; public static void main(String[] args) {
// TODO Auto-generated method stub
insert();
} //方法:插入数据
public static void insert(){
try {
//1、加载数据库驱动程序
Class.forName(DRIVER); //2、获取数据库连接
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); //3、构造SQL语句(插入具体的数据)
String sql = "insert into person(name,age,description)values('生命壹号',22,'学到哪里,我的博客就写到哪里')"; //4、构造一个Statement实例(用来发送SQL语句的载体)
Statement state = connection.createStatement(); //5、执行SQL语句(其实是向数据库中发送sql语句)
state.executeUpdate(sql); //6、关闭连接(释放资源)
state.close();
connection.close(); System.out.println("insert success"); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} } }
注意程序在导包时,导入的是下面的这些包:

代码解释:
15行的url代表连接接数据库的地址。命名格式统一如下:url = "jdbc:mysql://ip地址:端口号/数据库名字"。如果是本机的话,IP地址可以写成localhost。
17行、19行:指的是数据库的用户名和密码。如果输入错误,会报错如下:

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

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

终于实现了Java代码与数据库之间的联系,任务完成。
3、实现更新操作:
和上面的插入操作相比,只是sql语句不一样而已(因为插入数据和更新数据其实都是更新嘛)
步骤如下:
更新操作的方法如下:(代码解释请参照上面的代码就懂了)
//方法:更新数据
public static void update(){
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "update person set age=24 where id=1";
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("update success");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
核心代码是第6行,我们将之前的22岁改为24岁。程序运行后,数据库里也会对应的进行更新。
4、实现删除操作
同样的道理,和上面的插入操作相比,只是sql语句不一样而已(因为插入数据、更新数据、删除数据其实都是更新嘛)
删除操作的方法如下:
//方法:删除操作
public static void delete(){
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "delete from person where id=1";
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("delete success");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
核心代码是第06行和第08行。
5、代码优化(写成工具类):将字段换成变量
我们上面的增删该的操作都是直接在sql里面放入具体的参数,但是有可能这种参数是外面传进来的,所以一种更方便的写法是把参数换成变量,我们以插入操作为例:
//方法:插入数据(代码优化)
public static void insert2(){
String name = "生命贰号";
int age = 22;
String description = "哈哈,我是优化之后的代码哦";
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
//拼接SQL语句
String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')"; //注意拼接的格式
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("success."); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} }
核心代码是第10行,这里的sql语句是以变量的形式出现的,符合工具类的特性,注意它拼接的格式哦~~~来把它拆开再仔细瞧一瞧:
String sql = "insert into person(name,age,description)values(' "+name+" ', "+age+", ' "+description+" ')";
运行之后,效果如下:

其实这种拼接的方式很不好:既麻烦又不安全。数据库的查询操作以及详细解释将在下篇文章中学习到,加油!!!
哦,对了,最后再贴一下上方所有代码的完整版:
package com.vae.jdbc; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class JdbcTest { /**
* @param args
*/ //数据库连接地址
private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
//用户名
public final static String USERNAME = "root";
//密码
public final static String PASSWORD = "smyh";
//加载的驱动程序类(这个类就在我们导入的jar包中)
public final static String DRIVER = "com.mysql.jdbc.Driver"; public static void main(String[] args) {
// TODO Auto-generated method stub
insert();
//update();
//delete();
//insert2();
} //方法:插入数据
public static void insert(){
try {
//1、加载数据库驱动程序
Class.forName(DRIVER); //2、获取数据库连接
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); //3、构造SQL语句(插入具体的数据)
String sql = "insert into person(name,age,description)values('生命壹号',22,'学到哪里,我的博客就写到哪里')"; //4、构造一个Statement实例(用来发送SQL语句的载体)
Statement state = connection.createStatement(); //5、执行SQL语句(其实是向数据库中发送sql语句)
state.executeUpdate(sql); //6、关闭连接(释放资源)
state.close();
connection.close(); System.out.println("insert success"); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} } //方法:插入数据(代码优化)
public static void insert2(){
String name = "生命贰号";
int age = 22;
String description = "哈哈,我是优化之后的代码哦";
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
//拼接SQL语句
String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')"; //注意拼接的格式
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("success."); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} } //方法:更新数据
public static void update(){
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "update person set age=24 where id=1";
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("update success");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} //方法:删除操作
public static void delete(){
try {
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "delete from person where id=1";
Statement state = connection.createStatement();
state.executeUpdate(sql);
state.close();
connection.close();
System.out.println("delete success");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} }
MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作的更多相关文章
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html
- C#学习笔记(6)——大项目增删改查
说明(2017-5-28 11:35:39): 1. 需要注意的地方很多 2. 首先是连接字符串str要直接写在类里面,不然每个按钮里面都要写一遍. 3. 查询用到sqlDataReader等三个方法 ...
- mysql的学习笔记(八)
1.存储引擎(表类型) mysql将数据以不同的技术存储在文件(内存)中,这种技术称为存储引擎.每一种存储引擎使用不同的存储机制,索引技巧,锁定水平,提供广泛且不同的功能. mysql支持的存储引擎 ...
- MYSQL进阶学习笔记八:MySQL MyISAM的表锁!(视频序号:进阶_18-20)
知识点九:MySQL MyISAM表锁(共享读锁)(18) 为什么会有锁: 打个比方,我们到淘宝买一件商品,商品只有一件库存,这时候如果还有另外一个人也在买,那么如何解决是你买到还是另一个人买到的问题 ...
- MYSQL初级学习笔记八:MySQL中常用的函数!(视频序号:初级_45-50)
知识点十:MySQL中的函数(45-50) 数学函数: 名称 描述 CEIL() 进一取整 FLOOR() 舍一取整 MOD 取余数(取摸) POWER() 幂运算 ROUND() 四舍五入 TRUN ...
- Spring学习笔记:声明式事务管理增删改查业务
一.关于是事务 以方法为单位,进行事务控制:抛出异常,事务回滚. 最小的执行单位为方法.决定执行成败是通过是否抛出异常来判断的,抛出异常即执行失败 二.声明式事务: 声明式事务(declarative ...
- Java学习笔记34(sql基础 :增删改查1)
create database qy97;/*创建数据库*/ use qy97; /*使用数据库 use 数据库名*/ show tables; /*查看所有的表*/ select database( ...
- MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动
回到目录 上一讲说了MongoDB官方驱动的查询功能,这回说一下官方驱动的增删改功能,驱动在升级为2.0后,相应的insert,update和delete都只有了异步版本(或者叫并行版本),这当然也是 ...
随机推荐
- java获取class所在jar
在类库的开发过程中,有些时候为了self-contain的原因,我们希望所有的资源都打包在jar中,但是有些工具好像无法支持从classpasth直接获取比如velocity的模板合并,此时我们就知道 ...
- oschina github使用指南
我的github仓库开通,https://git.oschina.net/zhjh256. 1.打开https://git.oschina.net/signup,没有账号的话,则新创建账号. 2.从h ...
- C# Sqlite 序列
sqlite 不能直接创建自定义函数,不能像 sql server中那样方便创建并使用.不过我们照样可以创建它,创建成功后,我们照样可以随心所欲(比如批量更新等) 序列是一个数据库中很常用的操作,在其 ...
- JS数组的forEach方法(兼容所有浏览器)
//->自己在内置类的原型上扩展一个myForEach来处理forEach不兼容的问题//callBack:回调函数,遍历数组中的一项,就要执行一次callBack//context:改变cal ...
- 使用一般处理程序HTTPHandler下载文件
一般来说我们可以用HTTPHandler来处理一些简单的逻辑,比如验证码.下载文件等. 以下载word文档为例讲解一下如何在HHTPHandler中下载文件,不限于word文档,如果下载其他文件,需要 ...
- 利用ng-click、ng-switch和click-class制作切换的tabl
效果如下图,当分别点击1,2,3时,下面的不同颜色的div会切换 <html ng-app> <head> <title></title> <sc ...
- android 数据文件存取至储存卡
来自:http://blog.csdn.net/jianghuiquan/article/details/8569233 <?xml version="1.0" encodi ...
- 解决Sharepoint每天第一次打开速度慢的问题
每天第一次打开Sharepoint的网站会非常慢,下面是解决这个问题的几个方法. 添加crl.microsoft.com到Hosts文件,IP地址指向服务器本机. 允许服务器直接连接到crl.micr ...
- 招聘一个靠谱的 iOS程序员
一个靠谱的简历 简历非常能反映一个人的性格和水平,相比于你在学校获得多少奖项,工作经历.项目经 历.熟悉的技术等更加关键,如果还有博客和一些 Github 上的项目,好感度++,但记得在去面试前收拾下 ...
- Swift 设计指南之 编程规范
基本准则 用法一目了然是你设计时最重要的目的. 方法和属性这样的实体只声明一次,却会被重复调用.因此你在设计 API 时应尽可能使其简单明了.当评估某个设计时,只阅读声明往往是不够的,有时还需要检查它 ...