Jdbc是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。
一、连接过程
1.导入jar包
2.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
3.连接数据库
实现类DriverManager的getConnection()方法 参数:url,username ,password mysql的url格式:jdbc:mysql://ip:端口号/数据库名?key=value...
String url = "jdbc:mysql://localhost:3306/text?serverTimezone=GMT";
conn = DriverManager.getConnection(url,"username","password");
二、操作数据库
1.创建PreparedStatement对象(PreparedStatement对象会对执行的sql语句进行预编译,以防产生Statement对象的sql注入现象)需要传入执行的sql语句,其中不确定的参数用?代替。
PreparedStatement stmt = connection.prepareStatement(sql);
2.设置参数(setString/setInt/setDouble/setDate等)
stmt.setString(第几个?(下标从1开始),值);
3.执行sql语句(由于之前已经传入过sql语句,所以不需要再次传入)
stmt.execute();//一般用于执行DDL返回一个布尔值
stmt.executeUpdate();//可以执行DDL,但一般用于执行DML,返回int值表示更新数据的数量
ResultSet rs = stmt.executeQuery();//只能执行DQL,返回一个结果集
三、结果集(ResultSet)
结果集(ResultSet)是查询数据库时,返回的一个二维的结果集,我们需要用到ResultSet来遍历结果集,获取每一行的数据
ResultSet rs = stmt.executeQuery();
rs.next()//先将指针指向下移动,再查看当前位置是否为空,是返回false 否返回true
rs.getString(第几列(下表从1开始)/字段名)//getInt,getDouble...
四、Jdbc中的事务
conn.setAutoCommit(false);//设置自动提交为false,等同于开启事务
conn.commit();//程序运行正常,提交
conn.rollback();//放在catch中,捕获异常程序出错回滚事务
五、配置文件
使用配置文件,封装成类,提高代码的复用,减少工作量
//使用properties配置文件
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/text?serverTimezone=GMT
username = root
password = 123456
封装成类,方便调用
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
static {
try {
Properties props = new Properties();
props.load(JdbcUtils.class.getResourceAsStream("jdbc.properties"));
driver =props.getProperty("driver");
url =props.getProperty("url");
username =props.getProperty("username");
password =props.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
//连接数据库
return conn;
}
public static void close(PreparedStatement stmt){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection conn, PreparedStatement stmt){
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}