JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术。
一、JDBC基础知识
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一訪问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发者提供了一个标准的API,据此能够构建更高级的工具和接口,使数据库开发者能够用纯 Java API 编写数据库应用程序,而且可跨平台执行,而且不受数据库供应商的限制。
1、跨平台执行:这是继承了Java语言的“一次编译,到处执行”的特点;
2、不受数据库供应商的限制:巧妙在于JDBC设有两种接口,一个是面向应用程序层,其作用是使得开发者通过SQL调用数据库和处理结果,而不须要考虑数据库的提供商;还有一个是驱动程序层,处理与详细驱动程序的交互,JDBC驱动程序能够利用JDBC API创建Java程序和数据源之间的桥梁。应用程序仅仅须要编写一次,便能够移到各种驱动程序上执行。Sun提供了一个驱动管理器,数据库供应商——如MySQL、Oracle,提供的驱动程序满足驱动管理器的要求就能够被识别,就能够正常工作。所以JDBC不受数据库供应商的限制。
JDBC API能够作为连接Java应用程序与各种关系数据库的纽带,在带来方便的同一时候也有负面影响,下面是JDBC的优、缺点。长处例如以下:
- 操作便捷:JDBC使得开发者不须要再使用复杂的驱动器调用命令和函数;
- 可移植性强:JDBC支持不同的关系数据库,所以能够使同一个应用程序支持多个数据库的訪问,仅仅要载入对应的驱动程序就可以;
- 通用性好:JDBC-ODBC桥接驱动器将JDBC函数换成ODBC;
- 面向对象:能够将经常使用的JDBC数据库连接封装成一个类,在使用的时候直接调用就可以。
缺点例如以下:
- 訪问数据记录的速度受到一定程度的影响;
- 更改数据源困难:JDBC可支持多种数据库,各种数据库之间的操作必有不同,这就给更改数据源带来了非常大的麻烦
二、JDBC连接数据库的流程及其原理
1、在开发环境中载入指定数据库的驱动程序。比如,接下来的实验中,使用的数据库是MySQL,所以须要去下载MySQL支持JDBC的驱动程序(最新的是:mysql-connector-java-5.1.18-bin.jar);而开发环境是MyEclipse,将下载得到的驱动程序载入进开发环境中(详细演示样例的时候会解说怎样载入)。
2、在Java程序中载入驱动程序。在Java程序中,能够通过 “Class.forName(“指定数据库的驱动程序”)” 方式来载入加入�到开发环境中的驱动程序,比如载入MySQL的数据驱动程序的代码为: Class.forName(“com.mysql.jdbc.Driver”)
3、创建数据连接对象:通过DriverManager类创建数据库连接对象Connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所载入的驱动程序能否够建立连接,然后通过它的getConnection方法,依据数据库的URL、username和password,创建一个JDBC
Connection 对象。如:Connection connection = DriverManager.geiConnection(“连接数据库的URL", "username", "password”)。当中,URL=协议名+IP地址(域名)+port+数据库名称;username和password是指登录数据库时所使用的username和password。详细演示样例创建MySQL的数据库连接代码例如以下:
Connection connectMySQL = DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );
4、创建Statement对象:Statement 类的主要是用于运行静态 SQL 语句并返回它所生成结果的对象。通过Connection 对象的 createStatement()方法能够创建一个Statement对象。比如:Statement statament = connection.createStatement(); 详细演示样例创建Statement对象代码例如以下:
Statement statamentMySQL =connectMySQL.createStatement();
5、调用Statement对象的相关方法运行相相应的 SQL 语句:通过execuUpdate()方法用来数据的更新,包含插入和删除等操作,比如向staff表中插入一条数据的代码:
statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;
通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到 ResulSet对象,ResulSet表示运行查询数据库后返回的数据的集合,ResulSet对象具有能够指向当前数据行的指针。通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。假设当next()方法返回null,则表示下一行中没有数据存在。使用演示样例代码例如以下:
ResultSet resultSel = statement.executeQuery( "select * from staff" );
6、关闭数据库连接:使用完数据库或者不须要訪问数据库时,通过Connection的close() 方法及时关闭数据连接。
三、JDBC应用演示样例实验
实验内容:使用phpMyAdmin在MySQL中创建数据库(myuser),并加入�实验所需的数据(新建staff表,加入�一些记录);编写Java程序,利用JDBC连接在MySQL中创建好的数据库(myuser),对staff表格进行插入、更新、删除和查询等操作。
实验环境及开发工具:Win7操作系统;jdk1.6.0_26;XAMPP1.7.7(MySQL 5.1, phpMyAdmin);MyEclipse 8.5
实验环境的搭建:可參考我的博客
- Java环境搭配:http://blog.csdn.net/cxwen78/article/details/6400798;
- windows系统XAMPP安装配置使用:http://blog.csdn.net/cxwen78/article/details/6847927
实验过程及步骤:
1、下载MySQL支持JDBC的驱动程序:假设已经有了,可跳过这一步。前往MySQL官网(http://www.mysql.com/products/connector/)下载驱动程序,,MySQL针对不同的平台提供了不同的连接器,我们须要的是DBC
Driver for MySQL (Connector/J),例如以下图所看到的,点击 Download 跟着站点的引导进行下载。打开下载得到的压缩包(mysql-connector-java-5.1.18.zip),将当中的Java包(mysql-connector-java-5.1.18-bin.jar),拷贝到MySQL文件夹下(仅是为了方便才放到这里),以备载入驱动程序时使用。
2、创建数据库:使用phpMyAdmin,登录MySQL,创建数据库myuser,并在当中插入一个名为staff的表格。并加入�一些数据,操作步骤如图,登录进去MySQL数据库后:
1)创建数据库,名称为myuser,编码为utf8_general_ci(支持中文);
2)新建表格,名称为staff,表格有8个字段;
3)8个字段的设置,包含名称、类型、值的长度、初始值、编码等等(点击查看大图);
4)加入�成功后,查看的staff表格情况:
5)往表格中插入一些实验所需数据,须要插入两条,一个是员工lucy的,还有lili的:
3、在MyEclips中创建项目并在项目中加入�MySQL驱动程序:创建的项目类型能够是Java项目或者是Java Web项目都能够。这里创建的是Web项目,项目名称能够随便取,我命名为“JavaWebChp07”。创建成功后将步骤1里下载得到的MySQL驱动程序包(mysql-connector-java-5.1.18-bin.jar)加入�到project的Build path中,加入�过程如图所看到的:
4、编写JDBC连接MySQL数据库的实例详细代码,JDBC_Test.java:
详细代码:
package chp07; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class JDBC_Test {
// 创建静态全局变量
static Connection conn; static Statement st; public static void main(String[] args) {
insert(); //插入加入�记录
update(); //更新记录数据
delete(); //删除记录
query(); //查询记录并显示
} /* 插入数据记录,并输出插入的数据记录数*/
public static void insert() { conn = getConnection(); // 首先要获取连接,即连接到数据库 try {
String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)"
+ " VALUES ('Tom1', 32, 'M', 'china','Personnel','3','3000')"; // 插入数据的sql语句 st = (Statement) conn.createStatement(); // 创建用于运行静态sql语句的Statement对象 int count = st.executeUpdate(sql); // 运行插入操作的sql语句,并返回插入数据的个数 System.out.println("向staff表中插入 " + count + " 条数据"); //输出插入操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) {
System.out.println("插入数据失败" + e.getMessage());
}
} /* 更新符合要求的记录,并返回更新的记录数目*/
public static void update() {
conn = getConnection(); //相同先要获取连接,即连接到数据库
try {
String sql = "update staff set wage='2200' where name = 'lucy'";// 更新数据的sql语句 st = (Statement) conn.createStatement(); //创建用于运行静态sql语句的Statement对象,st属局部变量 int count = st.executeUpdate(sql);// 运行更新操作的sql语句,返回更新数据的个数 System.out.println("staff表中更新 " + count + " 条数据"); //输出更新操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) {
System.out.println("更新数据失败");
}
} /* 查询数据库,输出符合要求的记录的情况*/
public static void query() { conn = getConnection(); //相同先要获取连接,即连接到数据库
try {
String sql = "select * from staff"; // 查询数据的sql语句
st = (Statement) conn.createStatement(); //创建用于运行静态sql语句的Statement对象,st属局部变量 ResultSet rs = st.executeQuery(sql); //运行sql查询语句,返回查询数据的结果集
System.out.println("最后的查询结果为:");
while (rs.next()) { // 推断是否还有下一个数据 // 依据字段名获取对应的值
String name = rs.getString("name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
String address = rs.getString("address");
String depart = rs.getString("depart");
String worklen = rs.getString("worklen");
String wage = rs.getString("wage"); //输出查到的记录的各个字段的值
System.out.println(name + " " + age + " " + sex + " " + address
+ " " + depart + " " + worklen + " " + wage); }
conn.close(); //关闭数据库连接 } catch (SQLException e) {
System.out.println("查询数据失败");
}
} /* 删除符合要求的记录,输出情况*/
public static void delete() { conn = getConnection(); //相同先要获取连接,即连接到数据库
try {
String sql = "delete from staff where name = 'lili'";// 删除数据的sql语句
st = (Statement) conn.createStatement(); //创建用于运行静态sql语句的Statement对象,st属局部变量 int count = st.executeUpdate(sql);// 运行sql删除语句,返回删除数据的数量 System.out.println("staff表中删除 " + count + " 条数据\n"); //输出删除操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) {
System.out.println("删除数据失败");
} } /* 获取数据库连接的函数*/
public static Connection getConnection() {
Connection con = null; //创建用于连接数据库的Connection对象
try {
Class.forName("com.mysql.jdbc.Driver");// 载入Mysql数据驱动 con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/myuser", "root", "root");// 创建数据连接 } catch (Exception e) {
System.out.println("数据库连接失败" + e.getMessage());
}
return con; //返回所建立的数据库连接
}
}项目部署到server,然后执行结果:
JDBC连接MySQL数据库及演示样例的更多相关文章
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 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数据库连接)是一 ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- 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页面上. 本项目 ...
随机推荐
- DOM笔记(九):引用类型、基本包装类型和单体内置对象
一.Array 1 .创建数组的方式 //Array构造函数(可以去掉new) var colors0 = new Array(); var colors1 = new Array(20); var ...
- 数往知来C#面向对象〈三〉
C# 基础方法篇 一.复习 1)方法的重载 方法的重载并不是一个方法,实际上方法的重载就是一些不同的 方法,目的是为了方便程序员编码,所以将功能相近的方法命名相同 根据参数,编译器自动的去匹配方法体, ...
- 链表回文串判断&&链式A+B
有段时间没有练习了,链表回文串判断用到了栈.链式A+B将没有的项用0补充.链表有没有头节点,及结点和链表的区别,即pNode和pHead. //#include<iostream> //u ...
- Java正则表达式获取网页所有网址和链接文字
; pos1= urlContent.indexOf(strAreaBegin)+strAreaBegin.length(); pos2=urlContent.inde ...
- Hadoop学习记录(6)|Eclipse安装Hadoop 插件
下载 https://skydrive.live.com/redir.aspx?cid=cf7746837803bc50&resid=CF7746837803BC50!1277&par ...
- easyui dialog遮罩层
当dialog在一个iframe里时,此dialog的遮罩层也会只覆盖这个iframe,要想覆盖整个页面,就把dialog写到最外层的父页面中去,此时dialog的遮罩层会自动覆盖整个页面,若需要从子 ...
- windows 无法启动asp.net 状态服务 错误 0x8007277a
处理方法:如果在启动ASP.NET State Service服务时遇到问题0x8007277a即无法启动或初始化,请尝试在命令行(CMD)中输入netsh winsock reset(有可能是wi ...
- Struts – Wildcards example
Struts wildcards can helps to reduce the repetition in your struts-config.xml file, as long as your ...
- MSSQL手札二 MSSQL的触发器
触发器,就是在对表做DML操作的时候,触发一些其他的事件,触发器一般用在check约束更加复杂的约束上面,是一种特殊的存储过程,不可以被主动调用. 语法如下: CREATE TRIGGER trigg ...
- JS的一些小验证
1,文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...