使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。

在实际开发中,当用户的数据发生改变时,不可能通过客户端操作执行 SQL 语句,因为操作量过大,无法保证效率和正确性。
提供者:Sun公司

JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java 语言连接数据库完成CRUD 操作。
sun公司)定义的一套操作所有关系型数据库的规则,即 接口数据库驱动jar包使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
百度云链接:https://pan.baidu.com/s/1mG9-n6yZ4vr7VDugGrDdCw
提取码:SGS1
注意:在IDEA下,
- 在项目下新建 lib 文件夹,用于存放 jar 文件。
- 将 mysql 驱动mysql-connector-java-5.1.X复制到项目的 lib 文件夹中。
- 选中 lib 文件夹右键 Add as Libraay,点击 OK。
| 类型 | 权限定名 | 简介 |
|---|---|---|
| Class | java.sql.DriverManager | 管理多个数据库驱动类,提供了获取数据库连接的方法 |
| interface | java.sql.Connection | 代表一个数据库连接(当connection不是null时,表示已连接数据库) |
| interface | java.sql.Statement | 发送SQL语句到数据库工具 |
| interface | java.sql.ResultSet | 保存SQL查询语句的结果数据(结果集) |
| class | java.sql.SQLException | 处理数据库应用程序时所发生的异常 |


常用接口
使用 Class.forName("com.mysql.jdbc.Driver");手动加载字节码文件到 JVM 中
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
会加载类,在加载类时,就会执行静态代码块
在静态代码块中有创建驱动对象已经注册驱动代码
加载驱动的操作只会被执行一次
Class.forName("com.mysql.jdbc.Driver");
URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成
Java代码需要发送SQL给MySQL服务端,就需要先建立连接
url:数据库的连接地址
mysql的url形式:jdbc:mysql://主机地址:端口号/数据库名称?连接参数
username:用户名
password:密码
Connection conn=DriverManager.getConnection(url,username,password);
通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问。
执行SQL语句需要SQL执行对象,而这个执行对象就是Statement发射对象
Statement stmt = conn.createStatement();
注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 '值'
statement.execute(sql);//何sql语句都能执行 返回值true代表有结果集,false代表没有
stmt.executeUpdate(sql);//执行非查询语句一般指DML和DDL
/**
* DML:返回值代表受影响的行数
* DDL:返回值为0
*/
stmt.executeQuery(sql);//执行select,show有结果集的
查询结果集:迭代、依次获取。
ResultSet resultSet = statement.getResultSet();
/**
* rs.next() 如果返回值为true还有记录
* 调用完next方法之后,rs结果集对象本身就引用了一条记录
* 每调用一次next方法,rs就引用下一条记录
*/
while (resultSet.next()) {
//通过结果集对象,获取记录中的字段值
int id = resultSet.getInt("id");//resultSet.getInt("字段名");根据字段名获取
String name = resultSet.getString("name");
double price = resultSet.getDouble("money");
System.out.println("{id="+id+",name="+name+",price="+price+"}");
}
受影响行数:逻辑判断、方法返回。
if(result == 1){
System.out.println("Success");
}
可以让rs指向指定的记录,参数为记录的行
resultSet.afterLast();//直接移动到最后一行
resultSet.beforeFirst()//重新指向最开始位置
resultSet.first() //指向第一条
resultSet.last() //最后一条
resultSet.findColumn() //根据字段名获取所在列
resultSet.insertRow();增加一行 结果集和数据库
resultSet.deleteRow();删除一行
resultSet.updateRow();更新一行
遵循先开后关原则,释放所使用到的资源对象
stmt.close();
conn.close();
创建新的空的项目

定义项目的名称,并指定位置

对项目进行设置,JDK版本、编译版本

创建模块,指定模块的名称及位置

导入驱动包
将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件

在添加为库文件的时候,有如下三个选项
- Global Library:全局有效
- Project Library:项目有效
- Module Library:模块有效


/**
* JDBC快速入门
*/
public class JDBCDemo {
public static void main(String[] args) throws
Exception {
//1. 注册驱动
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接
String url =
"jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "1234";
Connection conn =
DriverManager.getConnection(url, username,
password);
//3. 定义sql
String sql = "update account set money =
2000 where id = 1";
//4. 获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//5. 执行sql
int count = stmt.executeUpdate(sql);//受影响的行数
//6. 处理结果
System.out.println(count);
//7. 释放资源
stmt.close();
conn.close();
}
}
结果: