import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLInject2 {
public static void main(String[] args) throws Exception {
read2(“‘or 1 or’”);// 会查询表里面的全部内容
// 利用MySQL的一些关键字产生错误
}
public static void read2(String name) throws Exception {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String url = “jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC”;
// url格式:jdbc:自协议:子名称//主机名:端口/数据库名称
String userName = “root”;
String password = “mysql”;
try {
// 1.注册驱动
Class.forName(“com.mysql.jdbc.Driver”);
// 2.建立连接
conn = DriverManager.getConnection(url, userName, password);
// 3.创建语句
// PreparedStatement可以对sql语句进行预处理,过滤一些MySQL中的字符
String sql = “select * from user where name=?”;
ps = conn.prepareStatement(sql);
ps.setString(1, name);
// 4.执行语句
rs = ps.executeQuery();
// 5.处理结果
while (rs.next()) {// 按行遍历
System.out.println(rs.getObject(“id”) + “\t” + rs.getObject(“name”)
-
“\t” + rs.getObject(“birthday”)
-
“\t” + rs.getObject(“money”) + “\t”);// 获取每一列
}
} finally {
// 6.释放资源(后创建的先关闭):调用工具类中的方法
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
三、使用工具类编写JDBC程序
===============
在使用JDBC连接数据库的过程中,我们发现大多数步骤都是一样的,如第(1)、(2)步注册驱动、建立连接,以及第(6)步释放资源的代码完全以封装起来。而我们平常使用数据库的频率如果很高所以我们需要对JDBC的通用代码进行提炼,提高代码复用率,提炼出来的工具类我们一般称为JDBCUtils,工具类中包含了我们常用的很多方法,比如连接数据库和断开连接就是常用的方法,我们只要掌握了JDBC原理,就可以自己设计满足需求工具类或参考以下工具类(后面我们会说到DBUtils工具类,这是Apache组织提供的JDBC工具类,比较全面,基本能够满足我们的需求)
如下为将第(1)、(2)步注册驱动、建立连接,以及第(6)步释放资源的代码封装进工具类的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcUtils {
private static String url=“jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC”;//url格式:jdbc:自协议:子名称//主机名:端口/数据库名称
private static String name=“root”;
private static String password=“mysql”;
private JdbcUtils() {
}
//1.注册驱动
static {
try {
Class.forName(“com.mysql.jdbc.Driver”);
}catch(ClassNotFoundException e) {
throw new ExceptionI