JDBC: 通过java语言操作数据库
本质: Java公司定义的一套操作所有关系数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包。这套接口编程,真正执行的代码是驱动jar包中的实现类。
JDBC入门
JDBC步骤
- 导入驱动jar包
//2 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3 获取数据库连接对象
String url = "jdbc:mysql://localhost:3306/db1?useSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "password");
//4 定义sql语句
String sql="update books set b_name='Love' where b_id=10";
//5 获取执行sql的对象
Statement st = conn.createStatement();
//6 执行sql
int count = st.executeUpdate(sql);//被修改的行数
//7 处理结果
System.out.println(count);
//8 释放资源
st.close();
conn.close();
对象讲解
DriverManager
驱动管理对象
将该类加载入内存中,会自动执行静态代码块执行registerDriver(Driver diriver)
方法,生成DriverManger对象并返回
注意⚠️: 当前版本可以不写这一行语句,在进行操作时会自动注册。
#2 注册驱动
Class.forName("com.mysql.jdbc.Driver")
Connection
数据库连接对象
获取方法:
通过静态方法类名直接调用DriverManager.getConnection
直接生成对象。
url:指定连接数据库:jdbc:mysql://ip地址(域名):端口号/数据库名称
连接本地服务器可以直接简写:jdbc:mysql:///数据库名称
//3 获取数据库连接对象
String url = "jdbc:mysql://localhost:3306/db1?useSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "password");
方法介绍:
方法 | 功能 |
---|---|
createStatement() | 获取执行sql的对象Statement |
prepareStatement(String sql) | 获取PreparedStatement 对象,通常使用该对象 |
Statement
:用于执行静态SQL语句并返回其生成的结果的对象。
方法名 | 功能 |
---|---|
boolean execute(String sql) | 执行任意SQL语句 |
int executeUpdate(String sql) | 执行DML(insert,update,delete)语句DDL(create,alter,drop)语句。返回值int是数据库中被影响的行数,可以通过返回值判断DML语句是否成功 |
ResultSet executeQuery(String sql) | 执行DQL(select)语句,返回一个 ResultSet对象。 |
ResultSet
结果集对象
方法名 | 功能 |
---|---|
next() | 将光标从当前位置向前移动一行。 |
getxxx() 如getInt(),getString(),两个重载方法输入Int或String类型数据,int表示编号从1开始获取当前行第几列数据,String作为名称获取列数据 | 获取数据—getInt():检索此 ResultSet对象的当前行中指定列的值为Java编程语言中的 int 。 |
//5 执行sql,查询语句返回 ResultSet类型
resultSet = statement.executeQuery(sql);//影响的行数
//6 处理结果
while(resultSet.next()){
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
String author = resultSet.getString("Authors");
System.out.println(id+"--"+name+"--"+author);
}
PrepareStatement
执行sql对象
SQL注入问题 :在拼接sql时,有一些sql的特殊关键字与字符串拼接,造成安全问题
例如:登陆用户和密码,输入用户随便 输入密码使用a’ or 'a'='a
预编译SQL: 参数使用?
作为占位符,在执行sql时进行赋值。
使用PrepareStatement
的核心步骤
c = JDBCUtils.getConnection();
//sql语句中 用问号代替字符拼接
String sql = "select * from user where username = ? and password = ?";
//获取sql对象
ps = c.prepareStatement(sql);
//给?赋值
ps.setString(1,username);
ps.setString(2,password);
//PrepareStatement中执行方法可以不传入sql
rs = ps.executeQuery();
return rs.next();
通常使用PrepareStatement
进行数据库操作执行。
JDBC控制事务
使用Connection
对象来管理事务
方法 | 功能 |
---|---|
setAutoCommit :调用该方法设置参数为false即开启事务 | 开启事务 |
commit() | 提交事务 |
rollback() | 回滚事务 |
try{
connection.setAutoCommit(false);
中间步骤...
commit();//没有出错
}catch(Exception e){
e.printStackTrace();
//事务回滚
if (c!=null) {
try {
c.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}