一、DriverManager
- 注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 获取连接
static Connection connection = null;
connection = DriverManager.getConnection(url, user, password);
- 1.ur:连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2..
示例:jdbc:mysql://localhost:3306/xxt
细节:
- 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则ur可以简写为:idbc:mysa!:/数据库名称?参数键值对
- 配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
- 2.user:用户名
- 3.password:密码
二、 Connection
- 获取执行 SQL 的对象
- 普通执行SQL对象
- 预编译SQL的执行SQL对象:防止SQL注入
- 执行存储过程的对象
2.事务管理
- MySQL 事务管理
开启事务:BEGIN;/START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
- JDBC 事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务:false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback()
三、Statement
- Statement作用:
- 执行SQL语句
- 执行SQL语句
int executeUpdate(sgl):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
四、ResultSet
- 使用步骤:
- 游标向下移动一行,并判断该行否有数据:next()
- 获取数据:getXxx(参数)
//循环判断游标是否是最后一行末尾
while(rs.next()){
//获取数据
rs.getXxx(参数);
五、PreparedStatement
- PreparedStatement作用:
- 预编译SQL语句并执行:预防SQL注入问题
- SQL注入
- SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
增删改查
public class Main {
static final String url="jdbc:mysql://localhost:3306/xxt?useServerPrepStmts=true";
static final String user = "root";
static final String password = "123456";
static Connection connection = null;
public static void main(String[] args) throws Exception {
getConnection();
}
// 获取数据库连接
public static void getConnection() throws Exception {
/*String Username = "005";
String Password = "123456";
String Nick = "小黄";*/
//int id = 5;
try {
// 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
connection = DriverManager.getConnection(url, user, password);
System.out.println("连接成功");
} catch (ClassNotFoundException e) {
System.out.println("找不到MySQL驱动程序类!");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("获取数据库连接时出现错误!");
e.printStackTrace();
}
//添加
/*String sql1 = "insert into user (Username, Password, Nick) values(?,?,?)"; //定义sql
PreparedStatement ps = connection.prepareStatement(sql1); //获取执行sql的对象
ps.setString(1,Username);
ps.setString(2,Password);
ps.setString(3,Nick); //设置参数
int count = ps.executeUpdate(); //执行sql
System.out.println(count > 0);*/
//删除
/*int Id = 5;
String sql1 = "delete from user where id = ?"; //定义sql
PreparedStatement ps = connection.prepareStatement(sql1); //获取执行sql的对象
ps.setInt(1,Id); //设置参数
int count = ps.executeUpdate(); //执行sql
System.out.println(count > 0);*/
//修改
/*String sql3 = "update user set Password = 123456 where id = 1";
*//*String sql3 = "update user\n" +
"set Username = ?,\n" +
" Password = ?,\n" +
" Nick = ?\n" +
"where id = ?";*//*
PreparedStatement ps = connection.prepareStatement(sql3);
*//* ps.setString(1,Username);
ps.setString(2,Password);
ps.setString(3,Nick);
ps.setInt(4,id);*//*
int count = ps.executeUpdate();
System.out.println(count > 0);*/
//查询全部
String sql4 = "select * from user";
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery(sql4);
List<User> list = new ArrayList<>();
while(rs.next()){
User user = new User();
int Id = rs.getInt("id");
String Username = rs.getNString("Username");
String Password = rs.getNString("Password");
String Nick = rs.getNString("Nick");
user.setId(Id);
user.setUsername(Username);
user.setPassword(Password);
user.setNick(Nick);
list.add(user);
}
System.out.println(list);
/*rs.close();
s.close();
connection.close();*/
}
}