写在前面
尽管现在各种框架层出不穷,完美的提供了更为便捷的操作数据库的API。
但是对于初学者用来练习SQL语法,或者掌握一点基础的JDBC的使用方法,应用于一些小型的自己做着玩的小型项目来说,JDBC都还是有学习的价值。
一、数据库统一接口JDBC
•JDBC(Java DataBase Connectivity), 即java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC核心组件:
-
DriverManager:驱动管理者,根据连接标识和具体的数据库驱动匹配
-
Driver:根据载入的Class信息,有管理者生成和调配,一般不直接使用
-
Connection:表示和一个数据库具体连接的对象
- Statement:使用从此接口创建的对象将SQL语句提交到数据库
- ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据
- SQLException:此类处理数据库应用程序中发生的任何错误
二、使用方法(主体部分)
- 前期准备(这里注意需要导入mysql-connector-java库)
- SQL执行
- 文件目录和建表txt
三、代码
//文件IO
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
//sql支持
import java.sql.*;
//集合框架,List
import java.util.List;
public class MySQLDemo {
//数据库连接基本信息
//数据库驱动,提供对相应数据库操作支持
//低版本去掉.cj
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//数据库地址,用户名和密码
static final String DB_URL = "jdbc:mysql://localhost:3306/MySQLDemoTest?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
static final String USER = "root";
static final String PASS = "123";
public static void main(String[] args) {
//使用url和用户名密码建立连接
Connection conn = null;
//Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
Statement stmt = null;
Path pathCreat= Paths.get("src","MySQL","target","classes","CreatTable.txt");
try{
// 注册 JDBC 驱动;载入Class文件信息
Class.forName(JDBC_DRIVER);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//建立好连接后,获取当前连接的Statement对象
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
//读取pathCreat目录下的文件内容,组成SQL语句
StringBuffer sql=new StringBuffer();
List<String> list=Files.readAllLines(pathCreat.toAbsolutePath());
for(String m:list)
sql.append(m);
//通过Statement的对象执行String类型的SQL语句即可
System.out.println("删除表...");
stmt.executeUpdate("DROP TABLE IF EXISTS student;");
System.out.println("新建表...");
stmt.executeUpdate(sql.toString());
System.out.println("插入...");
for(int i=1;i<10;i++)
stmt.executeUpdate("INSERT INTO student (name) VALUES('呆瓜"+i+"号')");
System.out.println("查询...");
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
// 展开结果集数据库
while(rs.next()){
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 姓名: " + name);
System.out.print("\n");
}
System.out.println("删除...");
for(int i=1;i<10;i++){
if(i%2==0){
stmt.executeUpdate("DELETE FROM student\n" +
"WHERE id="+i+"; ");
}
}
System.out.println("删除后查询...");
rs = stmt.executeQuery("SELECT * FROM student");
while(rs.next()){
// 通过字段检索
int id = rs.getInt("id");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 姓名: " + name);
System.out.print("\n");
}
// 完成后关闭
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 关闭资源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
四、其他介绍
数据库发展时期:
•无库时代 :没有专门的数据库,数据大多以文件形式存放
•层次状数据库 :使用层次状模型进行数据库设计和存放
•网状数据库 :使用网状模型进行数据库设计和存放
•关系型数据库 :使用关系型模型进行数据库设计和存放
•非关系型数据库:为适应水平扩展性和处理超大量的数据环境,近几年发展非常迅速的发展,衍生类型非常多
新的挑战和应用:
•尽管在当下的Web2.0时代——用户交互共建对数据库的读写提出了更高的要求,也产生了大量的数据需要保存,由此诞生了适用于不同领域的NoSQL类型数据库
•但是关系型数据库仍然占据主导地位,而且随着不断发展,博采众长,关系型数据库也将迎来更辉煌的新阶段——NewSQL