(1)了解JDBC工作的基本原理 (2)掌握JDBC编程的基本步骤 (3)熟悉SQL的DML部分命令:select,update,insert,delete
(1)设置ODBC数据源。 (2)按要求编写一个Java Application程序,并编译、运行这个程序。
参照如下所示的SQL命令,在Microsoft Access数据库中创建用户信息表“userinfo”,并输入如表1所示的数据。 create table userinfo( code varchar(4) not null, / * 用户代码 * / name varchar(10), / * 用户姓名 * / password varchar(6), / * 用户密码 * / email varchar(40), / * 用户电子邮件地址 * / primary key(code)); 表1:用户信息表中的数据
代码 | 姓名 | 密码 | 电子邮件地址 |
---|---|---|---|
7101 | 宋晓梅 | 123456 | xiaomei@yahoo.com.cn |
7102 | 关松杰 | 654321 | songjie@263.net |
7103 | 李晓梅 | 123654 | xiaomei@yahoo.com.cn |
7104 | 张松岩 | 456123 | songyan@yahoo.com.cn |
7105 | 王亚杰 | 321456 | yajie@hotmail.com |
7106 | 曲小声 | 654321 | xiaosheng@263.net |
编写JDBC应用程序,首先将用户信息表中的数据在屏幕上显示出来,然后插入一个记录,最后将更新以后数据表中的数据在屏幕上显示出来。
Pool类时一个简单的数据库连接池,封装了获取连接和放回连接的方法,提升使用性能。 Display类为展示查询结果的类,其中有静态方法display。 Main为测试类,测试题目要求的操作。
其原理就是内部维护了一个Map映射集合,如果connection空闲,值为1;若不空闲则为0。通过getConnection()方法来选择取出空闲的连接或者重新创建连接返回,layConnection就是标记Map中相应的value为1来表示该连接已空闲。
package com.dreamchaser.jdbc;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
/**
* 一个简单的数据库连接池
*/
public class Pool {
private static Driver driver;
static {
try {
driver = new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
private static Map<Connection,Integer> pool=new HashMap<>();
private static String url="jdbc:mysql://localhost:3306/example?serverTimezone=Asia/Shanghai";
private static String user="root";
private static String password="jinhaolin";
/**
* 从连接池中获取一个空闲连接,如果没有则创建一个新的连接返回
* @return
*/
public static Connection getConnection(){
for (Map.Entry entry:pool.entrySet()){
if (entry.getValue().equals(1)) {
entry.setValue(0);
return (Connection) entry.getKey();
}
}
Connection connection=null;
try {
connection=DriverManager.getConnection(url,user,password);
pool.put(connection,0);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
/**
* 放回connection连接对象
* @param connection
*/
public static void layConnection(Connection connection){
pool.put(connection,1);
}
public static String getUrl() {
return url;
}
public static void setUrl(String url) {
Pool.url = url;
}
public static String getUser() {
return user;
}
public static void setUser(String user) {
Pool.user = user;
}
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
Pool.password = password;
}
}
内置display(ResultSet rs)方法用来展示查询出来的数据
package com.dreamchaser.jdbc;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Display {
public static void display(ResultSet resultSet) {
System.out.println("-------------------------------------------------");
System.out.println("|\t代码\t\t姓名\t\t密码\t\t电子邮件地址\t");
try {
while (resultSet.next()){
System.out.println("|\t"+resultSet.getString(1)+"\t"+resultSet.getString(2)
+"\t"+resultSet.getString(3)+"\t"+resultSet.getString(4)+"");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
System.out.println("-------------------------------------------------");
}
}
进行jdbc操作,在最后按先进后出的原则释放相应资源。
package com.dreamchaser.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection connection=Pool.getConnection();
ResultSet resultSet=null;
Statement statement=null;
try {
statement = connection.createStatement();
String sql="select * from userinfo";
resultSet=statement.executeQuery(sql);
//展示打印查询结果
Display.display(resultSet);
String sql1="insert into userinfo values(7017,'金昊霖',123456,'767564319@qq.com')";
statement.execute(sql1);
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
resultSet.close();
statement.close();
//将连接放回连接池
Pool.layConnection(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
jdbc(java database connection)就是java数据库链接的api,是java标准类库的扩展,用它可以应用sql访问数据库,完成对数据库的查找,更新。
与其它数据库编程环境相比,jdbc有java语言的特性,使用jdbc开发的程序可以跨平台运行,而且不受数据库供应商的限制。 为什么不受数据库供应商的限制呢? 就在于jdbc的设计。
现在通常使用的数据库操作框架mybatis也是基于jdbc进行开发的,所以学好jdbc也是挺重要的,它是连接Java和数据库的桥梁。
评论