-------android培训、java培训、期待与您交流! ----------
JDBC学习笔记
目标:
1、知道什么是JDBC。
2、理解JDBC原理、知道什么是JDBC驱动。
3、知道JDBC的功能。
4、掌握JDBC中几个重要类的使用:Connection、Statement、ResultSet。
5、理解JDBC操作数据库的一般步骤。
6、掌握SQLException的异常处理。
7、理解数据库事务、JDBC对事务的支持、以及JDBC事务的原理和如何使用JDBC事务。
一、JDBC概念
JDBC是SUN公司定义的Java操作数据库的规范(一系列接口)。通过JDBC可以操作任何的关系数据库(前提是有具备数据库JDBC驱动程序)
JDBC是SUN公司注册的一个技术商标。
JDBC的全称是Java Database Concetivty,意思是Java数据库连接。
二、JDBC的功能
连接数据库
发送并执行SQL语句
获取处理结果
三、JDBC的原理
JDBC定义了一组操作数据库的接口,不同的数据库厂商提供了JDBC接口的实现,这个实现称为JDBC驱动。这样就可以通过JDBC接口来对不同数据库获得统一的操作。
四、JDBC中关键的几个类
1、java.sql.DriverManager: 管理一组 JDBC 驱动程序的基本服务。
2、java.sql.Connection: 与特定数据库的连接(会话)。
3、java.sql.Statement: 用于执行静态 SQL 语句并返回它所生成结果的对象。
4、java.sql.ResultSet: 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
五、JDBC操作数据库的一般步骤
1、注册JDBC数据库驱动程序
2、创建数据库连接Connection
3、通过Statement向数据库发送SQL语句
4、执行SQL语句,获取返回结果。
六、实践
CREATE
TABLE teacher (
id bigint(20) NOT NULL auto_increment COMMENT 'ID(自增型)',
name varchar(24) default NULL COMMENT '姓名',
salary int(11) default NULL COMMENT '薪水',
remark varchar(120) default NULL COMMENT '备注',
PRIMARY KEY (id)
);
insert into teacher(id, name,salary,remark) values
(1, '秦老师',3000, '讲师级别'),
(2, '王老师',1700, '助教级别'),
(3, '江老师',1050, '书童级别'),
(4, '李老师',1200, '伴读级别');
id bigint(20) NOT NULL auto_increment COMMENT 'ID(自增型)',
name varchar(24) default NULL COMMENT '姓名',
salary int(11) default NULL COMMENT '薪水',
remark varchar(120) default NULL COMMENT '备注',
PRIMARY KEY (id)
);
insert into teacher(id, name,salary,remark) values
(1, '秦老师',3000, '讲师级别'),
(2, '王老师',1700, '助教级别'),
(3, '江老师',1050, '书童级别'),
(4, '李老师',1200, '伴读级别');
import java.sql.*;
/**
* JDBC第一个测试程序
* User: xiaohui
* Date: 2008-11-221:18:07
*/
public class TestJDBC {
public static String dburl = "jdbc:mysql://localhost:3306/testdb";
public static String user ="root";
public static String password ="xiaohui";
public staticvoid main(String args[])throws ClassNotFoundException, SQLException {
String testsql = "select t.id,t.name,t.salary,t.remark from teacher t \n" +
"where t.salary>1500";
//1:注册驱动类
Class.forName("com.mysql.jdbc.Driver");
//2:创建数据库连接
Connection conn = DriverManager.getConnection(dburl, user, password);
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
ResultSet rs = stmt.executeQuery(testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getLong("id") +"\t");
System.out.print(rs.getString("name") +"\t");
System.out.print(rs.getInt("salary") +"\t");
System.out.print(rs.getString("remark") +"\t");
System.out.println();
}
//6:关闭数据库连接
conn.close();
}
}
/**
* JDBC第一个测试程序
* User: xiaohui
* Date: 2008-11-221:18:07
*/
public class TestJDBC {
public static String dburl = "jdbc:mysql://localhost:3306/testdb";
public static String user ="root";
public static String password ="xiaohui";
public staticvoid main(String args[])throws ClassNotFoundException, SQLException {
String testsql = "select t.id,t.name,t.salary,t.remark from teacher t \n" +
"where t.salary>1500";
//1:注册驱动类
Class.forName("com.mysql.jdbc.Driver");
//2:创建数据库连接
Connection conn = DriverManager.getConnection(dburl, user, password);
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
ResultSet rs = stmt.executeQuery(testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getLong("id") +"\t");
System.out.print(rs.getString("name") +"\t");
System.out.print(rs.getInt("salary") +"\t");
System.out.print(rs.getString("remark") +"\t");
System.out.println();
}
//6:关闭数据库连接
conn.close();
}
}
运行结果:
1 秦老师 3000 讲师级别
2 王老师 1700 助教级别
Process finished with exit code 0
2 王老师 1700 助教级别
Process finished with exit code 0
七、封装一个简单的JDBC工具类
import java.sql.*;
/**
* 一个简单数据库工具类
* User: xiaohui
* Date: 2008-11-221:16:21
*/
public class DBUtils {
public static String dburl = "jdbc:mysql://localhost:3306/testdb";
public static String user ="root";
public static String password ="xiaohui";
/**
* 创建一个数据库连接
*
* @return 一个数据库连接
*/
public static Connection createConnection() {
Connection conn = null;
//1:注册驱动类
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("#ERROR# :加载数据库驱动异常,请检查!");
e.printStackTrace();
}
//2:创建数据库连接
try {
conn = DriverManager.getConnection(dburl, user, password);
} catch (SQLException e) {
System.err.println("#ERROR# :创建数据库连接发生异常,请检查!");
e.printStackTrace();
}
return conn;
}
/**
* 在一个数据库连接上执行一个静态SQL语句
*
* @param conn 数据库连接
* @param staticSql 静态SQL语句字符串
* @return 返回查询结果集ResultSet对象
*/
public static ResultSet executeQuery(Connection conn, String staticSql) {
ResultSet rs = null;
try {
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
rs = stmt.executeQuery(staticSql);
} catch (SQLException e) {
System.err.println("#ERROR# :执行SQL语句,请检查!");
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return rs;
}
public staticvoid closeConnection(Connection conn) {
try {
if (!conn.isClosed()) {
//6:关闭数据库连接
conn.close();
}
} catch (SQLException e) {
System.err.println("#ERROR# :关闭数据库连接发生异常,请检查!");
e.printStackTrace();
}
}
}
/**
* 一个简单数据库工具类
* User: xiaohui
* Date: 2008-11-221:16:21
*/
public class DBUtils {
public static String dburl = "jdbc:mysql://localhost:3306/testdb";
public static String user ="root";
public static String password ="xiaohui";
/**
* 创建一个数据库连接
*
* @return 一个数据库连接
*/
public static Connection createConnection() {
Connection conn = null;
//1:注册驱动类
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println("#ERROR# :加载数据库驱动异常,请检查!");
e.printStackTrace();
}
//2:创建数据库连接
try {
conn = DriverManager.getConnection(dburl, user, password);
} catch (SQLException e) {
System.err.println("#ERROR# :创建数据库连接发生异常,请检查!");
e.printStackTrace();
}
return conn;
}
/**
* 在一个数据库连接上执行一个静态SQL语句
*
* @param conn 数据库连接
* @param staticSql 静态SQL语句字符串
* @return 返回查询结果集ResultSet对象
*/
public static ResultSet executeQuery(Connection conn, String staticSql) {
ResultSet rs = null;
try {
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
rs = stmt.executeQuery(staticSql);
} catch (SQLException e) {
System.err.println("#ERROR# :执行SQL语句,请检查!");
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return rs;
}
public staticvoid closeConnection(Connection conn) {
try {
if (!conn.isClosed()) {
//6:关闭数据库连接
conn.close();
}
} catch (SQLException e) {
System.err.println("#ERROR# :关闭数据库连接发生异常,请检查!");
e.printStackTrace();
}
}
}
使用这个工具类
import java.sql.*;
/**
* JDBC工具类测试
* User: xiaohui
* Date: 2008-11-222:08:58
*/
public class Test {
public static void main(String args[]) throws ClassNotFoundException, SQLException {
String testsql = "select * from teacher";
Connection conn = DBUtils.createConnection();
ResultSet rs = DBUtils.executeQuery(conn, testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println();
}
DBUtils.closeConnection(conn);
}
}
/**
* JDBC工具类测试
* User: xiaohui
* Date: 2008-11-222:08:58
*/
public class Test {
public static void main(String args[]) throws ClassNotFoundException, SQLException {
String testsql = "select * from teacher";
Connection conn = DBUtils.createConnection();
ResultSet rs = DBUtils.executeQuery(conn, testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println();
}
DBUtils.closeConnection(conn);
}
}
运行结果:
1 秦老师 3000 讲师级别
2 王老师 1700 助教级别
3 江老师 1050 书童级别
4 李老师 1200 伴读级别
Process finished with exit code 0
2 王老师 1700 助教级别
3 江老师 1050 书童级别
4 李老师 1200 伴读级别
Process finished with exit code 0