首先我们需要知道的是JDBC的概念,都不知道它是什么,更谈不上使用它了。
JDBC的全称是 Java Database Connectivity 就是·java数据库连接,再说得明白一点就是java的开发者(sun公司)提供了一组与数据库交互的API
可能有人问 api是什么!
划重点,之前我也不太清楚。
百度解释:API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令
所以要求我们明白的一点是API是接口。
下面给上一张图,图片来源,百度
这张图能说明什么呢?这张图说明了JDBC是java提供的一种数据库连接统一接口,用JDBC可以连接到不同的数据库。
我这次连接到的是 MySQL,因为之前就学习了MySQL.
其语法上次已经总结了。
来开始了。
第一步:启动数据库 sudo service mysql start
mysql -u root(没设密码,设了密码的自己加上)
创建一个数据库
CREATE DATABASE Student;
连接数据库
use Student
创建表
CREATE TABLE Students
(
id int not null,
age int not null,
name varchar(255),
primary key(id)
);
向表中插入数据
INSERT INTO Students values(1,18,‘jack’),(2,19,‘zhangsan’),(3,20,'LiSi‘);
退出:
exit或者quit
第二步:建立一个JDBC连接
一共有四步:
1. 导入 JDBC 驱动: 只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤。
需要下载,并导入,其他大佬的博客有介绍的,这不是我们今天介绍的
2.注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求。
一共有两种方法进行注册
1.使用Class.forName方法
示例
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException ex) {
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
2.DriverManager.registerDriver()
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
3.数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库。(数据库的 URL 是指向数据库地址。)
MySQL 的URL是
jdbc:mysql://hostname/ databaseName
MySQL的JDBC驱动程序名称
com.mysql.jdbc.Driver
其他的自己去网上查(hostname 是用以显示或设置系统的主机名称)
4.创建连接对象:最后,代码调用 DriverManager 对象的 getConnection() 方法来建立实际的数据库连接。
一共有三种连接方法
4.1.使用数据库 URL 的用户名和密码
String URL = "jdbc:mysql://localhost/EXAMPLE";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
4.2.只使用一个数据库 URL
String URL = "jdbc:mysql://localhost/EXAMPLE?user=root&password=0909";
//Mysql URL 的参数设置详细可以查阅相关资料
Connection conn = DriverManager.getConnection(URL);
4.3 使用数据库的 URL 和一个 Properties 对象
import java.util.*;
String URL = "jdbc:mysql://localhost/EXAMPLE";
Properties pro = new Properties( );
//Properties 对象,保存一组关键字-值对
pro.put( "user", "root" );
pro.put( "password", "" );
Connection conn = DriverManager.getConnection(URL, pro);
Properties:Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。
这就要求我们在使用时,需要保存一对关键字-值对。
第三步:对数据库进行操作:
通过使用 JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,就可以使用 SQL 或 PL/SQL 命令和从数据库接收数据
三种接口的详情请参考百度,大佬的博客。
第四步:建立结果集
前面第三步对数据库进行了一些操作,需要建立一些结果集来保存这些数据
名称:Resultset接口有三类
1.导航方法:用于移动光标
2.获取方法:用于查看当前行的光标所指向的列中的数据
3.更新方法:用于更新当前行的列中的数据
相关知识留在下一次介绍。比较复杂,也可以参考其他大佬的博客,搜索JDBC的Resultset就会有很多介绍了
第五步:
可以把结果集输出或者其他操作(使用导航方法移动光标可将其输出)。
第六步:清除 = 代码里的清理环境+finally 的关闭资源。(注意这一点)
1.关闭Resultset对象,2.关闭 Statement 对象,3.关闭了 Connection 对象.这是有顺序的,最好不要调换,避免清理失败。而且还需要加上finally 关闭资源。`
附上代码:
import java.sql.*;
public class JdbcTest {
// JDBC 驱动器的名称和数据库地址
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/Student";
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
try{
//注册 JDBC 驱动器
Class.forName("com.mysql.jdbc.Driver");
//打开连接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//执行查询
System.out.println("Creating statement...");
//这里我们要更改一个同学的年龄,参数待定
String sql = "UPDATE Students set age=? WHERE id=?";
stmt = conn.prepareStatement(sql);
//将值绑定到参数,参数从左至右序号为 1,2...
stmt.setInt(1, 22); // 将age为22值赋给第一个问号
stmt.setInt(2, 1); // ID 为1的值赋给第2割问号
// 结果就是我们了更新 ID 为 1 的同学的年龄
int rows = stmt.executeUpdate();//int executeUpdate(String SQL)
//这个是jdbc里面的一个方法
// 主要功能是执行 update和insert、delete等sql语句
//返回的数据类型为int
System.out.println("被影响的行数 : " + rows );//返回操作数据的行数意思是 操作的数据条数
//比如你delete了三条数据 返回的结果就是3,这里就是1
// 查询所有记录,并显示。
sql = "SELECT id, name, age FROM Students";
ResultSet rs = stmt.executeQuery(sql);//执行查询操作时使用此方法可以生成一个Resultset集合
//处理结果集
while(rs.next()){
//检索
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
//显示
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", Name: " + name);
System.out.println();
}
//清理环境
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
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!");
}
}
可以多看看注释哦,写了一些方法的用法在注释里
注意:
结果集通常是通过执行查询数据库的语句生成,表示数据库查询结果的数据表。ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。光标可以方便我们对结果集进行遍历。默认的 ResultSet 对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
当然这是默认的,可以不这样,这就需要我们掌握Resultset的相关知识,这我想下次再总结。
如果有什么错误的地方,希望大佬指出,非常感谢。