JDBC编程步骤
JDBC编程步骤
JDBC编程大致按如下步骤进行:
(1)加载数据库驱动。通常我们使用Class类的forName静态方法来加载驱动。例如如下代码:
Class.forName(driverClass) driverClass就是数据库驱动类所对应的字符串
例如加载MySQL的驱动采用如下代码:
//加载MySQL驱动
Class.forName("com.mysql.jdbc.Driver");
而加载Oracle驱动则采用如下代码:
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
从上面代码中可以看出,加载驱动时并不是真正使用数据库的驱动类,只是使用数据库驱动类名的字符串而已。
(2)通过DriverManager获取数据库连接,DriverManager提供了如下方法:
//获取数据库连接
DriverManager.getConnection(String url,String user,String pass);
当使用DriverManager来获取数据库连接时,通常需要传入三个参数:数据库URL、登录数据库的用户和密码。这三个参数中用户名和密码通常由DBA(数据库管理员)分配。
数据库URL通常遵守如下写法:jdbc:subprotocol:other stuff
上面URL写法中jdbc是固定的,而subprotocol指定连接到特定数据库的驱动程序,而后面的other和stuff也是不固定的,不同数据库的URL写法可能存在较大差异。例如MySQL数据库URL写法如下:jdbc:mysql://hostname:port/databasename
3)通过Connection对象创建Statement对象,Connection对象创建Statement对象的方法有如下三个:
createStatement():创建基本的Statement对象。
preparedStatement(String sql):根据传入的SQL语句创建预编译的Statement对象。
prepareCall(String sql):根据传入的SQL语句创建CallableStatement对象。
(4)使用Statement对象执行SQL语句。所以Statement都要如下三个方法来执行SQL语句:
boolean execute(String sql) throws SQLException:可以执行任何SQL语句,但比较麻烦。
int executeUpdate(String sql) throws SQLException:主要用于执行DML和DDL语句。执行DML语句返回受SQL语句影响的行数,执行DDL语句返回0。
ResultSet executeQuery(String sql) throws SQLException:只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
(5)操作结果集。如果执行的SQL语句是查询语句,执行后返回代表查询结果的ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。ResultSet对象主要提供了两类方法:
一类:next、previous、first、last、beforeFirst、afterLast、absolute等移动记录指针的方法。
另一类:getXxx(),用于获取记录指针指定行,特定列的值。该方法既可以使用列索引作为参数,也可以使用列名作为参数。使用列索引作为参数性能更好,使用列名作为参数可读性更好。
(6)回收数据库资源,包括关闭ResultSet、Statement和Connection等资源。
下面程序简单示范了JDBC编程,并通过ResultSet获得结果集的过程。
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
public class ConnMySql
{
public static void main(String[] args) throws Exception
{
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.使用DriverManager获取数据库连接
//其中返回的Connection就代表了Java程序和数据库的连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/xyz","root","263928w");
//3.使用Connection来创建一个Statement对象
Statement stmt=conn.createStatement();
//4.执行SQL语句
ResultSet rs=stmt.executeQuery("select student_id as '学生号',student_name as '学生姓名',teacher_name as '教师姓名' from student_table2 s,"+"teacher_table2 t where t.teacher_id=s.java_teacher");
//ResultSet有系列的getXxx(列索引|列名),用于获取记录指针指向行特定列的值
//不断使用next将记录指针移动一行,如果依然指向有效行,则指针指向该行记录
while(rs.next())
{
System.out.println(rs.getInt(1)+"\t"
+rs.getString(2)+"\t"
+rs.getString(3));
}
//关闭数据库资源
if(rs!=null)
{
rs.close();
}
if(stmt!=null)
{
stmt.close();
}
if(conn!=null)
{
conn.close();
}
System.out.println("Hello World!");
}
}
转载于:https://blog.51cto.com/skyseas/1174665
相关文章:

(13)中值滤波和双边滤波
其实中值滤波,就是那九个数值,进行排序,选择中间的数值来代替那九个数的中间位置的值,然后再从左到右,从上到下,这样移动运算 下面是均值滤波和高斯滤波的基础知识 中值滤波基础知识 运用中值滤波&a…

贪心:Jump Game 跳跃游戏
一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是true或者false判断是否能够跳跃到…

MFC之按键消息(长按处理)
想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作。下面简单的实现左右按键界面更新数值加减。 1. 重载PreTranslateMessage(MSG* pMsg)函数,在函数中捕获键盘事件并处理响应: BOOL CEditTestD…

服务器oracle11g卸载,卸载Oracle11g步骤详解
卸载Oracle11g步骤详解用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下:1、 开始->设置->控制面板…

Fedora下配置网卡
第一次在fedora下配置静态网卡,首先去网络管理里面添加并设置网卡的IP,子网掩码和默认网关出口,然后保存即可, 也可以在 /etc/sysconfig/network-scripts/ifcfg-eth0 中直接添加这些信息,对应的为网卡的IP,…

echarts相关设置
1.显示隐藏工具栏 注释toolbox即可 /* toolbox: {show : true,feature : {dataView : {show: true, readOnly: false},magicType : {show: true, type: [line, bar]},restore : {show: true},saveAsImage : {show: true}}},*/ 2.鼠标划过数据显示对应的数据 tooltip : {trig…

贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)
一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少跳跃的次数以及跳跃过程的路径&…

ADO.NET事务
在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件、特性和COM运行库(位于System.EnterpriseServices命名空间中)进行事务处理。本文如题所示,介绍在这些传统事务处理方式中较为简单的“…

oracle表中怎么去重复,oracle去掉表重复数据
今天在做项目过程中,碰到数据库表存在重复记录,显示的时候需要去掉重复的数据。想了老半天,最终用rank() over (partition by 分组字段 order by 排序字段 顺序)解决了此问题。一、首先介绍下rank() over (partition by 分组字段 order by 排…

JavaIO操作(1)字节流和字符流-1
3.2、字节流和字符流(核心) 使用File类执行的所有操作都是针对于文件本身,但是却没有针对于文件的内容,而要进行文件内容操作就需要通过Java之中提供的两组类完成: 字节操作流(是在JDK 1.0的时候定义的&am…

7min到40s:SpringBoot 启动优化实践
然后重点排查这些阶段的代码。先看下。

SpringBoot系列教程之Bean之指定初始化顺序的若干姿势
之前介绍了@Order注解的常见错误理解,它并不能指定 bean 的加载顺序,那么问题来了,如果我需要指定 bean 的加载顺序,那应该怎么办呢?本文将介绍几种可行的方式来控制 bean 之间的加载顺序。

在Java中使用WebSocket
WebSocket是一种协议,用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接,这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发,并于2011年成为标准。

3种方案,模拟两个线程抢票
在多线程编程中,资源竞争是一个常见的问题。资源竞争发生在多个线程试图同时访问或修改共享资源时,可能导致数据不一致或其他并发问题。在模拟两个线程抢票的场景中,我们需要考虑如何公平地分配票,并确保每个线程都有机会成功获取票。本篇文章将通过三种方式来模拟两个线程抢票的过程,以展示不同的并发控制策略。使用 Synchronized 来确保一次只有一个线程可以访问票资源。使用 ReentrantLock 来实现线程间的协调。使用 Semaphore 来限制同时访问票的线程数量。

初级七 委托与事件
1.委托是一种类型,定义委托后想要实现他需要实例化,而事件其实就是委托的一个实例,加了event修饰; 委托实例化可以在 2.委托的作用:可以作为函数的参数传递; 无委托无异步; 委托主要是用来解耦 …

r-route 命令 显示/配置ip路由表
文章目录前言语法格式命令使用输出含义使用实例前言 route命令用于显示和配置IP路由表,在不同节点间的网络通信,想要实现同一局域网之间的通信就需要交换机,不同局域网之间的通信就需要路由器。而路由器的存在是为了提供NAT转换,…

suse oracle 12c安装,用半行代码实现在LINUX(SUSE/RH)下安装ORACLE 12C
最近新到单位的朋友总是抱怨在LINUX下安装ORACLE,实在是太麻烦了,而且这些步骤既不知是什么意思,也记不住;索性,我就分析了一下,经过实践,实现了只用半行代码(确切的说,只消4个字母)…

shell--数组的定义/访问/赋值/遍历
1 #!/bin/bash2 # 数组3 4 # 数组的定义5 a(0 1 2 3)6 # 数组元素的访问7 echo "a[0]:${a[0]}"8 # 数组的长度9 echo "length:${#a[*]}" 10 # 所有元素 11 echo "all element:${a[*]}" 12 # 删除某个元素 13 unset a[1] 14 echo "after uns…

四百元值不值——论小米2A与2S
作为一个米2用户,面对这手机市场极快的更新速度,有些跟不上速度。最近出了小米2A与2S,碰巧有人问值不值的问题,于是就小小的进行了一个研究,跟大家讨论一下。首先小米2A与2S在我看来就是2的翻版,现在小米的…

python复习冒泡排序
冒泡排序: 思路: 先找到最大值放到最右边: #encodingutf-8 a[1,9,2,8,3,6,4] print "a before change:",a for i in range(len(a)-1): if a[i] > a[i1]: a[i],a[i1] a[i1],a[i] print "a after change:",a 结果&…

linux 文件查找命令集:find,locate,wheres,which,type
文章目录前言find命令命令格式:常用选项:举例使用locate命令命令格式使用实例whereis命令使用过程:which命令type命令前言 在linux系统中一切皆文件,此时我们想要从海量的文件中快速定位中我们想要的文件来,需要指定的命令来操作…

oracle生成xml方法,oracle存储过程生成xml==转
1.创建如下存储过程,注意将其中location >d:\work之中的目录改为你本机的某个目录.create or replace procedure getXML(newContext_qry varchar2,rowSettag varchar2,rowTag varchar2,filename varchar2) is-- Input query string-- Input rowsetTag , the root…

打算看的书或正在看的书
打算看的书或正在看的书 《Data Structures and Algorithm Analysis in C》 正在看,这本书是在博客园上看到某个去google的大牛推荐的,的确,虽然数据结构,我已经很熟悉了,但是看这本书的时候,有一些细节我是…

Tutorial——使用Maven开发Cloud Driver
2019独角兽企业重金招聘Python工程师标准>>> Before You Start 开发之前,应有以下准备 Apache MavenCloudify调用云API的安全凭证,使用SSH访问你的机器,如果需要访问您的云的存储。 例如,通过以下步骤获得OpenStack的安…

[Machine Learning with Python] Data Visualization by Matplotlib Library
Before you can plot anything, you need to specify which backend Matplotlib should use. The simplest option is to use Jupyter’s magic command %matplotlib inline. This tells Jupyter to set up Matplotlib so it uses Jupyter’s own backend. Scatter Plot housin…

贪心:Burst Balloons 最少次数完成射击气球
已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓箭手,将全部气球打爆? 例如…

linux服务器加固的命令,Linux 服务器安全加固
一、summary随着互联网的发展,隐私以及安全被大家看的越来越重视,越来越多的重要交易正在通过网络完成,与此同时数据被损坏、截取和修改的风险也在增加。优秀的系统应当拥有完善的安全措施,应当足够坚固、能够抵抗来自Internet的侵…

devexpress toolbar 填充整行宽度
设置 bar 的 optionsBar.UseWholeRow True 然后可设置Bar 中 Item的右对齐属性。转载于:https://www.cnblogs.com/perpetual/p/3756101.html

【java】staitc
一、static变量 二、static方法 三、static代码块 四、static类:只能是内部类

002.Docker安装部署
一 docker安装-CentOS系统1.1 docker自动安装脚本 1 rootdocker:~# wget -qO- https://get.docker.com/ | sh2 或——3 rootdocker:~# curl -sSL https://get.docker.com/ | sh 注意:若出现以下错误,可使用yum解决依赖——Delta RPMs disabled because /…