JDBC本质
JDBC本质是一套接口
连接数据库的六大步骤
- 下载驱动,配置环境注册驱动(连接那个品牌的数据库)
两种方法:
//方法一:直接构造类
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
//方法二:利用反射机制
Class.forName("com.mysql.cj.jdbc.Driver");
- 获取连接(表示JVM与数据库的进程之间的通道打开了,属于进程之间的通信,重量级,用完后要关闭通道)
String url = "jdbc:mysql://127.0.0.1:3306/bjpowernode?serverTimezone=GMT";
String user ="root";
String password = "****";
coon = DriverManager.getConnection(url,user,password);
注:JDK8.0后面要在资源名后面加上一个时区即
?serverTimezone=GMT
3. 获取操作的数据库对象(专门执行sql语句的对象)
stmt = coon.createStatement();
- 执行sql语句(DQL,DML…)
//插入数据
String sql = "insert into dept(deptno,dname,loc) values(70,'财务部','江西')";
int count = stmt.executeUpdate(sql);
System.out.println(count==1?"插入成功":"失败");
//修改数据
String sql1 ="update dept set dname ='销售部',loc='天津' where deptno = 20";
int count1 = stmt.executeUpdate(sql1);
System.out.println(count1==1?"修改成功":"失败");
- 处理查询结果集 (只有第五步执行select语句时才有该步骤)
//查询结果处理集
String sql2 = "select * from dept";
rs =stmt.executeQuery(sql2);
while (rs.next()){
int deptno = rs.getInt(1);
String dname =rs.getString(2);
String loc = rs.getString(3);
System.out.println(deptno+",\t"+dname+",\t"+loc);
}
- 释放资源
rs.close();
stmt.close();
coon.close();
模拟用户登录
1,使用配置文件来读取数据,实现连接
使用ResourceBundle类来完成
//绑定配置文件
ResourceBundle bundle = ResourceBundle.getBundle("JDBC/Mysql");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
2,解决sql注入问题
用PreparedStatement来代替Statement
//3,获取预编译操作对象,防止sql注入问题
String sql = "select * from t_user where LoginName=? and LoginPwd =? ";
ps = coon.prepareStatement(sql);
//给占位符传值
ps.setString(1,userLoginInfo.get("LoginName"));
ps.setString(2,userLoginInfo.get("LoginPwd"));
//4,执行sql语句
rs = ps.executeQuery();
完整代码
public static void main(String[] args) {
Connection coon = null;
Statement stmt = null;
ResultSet rs = null;
//这里使用的是jar包是8.0的
try {
//第一步:下载驱动,配置环境注册驱动(连接那个品牌的数据库)
//方法一:直接构造类
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
//方法二:利用反射机制
Class.forName("com.mysql.cj.jdbc.Driver");
//第二步,获取连接(表示JVM与数据库的进程之间的通道打开了,属于进程之间的通信,重量级,用完后要关闭通道)
String url = "jdbc:mysql://127.0.0.1:3306/work?serverTimezone=GMT";
String user ="root";
String password = "3333";
coon = DriverManager.getConnection(url,user,password);
//第三步:获取操作的数据库对象(专门执行sql语句的对象)
stmt = coon.createStatement();
//第四步:执行sql语句(DQL,DML…)
//插入数据
/* String sql = "insert into users(uid,uname,grade) value(66,'小红','二星')";
int count = stmt.executeUpdate(sql);
System.out.println(count==1?"插入成功":"失败");*/
//查询结果集合
String sql2 = "select * from users";
rs = stmt.executeQuery(sql2);
while (rs.next()){
int uid = rs.getInt(1);
String uname =rs.getString(2);
String grade = rs.getString(4);
System.out.println(uid+",\t"+uname+",\t"+grade);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(coon != null){
try {
coon.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC中的事务提交
1,开启事务 setAutoCommit(false)
2,提交事务 commit();
3,回滚事务 coon.rollback();