JDBC连接MySQL数据库(一)——数据库的基本连接
JDBC的概念
在使用之前我们先了解一下JDBC的概念, JDBC的全称是数据库连接(Java Database Connectivity),它是一套用于执行SQL语句时的API,应用程序可以通过这套API连接到关系型数据库,并且使用SQL语句来完成数据库中的查询,添加,更改,删除等操作.。
不同类型的数据库内部处理数据的方式也是不同的,如果直接用数据库厂商提供的方法来建立访问数据,应用程序的可移植性就会变得非常差,如果某个用户在当前的程序中使用的是MySQL的数据库,如果换成Oracle的数据库这样需要改动大量的代码,有了JDBC这样的情况就不存在了,因为JDBC 要求数据库的厂商按照统一的要求来提供数据库的驱动,这就使代码的通用性更强.
由上图看出,JDBC在应用程序和数据库之间是一个桥梁的作用,不同的驱动与不同的数据连接, 连接后进行相应的操作
了解JDBC中的API
Driver 接口
Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门给数据库厂商使用。在编写JDBC程序时,必须要把所有数据库驱动程序或者类库加载到classpath中去。
DriverManager接口
方法 作用
regsiterDriver(Driver driver) 用于向DriverManager中注册JDBC的驱动程序
getConnection(String url, String user,String password) 建立与数据库的连接
Connection 接口
方法 作用
createStatement( ) 创建statement对象将SQL语句发送到数据库中
prepareStatement( ) 创建preparestatement对象将SQL语句发送到数据库中
prepareCall() 创建CallableStatement对象调用数据库的存储过程
注意:在这里我们看到createStatement和prepareStatement方法都是创建对象将SQL语句发送到数据库中,但是有什么不同呢?我们暂且用createStatement方法,prepareStatement方法我们之后再谈它的用途。
Statement接口
方法 作用
execute(String sql) 执行SQL 语句返回boolean类型的值 如果为true表示有结果,通过ResultSet方法查询结果
executeUpdate(String sql) 执行SQL语句中的 insert delete update 方法返回值为int类型
executeQuery 执行SQL中select语句
ResultSet接口
方法 描述
getString(String name) 获取String类型的值 ,name代表字段的名称
getInt(int index) 获取int类型的值,index代表字段的名称
next() 当前位置到下一行
previous() ResultSet的上一行
absolute(int row) ResultSet的指定位置
建立连接步骤
在写代码之气需要把MySQL的jar包导入到项目中,找到MySQL\Connector J 8.0 中的mysql-connector-java-8.0.14.jar文件导入工程中
要建立数据库的连接,首先要注册MySQL数据库的驱动
完成数据库驱动的注册,建立数据库的连接
创建statement对象,
执行sql语句
遍历查询数据
释放资源
JDBC基础代码
解释了建立连接数据库的步骤和常用的API,接下来就看看最基础的代码如何实现的:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class pracjdbc {
public static void main(String [] args) {
try {
//1.注册驱动
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
/*2.建立数据库的连接 获取参数依次是url,user,password url连接本地数据库,user 用户名称,password数据库密码*/
Connection conn=
DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
//3.创建statement对象
Statement st=conn.createStatement();
String sql = "select * from info";
//4.执行sql语句
ResultSet rs = st.executeQuery(sql);
//5.遍历查询数据
while(rs.next()) {
int id =rs.getInt("id");
String name = rs.getString("name");
System.out.println(id+":"+name);
}
//6.释放资源
conn.close();
st.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
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
JDBC代码改进
刚刚写最进本的的代码现在我们看一下在刚刚的基础上稍微做一些改进
资源释放
在资源释放这里起始并不是这样写法,实际使用通过finally语句块
将资源释放的
try {
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
1
2
3
4
5
6
7
8
9
10
这样写过于冗长,统一写一个类取完成这个操作
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCutils {
public static void ReleaseAll(Connection conn, ResultSet rs, Statement st) {
CloseConn(conn);
CloseSt(st);
CloseRs(rs);
}
public static void ReleaseAll(Connection conn, Statement st) {
CloseConn(conn);
CloseSt(st);
}
private static void CloseConn(Connection conn) {
try {
if(conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
conn = null;
}
}
private static void CloseRs(ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
rs = null;
}
}
private static void CloseSt(Statement st) {
try {
if(st != null) {
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
st = null;
}
}
}
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
47
48
49
50
51
52
再来看看建立驱动的步骤 进入底层源码
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
1
2
3
4
5
6
7
8
Driver中已经建立了驱动实际上我们自己建立驱动就是已经多余了,
修改代码如下
Class.forName("com.mysql.cj.jdbc.Driver");
1
2
完整代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class pracjdbc {
public static void main(String [] args) {
Connection conn= null;
Statement st = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
conn= DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
st=conn.createStatement();
String sql = "select * from info";
rs = st.executeQuery(sql);
while(rs.next()) {
int id =rs.getInt("id");
String name = rs.getString("name");
System.out.println(id+":"+name);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCutils.ReleaseAll(conn, rs, st);
}
}
}
---------------------
JDBC连接MySQL数据库(一)——数据库的基本连接的更多相关文章
- JDBC连接MySQL数据库代码
******************************************************1********************************************* ...
- JDBC连接MySQL数据库代码模板
下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用 ...
- JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- JDBC连接MySQL数据库及示例
JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一 ...
- java jdbc 连接mysql 数据库
JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...
- java用JDBC连接MySQL数据库的详细知识点
想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...
- JDBC 连接mysql数据库
JDBC 连接mysql数据库jar包:mysql-connector-java-5.1.47.jar 下载:mysql-connector-java-5.1.47.jar jdbc:java dat ...
- 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)
分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...
随机推荐
- (20)Spring Boot Servlet【从零开始学Spring Boot】
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用Spring-Boot时,嵌 ...
- Spring Cloud-个人理解的微服务演变过程(一)
最初架构 说明:最初我们架构是垂直的 所有功能都在一个项目里面 随着业务和用户的增长 原来一台服务器已经不能支撑现有的请求数 这个时候我们就需要部署多台服务器 集群模式 说明:我们使用nginx做代理 ...
- Solr部分更新MultiValued的Date日期字段时报错及解决方案:Invalid Date String:'Mon Sep 14 01:48:38 CST 2015'
问题描述如标题. 异常信息如下: Result Caused by: org.apache.solr.common.SolrException: Invalid Date String:'Mon Se ...
- 程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题.
1.程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题. 2.可以根据异常寻找问题. 3.可以根据异常寻找问题
- boost中的有用工具assign和uuid
assign assign重载'+'=和','实现连续赋值 assign不仅支持所有8个STL标准容器(vector.string.deque.list.set.multiset.map.multim ...
- 《编程导论(Java)·2.1.2 啊,我看到了多态》-什么是多态(polymorphism)
1.不明觉厉 很多人学习多态时,会认为. 之所以不明觉厉,由于多态的定义:事物存在的多种表现形态:而后,有人将重载(overload).改写(override).多态变量和泛型归结于同一个术语&quo ...
- Xcode6+Cocos2d-x真机调试 报错
眼下真机调试时遇到下面问题. Undefined symbols for architecture arm64: "_png_get_io_ptr", referenced fro ...
- CLLocationManagerDelegate的解说
1.//新的方法.登陆成功之后(旧的方法就无论了) - (void)locationManager:(CLLocationManager *)manager didUpdateLocatio ...
- 【Codeforces 258D】 Count Good Substrings
[题目链接] http://codeforces.com/contest/451/problem/D [算法] 合并后的字符串一定是形如"ababa","babab&qu ...
- 随时随地日志Debug
对于一个应用程序而言,Log必不可少,但是有些时候仅仅想看下输出,如果加log的话就显得比较麻烦,这个时候就用到了Debug.WriteLine("测试下,你好,非常棒,牛叉!") ...