- 做JDBC时项目添加Maven框架,里面添加依赖信息为,我们这里使用的是MySQL8.0.17版本
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
</dependencies>
- 第一步:注册驱动,一个jdbc程序中可以注册多个驱动
Class.forName(“驱动类的类全名1”);//oracle
Class.forName(“驱动类的类全名2”);//mysql
Class.forName(“驱动类的类全名3”);//sqlserver
//1、注册驱动
//注册驱动的四种方式
//第一种:使用Class.forName("驱动类全名的字符串表示"),推荐使用方式
/*String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);*/
//第二种:调用DriverManager调用相关方法注册驱动
//缺点:只能使用mysql的驱动了,更改性低,在程序中自行
//创建相关driver类的对象,但是
//不推荐使用这种方式,因为如果后期更改了数据库,则
//需要修改源代码创建其他的Driver对象。
Driver driver = new Driver();
DriverManager.registerDriver(driver);
//第三种:使用System类注册驱动
//使用System调用setProperty方法,传递两参数
//相当于给java系统配置了一个环境变量
//String driver = "com.mysql.jdbc.Driver";
//System.setProperty("jdbc.driver",driver);
//第四种:在jdbc2.0版本中,不需要显示的注册驱动
//在程序中,完全不用写注册驱动的代码
- 第二步:获取连接
前提是在MySQL中创建了数据库db_briup
String URL = “jdbc:mysql://127.0.0.1:8017/db_briup”
String user = “root”;
String password = “root”;
DriverManager.getConnection(url,user,password);
//2、获取连接对象connection(三种方式)
//cmd终端中>mysql -uroot -p -h127.0.0.1 -P5726
//2.1获取连接时,还需要:URL,用户名和密码
String url = "jdbc:mysql://127.0.0.1:5726/db_briup?useSSL=true";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url,user,password);
//2.2只提供URL,其实是将用户名和密码以参数形式直接集成在URL中
/*String url = "jdbc:mysql://127.0.0.1:5726/briup?user=root&password=root";
Connection conn = DriverManager.getConnection(url);*/
//2.3提供简单的URL,将用户名和密码封装至Properties对象中
/* String url = "jdbc:mysql://127.0.0.1:5726/briup";
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","root");
Connection conn = DriverManager.getConnection(url, properties);*/
System.out.println(conn);
- 第三步:获取Statement对象,Statement,PreparedStatement
//3、获取Statement对象
//普通的Statement对象
Statement stat = conn.createStatement();
- 第四步:执行SQL语句
//4、执行SQL语句
//DML:insert,delete,update
//DDL:create,drop,alter
//DCL:grant,revoke
//DQL:select,show
//执行SQL语句方法有三种:
//stat.executeQuery(sql);该方法的返回值是resultSet,该方法一般用于执行DQL语句
//stat.execute(sql);该方法的返回值是布尔类型,返回值代表该SQL语句是否执行失败,
//执行失败返回true,成功则false,一般用于DDL、DCL语句
//stat.executeLargeUpdate(sql);该方法的返回值是int类型,返回值代表该SQL语句
//在执行完成之后,影响了数据库表中的多少条记录,一般用于DML语句
String sql = "show databases";
ResultSet rs = stat.executeQuery(sql);
- 第五步:如果执行的是select语句,处理结果接(可选,如果不是select,那么就不用)
String name;
double salary;
while (rs.next()){
//如果字段有别名,在获取值时必须使用别名获取
name = rs.getString("last_name");
// name = rs.getString(1); //尽量使用别名,而不是用索引
salary = rs.getDouble(2);
System.out.println(name + ";;;" + salary);
}
- 第六步:关闭连接,释放资源
//6、关闭资源
rs.close();
stat.close();
conn.close();
- PrepareStatement对象能防止SQL注入攻击,能够批量处理SQL语句
Connection conn = null;
PreparedStatement ps = null;
//prepareStatement能防止SQL注入攻击,能够批量处理SQL语句
try{
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:8017/db_briup";
String user = "root";
String passwd = "root";
conn = DriverManager.getConnection(url, user, passwd);
//将事务的提交方式改成手动提交
conn.setAutoCommit(false);
//向PreparedStatement对象,需要提供预处理的sql语句
//向s_emp表中插入数据,id,last_name,salary
String sql = "insert into s_emp(id,last_name,salary) value(?,?,?)";
ps = conn.prepareStatement(sql);
//给占位符赋予真实值,这里的数字1,2,3代表占位符问号中的第几位
ps.setInt(1,300);
ps.setString(2,"lhm");
ps.setDouble(3,12345);
//执行SQL语句,返回值表示此SQL语句执行之后影响了数据库中的多少行数据
int i = ps.executeUpdate();
System.out.println(i);
//将所有的SQL语句先添加到缓冲区中
// ///ps.addBatch();
//因为已经修改了事务提交方式,必须手动提交
conn.commit();
}catch (Exception e){
//捕获异常,将事务回滚,那么必须将事务提交方式改成手动提交
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}finally {
//关闭连接释放资源
if (ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}