JDBC API访问数据库的基本步骤。
JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包。
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
任何一个Java应用程序使用JDBC API访问数据库,其基本工作可以分为5个步骤:
(1)加载JDBC驱动程序;
(2)建立数据库连接;
(3)创建操作数据库SQL的Statement、PreparedStatement或CallableStatement对象;
(4)执行语句并分析执行结果;
(5)关闭连接。
1、加载JDBC驱动程序
利用Class类的方法forName(String driverName)加载JDBC驱动,不同的数据库的JDBC驱动名称不同,MySql的驱动类名为com.mysql.jdbc.Driver。
Class forName("com.mysql.jdbc.Driver");
//注意:
//在Java Web应用开发中,如果要访问数据库,首先应将加载数据库的JDBC驱动程序(jar包)复制到Web应用程序的WEB-INF\lib 目录下,这样Web应用程序才能正常地通过JDBC接口访问数据库。
2、建立数据库的连接
利用DriverManager类的方法getConnection()获得与特定数据库的连接实例(Connection实例)。例如创建一个连接的本地MySQL数据库userdb Connection对象,假设该数据库的用户名为root、密码为passwd,代码如下:
//第一种方式:
String url = "jdbc:mysql://localhost:3306/userdb?user = root & password = passwd";
Connection con = DriverManager.getConnection(url);
//第二种方式:
private static final String url = "jdbc:mysql://localhost:3306/userdb";
private static final String user = "root";
private static final String password = "111111";
protected static Connection con = null;
con = DriverManager.getConnection(url , user , password);
3、进行数据库操作
对数据库的操作依赖于SQL语句,JDBC依据SQL语句的类型不同提供了三种执行SQL的对象,即Statement,PreparedStatement和CallableStatement。
1)Statement对象执行静态SQL语句
Statement对象用于执行不含参数的静态SQL语句,JDBC利用Connection实例的createStatement()方法创建一个Statement实例,通过Statement实例的execute()方法(不常用)、executeQuerry()方法(select)或者executeUpdate()方法(insert、update或 delete)等执行SQL语句。例如查询数据 表tb_users中的所有记录:
//创建Statement对象,其中con为Connection对象
Statement statement = con.createStatement();
//使用executeQuery()方法执行SELECT语句,该方法的返回值为ResultSet类型
ResultSet rs = statement.executeQuerry(select*fron tb_users);
再如,删除数据表tb_users中的fd_username 为Allen的记录:
//创建Statement对象,其中con为Connection对象
Statement statement = con.createStatement();
//使用executeUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,返回 int 类型
int result = 0;
result = statement.executeUpdate("delete from tb_users where fd_username = 'Allen' ");
2)PreparedStatement 执行动态SQL语句
PreparedStatement用于执行含有动态的SQL语句,动态SQL语句是指在程序运行时能动态地为SQL语句的参数赋值,增加了程序的灵活性。PreparedStatement 对象由Connection 实例的 preparedStatement(String sql)方法构建。
PreparedStatement 接口也有executeQuery()和executeUpdate()方法,但这两个方法都不带参数。该接口提供了setXxx(int paramIndex , xxx var)方法为动态的SQL语句中的参数赋值。这里仍以上面的SQL操作为例说明PreparedStatement 对象 的创建和相关方法的使用。
// 声明动态SQL ,参数使用?占位符表示
String sqlSelect = "select * from tb_users where fd_username = ?";
//创建PreparedStatement 对象psQuery,其中con为Connection对象
PreparedStatement PSQuery = con. preparedStatement(sqlSelect);
/*为动态SQL语句中的参数赋值,由于fd_username为Sting类型,故使用setString()方法为参数赋值,1代表动态SQL语句中的第一个问题(第一个问号处值)*/
psQuery.setString(1,"Allen");
String sqlDelete = "delete from tb_users where fd_username = ?";
//创建PreparedStatement 对象 psUpdate ,其中con为Connection对象
PreparedStatement psUpdate = con.preparedStatement(sqlDelete);
//使用executeUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,这里列举的是 删除
ResultSet result = psUpdate.executeUpdate();
4、对执行结果进行分析处理
1)分析查询结果集 ResultSet
在执行SELECT语句后必然产生一个ResultSet结果集实例,对结果集进行分析与处理是应用程序的最终目标,可以使用循环遍历结果集中的每一行记录,使用getXxx()方法获取遍历记录行指定列的数据。
//查询tb_users表中记录的用户名和性别
ResultSet rs = statement.executeQuerry("select fd_username , fd_gender from tb_users");
//使用next() 方法判断结果集是否有下一行,从而遍历结果集中的所有记录行
while(rs.next()){
//获取遍历记录行中列名fd_username的对应值
String username = rs.getString("fd_username");
//获取遍历记录行中第二列的对应值
String gender = rs.getString(2);
System.out.println("用户名:"+ username + ",性别:"+ gender);
2)分析执行结果
对于INSERT、UPDATE、DELETE甚至是SQL DLL语句,一般由executeUpdate()方法执行且返回值为int 类型,表示受影响的记录行数,如返回值大于0表示该SQL语句成功执行。
int result = 0;
String sql = "delete from tb_users where fd_username = 'Allen' ";
// execteUpdate()方法执行INSERT、UPDATE、DELETE等SQL语句,返回int类型
result = statement.executeUpdate(sql);
//分析执行结果
if(result > 0){
System.out.println("删除成功!");
else
System.out.println("删除失败!");
5、关闭JDBC相关对象
应用程序在对数据库操作完成以后,要把使用的所有JDBC对象全部关闭,以释放JDBC资源,关闭顺序和声明顺序正好相反。
(1)关闭结果集ResultSet 对象;
(2)关闭Statement、PreparedStatement对象;
(3)关闭连接对象
//关闭结果集rs
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭Statement对象statement
if (statement!= null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭连接对象 con
if (con!= null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Java应用程序用过JDBC操作5个基本步骤。首先加载JDBC驱动,使用DriverManage对象创建Connection实例与制定的数据库建立连接;
然后使用Connection实例的createStatement()方法创建Statement实例(也可以创建PreparedStatement和CallableStatement对象),
并利用Statement实例的executeQuery()方法执行INSERT、UPDATE、DELETE等语句,并通过分析与处理执行结果实现应用程序的具体功能,
最后务必关闭与数据库之间的连接。
JDBC API访问数据库的基本步骤。的更多相关文章
- 通过JDBC API访问数据库的基本步骤
1.获取要访问的数据库的JDBC驱动程序的类库文件,把它放到classpath中. 2.在程序中加载并注册JDBC驱动程序.例如,以下代码用于加载并注册MySQL驱动程序: //加载MySQL Dri ...
- JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)
* 感谢DT课堂颜群老师的视频讲解(讲的十分仔细,文末有视频链接) import java.sql.Connection; import java.sql.DriverManager; import ...
- C++中使用ODBC API访问数据库例程
使用ODBC API访问数据库简单流程,供参考使用: ODBC API 123456789101112131415161718192021222324252627282930313233343536 ...
- 2017.11.12 web中JDBC 方式访问数据库的技术
JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...
- JDBC访问数据库的基本步骤是什么?
1.加载(注册)数据库驱动(到JVM) 2.建立(获取)数据库连接. 3.创建(获取)数据库操作对象. 4.定义操作的SQL语句. 5.执行数据库操作. 6.获取并操作结果集. 7.关闭对象,回收数据 ...
- JDBC访问数据库的基本步骤
加载驱动 通过DriverManager对象获取连接对象Connection 通过连接对象获取会话 通过会话进行数据的增删改查,封装对象 关闭资源
- JSP中使用JDBC连接MySQL数据库的详细步骤
1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. ...
- LUA利用第三方API访问数据库
===========数据库访问--第三方 http { upstream backend { drizzle_server 192.168.4.119:3306 protocol=mysql dbn ...
- Windows下使用ODBC API访问数据库之关键
本文采用SQL2005 + VS2008环境,以ODBC API方式成功连接数据库. 1.SQL安装和环境配置 这部分网上随便搜一下都有很多资料,而且很容易就可以配置成功. 注意的关键点: SA账号配 ...
随机推荐
- Python常用库整理
Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...
- 看电视剧<潜伏>有感
前几天看了老电视剧-潜伏,有一些感慨. 一,立场和真相都不重要,形式才是最重要的. 二.历史在不断的轮回中. 好汉历经千辛万苦杀掉了为害一方的恶霸,好汉的威望达到了顶峰,自然的成了村庄的守护者和掌控者 ...
- java使用Callable创建又返回值的线程
并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...
- RocketMQ高性能原理(pushConsumer,CommitLog,ZeroCopy)
1. Rocketmq消费模型(实时性) 常见的数据同步方式有这几种: push:producer发送消息后,broker马上把消息投递给consumer.这种方式好在实时性比较高,但是会增加brok ...
- C++ 大数运算(加减乘除取模)
加法:(字符串模拟小学加法) string add(string s1, string s2) { int len1 = s1.length(), len2 = s2.length(); ; '); ...
- redis 学习导航
一.redis学习流程 二.redis官方网址: 官方网址:https://redis.io/ 三.redis简介 1. redis是一个基于内存,单线程的key-value的非关系型数据库,整个数据 ...
- react中父组件给子组件传值
子组件 state = { msg: 'a' } render(){ return<h1>{this.state.msg}</h1> } setInfo = (val)=> ...
- Linux常用命令及Shell的简单介绍
一.linux命令 1.查看指令的参数搭配: man 指令名称 2.基础指令 ls 列出当前目录下的所有文档的名称(文档指的是文件和文件夹) 常用参数搭配: ls -l 列出文档详细信息 l ...
- Codeforces 981 共同点路径覆盖树构造 BFS/DP书架&最大值
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- Django学习系列5:为视图编写单元测试
打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...