JDBC
使用Java来操作数据库,用Java来对数据库中表中的数据执行:增,删,改,查等操作。
实现数据库驱动的接口:
java.sql.Driver
- mysql:com.mysql.jdbc.Driver
- oracle:oracle.jdbc.driver.OracleDriver
URL地址:
jdbc协议:
格式:jdbc:mysql://主机名称 : 端口号/数据库名
例子:jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
JDBC的编写步骤:
1.导入外部依赖(引入jar包),新建一个lib文件夹,把jar包拖进去,然后右键 Add as library
写代码连接数据库:
public void test02() throws ClassNotFoundException, SQLException, IOException {
/*
使用属性文件的好处:
1、实现了代码和数据的分离,如果需要修改配置信息,直接在属性文件中修改即可,不需要深入代码
2、如果修改了配置信息,省去了编译的过程
*/
Properties properties = new Properties();
// 读取外部的properties属性文件
// 记住就好,复制粘贴就好
properties.load(Ch01.class.getClassLoader().getResourceAsStream("jdbc.properties"));
String url = properties.getProperty("mysql.url");
String driverName = properties.getProperty("mysql.driverName");
String username = properties.getProperty("mysql.username");
String password = properties.getProperty("mysql.password");
1.加载驱动类
Class.forName(driverName);
4.获取连接
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println(connection);
System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
}
新建一个文件,将下列代码输入进去
mysql.url=jdbc:mysql://127.0.0.1:3306/(表名)?useUnicode=true&characterEncoding=utf8
mysql.username=root
mysql.password=root
mysql.driverName=com.mysql.jdbc.Driver
连接数据库完毕,我们可以对数据库进行使用
JDBC操作数据库
表中数据的修改
public void test01(){
// 1.获取连接
Connection conn = null;
Statement stmt = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.createStatement();
// 2.执行sql语句
String sql = "(修改表)";
// 返回值是执行sql语句影响的行数
int i = stmt.executeUpdate(sql);
// 3.处理执行sql的返回值
System.out.println(i);
System.out.println("操作成功...");
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
JDBCUtil.close(conn,stmt);
}
}
表中数据的查询
public void test01() {
// 1.获取连接
Connection conn = JDBCUtil.getConnection();
Statement stmt = null;
ResultSet rs = null;
try {
// 2.获取可以执行sql语句的stmt对象
stmt = conn.createStatement();
// 3.定义sql
String sql = "select id tid,name tname from teacher where id = 7";
// 4.执行查询的sql,会得到一个ResultSet
// ResultSet就是封装了查询结果的一个对象
rs = stmt.executeQuery(sql);
// 5.遍历结果集ResultSet
while(rs.next()) {
int id = rs.getInt("tid");
String name = rs.getString("tname");
System.out.println("id:" + id + ",name:" + name);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
// 6.关闭资源
JDBCUtil.close(conn,stmt,rs);
}
}
数据库事务:
Mysql的数据库引擎
1.在MySQL中,只有使用了Innodb引擎的数据库才支持事务
2.事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,
要么全部不执行。
3. 发生在DML中,增删改。
事务的四大特征ACID
-
原子性 A。
一个事务,要么全部完成,要么全部不完成。 -
一致性 C。
在事务开始之前和事务结束之后,数据库的完整性没有被破坏。 -
隔离性 Isolation
数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。 -
持久性 D
事务结束以后,对数据的增删改是永久性的。
术语:提交事务,回滚事务(事务回滚)
1、事务一旦提交,就不可能回滚。
2、当一个连接对象被创建时,默认情况下自动提交事务。
3、关闭连接时,数据会自动提交事务。
操作事务的步骤:
1、关闭事务的自动提交
当做出增删改操作,把变化发生在内存中,提交事务,才会真正提交给数据库。
sql输入
通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断。
public static void main(String[] args) {
login("zxcvzxcvzxcv","b' or '1' = '1");
}
PreparedStatement:预编译(预加载)接口
1、通过conn获取的对象
2、是Statement接口的子接口
3、sql语句中可以传参。用?占位,通过setXXX方法来给?赋值
4、提高性能
5、避免sql注入
String sql = "select * from user where username = ? and password = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"aaa");
pstmt.setString(2,"b' or '1' = '1");
rs = pstmt.executeQuery();
if(rs.next()) {
System.out.println("登录成功...");
}else {
System.out.println("账号或密码错误...");
}
标签:曹雨,事务,JDBC,String,数据库,sql,stmt,mysql,第四组
From: https://www.cnblogs.com/figh466/p/16603380.html