JDBC:Java DataBase Connectivity,即为Java数据库连接。

JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。即:定义的一套操作所有关系型数据库的规则,是为接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

JDBC简单使用

快速入门

  • 步骤:
    1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
      1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
      2.右键–>Add As Library
    2. 注册驱动
    3. 获取数据库连接对象 Connection
    4. 定义sql
    5. 获取执行sql语句的对象 Statement
    6. 执行sql,接受返回结果
    7. 处理结果
    8. 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBCDemo01 {
/**
* 更新一条数据库数据
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//1.导入驱动jar包(类似于Python中的第三方库
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");//
//3.获取数据库连接对象 jdbc:mysql://localhost:3306/databases 本机
Connection conn = DriverManager.getConnection("jdbc:mysql://url:port/Database", "username", "password");
//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5.获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
stmt.close();
conn.close();
}
}

因为,在数据库连接、SQL语句的执行等等过程中,可能会发生异常,报错等。但是,数据库的资源要释放,故采用异常处理的方式,关闭数据库连接。

处理异常的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 1.采用异常的方式通过JDBC连接数据库
* 2.插入一条语句
*/
public class JDBCDemo02 {
public static void main(String[] args) {
// 为了使Connection方法可以接受到值,故将参数提升到成员变量的位置上
Statement stmt = null;
Connection conn = null;
// 异常捕获的方式处理异常
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.定义SQL语句
String sql = "insert into account values(null,'Lisa',2000)";
//3.获取连接对象
conn = DriverManager.getConnection("jdbc:mysql://url:port/db3", "username", "password");
//4.获取执行sql对象
stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);
if (count > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

详解

  1. DriverManager:驱动管理对象

    用于注册驱动,jar包导入。

    1
    2
    3
    4
    5
    6
    7
    8
    通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
    static {
    try {
    java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
    throw new RuntimeException("Can't register driver!");
    }
    }

    原因:文件的读取,只需要读取一次,即可拿到这些值。故使用静态代码块完成。

  2. static Connection getConnection(String url, String user, String password)

    Connection:数据库连接对象

    功能:

    1. 获取执行sql的对象
        * `Statement createStatement()`
        * `PreparedStatement prepareStatement(String sql)`  
    
    2. 事务管理:
    
    * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
    * 提交事务:commit() 
    * 回滚事务:rollback() 
    
    3. `Statement`:执行sql的对象
    
    **注意**:`createStatement`方法会造成SQL注入的问题,后期采用`PreparedStatement`来执行SQL对象,并采用预编译的方式,采用参数`?`作为占位符,且效率更高。
    
    4. `ResultSet`:结果集对象,封装查询结果(next,类似指针移动取值方法)
    
    * boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true.
    * getXxx(参数):获取数据.
        - 其中Int代表列的编号,参数**从1开始**。
        - String代表列的名称(参数)。

JDBC操作数据库的一般SQL语法

  1. 更新操作

String sql = "update account set balance = 500 where id = 1";

  1. 插入操作

String sql = "insert into account values(null,'Lisa',2000)";

  1. 删除操作

String sql = "delete from account where id = 3";

  1. 创建操作
1
2
3
4
String sql = "create table student (id int primary key not null,name varchar(20))";
stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);//处理结果,创建表返回的为0
System.out.println(count);
  1. 查询操作
1
2
3
4
5
6
7
8
9
String sql = "select * from account";
stmt = conn.createStatement();
resultSet = stmt.executeQuery(sql);
while (resultSet.next()) { //resultSet指针下移一行,并判断当前行内容是否为空,内容不为空,进入循环体
int id = resultSet.getInt(1);// 取第一列的元素
String name = resultSet.getString("NAME");
int balance = resultSet.getInt(3);
System.out.println(id + "---" + name + "---" + balance);
}

参考文献

[1] Java数据库连接

[2] Itcast视频资料


Comment