day2 数据库连接2
package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
//设定InsertMessage类,声明该类的参数num、time、id
public class InsertMessage {
int num;
int time;
String id;
//
public InsertMessage(int num, int time, String id) {
this.num=num;
this.time=time;
this.id=id;
}
//成员函数insert调用 DBUtil类中的getConnection函数
public void insert(){
Connection con = DBUtil.getConnection();
//在使用statement获取jdbc访问时所具有的一个共通的问题是输入适当格式的日期和时间戳:2021-07-023 20:56 或者 21/07/23 8:56 pm。 通过使用java.sql.preparedstatement,这个问题可以自动解决。
PreparedStatement pstmt;
try {
//insert into 数据库.表名
String sql="insert into adie.dbo._rank values('"+id+"',"+num+","+time+")";
pstmt = con.prepareStatement(sql);
pstmt.executeUpdate();
pstmt.close();
con.close();
JOptionPane.showMessageDialog(null, "录入成功,可通过排行榜查看您的成绩");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
号外
PreparedStatement
l 它是Statement接口的子接口;
l 强大之处:
Ø 防SQL攻击;
Ø 提高代码的可读性、可维护性;
Ø 提高效率!
l 学习PreparedStatement的用法:
Ø 如何得到PreparedStatement对象:
¨ 给出SQL模板!
¨ 调用Connection的PreparedStatement prepareStatement(String sql模板);
¨ 调用pstmt的setXxx()系列方法sql模板中的?赋值!
¨ 调用pstmt的executeUpdate()或executeQuery(),但它的方法都没有参数。
l 预处理的原理
Ø 服务器的工作:
¨ 校验sql语句的语法!
¨ 编译:一个与函数相似的东西!
¨ 执行:调用函数
Ø PreparedStatement:
¨ 前提:连接的数据库必须支持预处理!几乎没有不支持的!
¨ 每个pstmt都与一个sql模板绑定在一起,先把sql模板给数据库,数据库先进行校验,再进行编译。执行时只是把参数传递过去而已!
¨ 若二次执行时,就不用再次校验语法,也不用再次编译!直接执行!
安全性
PreparedStatement在连接数据库时安全性非常高