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页面上. 本项目 ...
随机推荐
- Git 基础教程 之 远程库更新到本地
PS:git remote -v 查看远程仓库 git diff temp 比较master 分支与temp的不同 如果分支没有合并到主分支上,用 git branch - ...
- Spring MVC学习总结(3)——Spring3 MVC详解
DispatcherServlet 前置控制器 使用Spring MVC,配置DispatcherServlet是第一步.DispatcherServlet是一个Servlet,所以可以配置多个Dis ...
- LightOJ - 1231 - Coin Change (I)
先上题目: 1231 - Coin Change (I) PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...
- POJ - 3126 - Prime
先上题目 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9259 Accepted: 5274 D ...
- Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)
引言 总所周知,SQLite--内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库.即使Android系统中提供了很多操作SQLit ...
- Thread.suspend和println使线程死锁
Thread.suspend和println使线程死锁 package com.stono.thread2.page39; public class MyThread extends Thread{ ...
- event.currentTarget与event.target的差别介绍
event.currentTarget与event.target的差别想大家在使用的时候不是非常在意.本文以測试代码来解说它门之间的不同.即,event.currentTarget指向事件所绑定的元素 ...
- 通俗编程——白话NIO之Buffer
Buffer简单介绍 Buffer意为缓冲区.其本质上就是是一块可写入数据,然后能够从中读取数据的内存区域.通过该种方式有助于降低系统开销和提高外设效率.对于缓冲区我们早有所了解,比方在C中标准I/O ...
- Oracle-11-主键约束
一.Oracle系统一共提供了下面5种约束 1.非空(NOT NULL)约束:所定义的列绝不能为空: 2.唯一(UNIQUE)约束:在表中每一行中所定义的列,其列值不能同样: 3.主键(PARIMAR ...
- SQL SERVER读书笔记:nolock
让查询语句不去申请共享锁,从而消除死锁,效果立竿见影. 缺点: 1.脏读 2.只能解决共享锁(S锁)参与的问题 3.需要修改语句本身才能使用