JDBC:Java DataBase Connectivity
,即为Java数据库连接。
JDBC
是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。即:定义的一套操作所有关系型数据库的规则,是为接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
JDBC简单使用
快速入门
- 步骤:
- 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键–>Add As Library - 注册驱动
- 获取数据库连接对象 Connection
- 定义sql
- 获取执行sql语句的对象 Statement
- 执行sql,接受返回结果
- 处理结果
- 释放资源
- 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
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语句的执行等等过程中,可能会发生异常,报错等。但是,数据库的资源要释放,故采用异常处理的方式,关闭数据库连接。
处理异常的方式:
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();
}
}
}
}
}
详解
-
DriverManager:驱动管理对象
用于注册驱动,jar包导入。
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块 static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
**原因:**文件的读取,只需要读取一次,即可拿到这些值。故使用静态代码块完成。
-
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语法
- 更新操作
String sql = "update account set balance = 500 where id = 1";
- 插入操作
String sql = "insert into account values(null,'Lisa',2000)";
- 删除操作
String sql = "delete from account where id = 3";
- 创建操作
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);
- 查询操作
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视频资料