数据库JDBC使用步骤,c3p0连接池,SQL注入问题
一、jdbc的创建步骤:(导入JDBC架包)
1、注册驱动: class.forName("com.mysql.jdbc.Driver");
2、获取连接: Connection connection=Drivermanager.getconnection("数据库路径",“用户名”,“密码”);
3、获取执行SQL语句的类对象: PreparedStatement preparedstement=connection.preparedstatement("SQL语句");
4、执行SQL语句返回结果集:
语句一: ResultSet rs=preparedstement.executeUpdate();
语句二: ResultSet rs=preparedstement.executeQuery();
5、处理结果(根据需求遍历):
while(rs.next()) (
int id=rs.getInt("id");
System.out.println(id);
)
6、关闭资源: rs.close(),connection.close();
二、编写JDBCUtils
public Class JDBCUtlis{
private static String url="jdbc:mysql://localhost:3306/test";
private static String username="root";
private static String password="root";
static{
Class.forName("com.mysql.jdbc.Driver");
}
public static Connection getConn(){
Connection connection=DriverManager.getConnection(url,username,password);
return connection;
}
//关闭资源
public static void close(ResultSet rs,Perparedstment perparedstment,Connection conn){
if(!Objects.isNull(rs)){rs.close();}
if(!Objects.isNull(perparedstment)){perparedstment.close()}
if(!Objects.isNull(conn)){conn.close();}
}
}
三、SQL注入问题:
1、根据JDBCUtlis获取数据库连接:
Connection conn=JDBC.getConn();
2、创建执行SQL语句的类对象:
Statement statement=conn.createStatement();
3、执行SQL语句:
statement.executeQuety(select * from 表名 where username=‘真龙天子’ AND password=‘123456’ or ‘a’=‘a’);
语句中 or ‘a’=‘a’ 是SQL语句注入部分,此条件永远成立,会将你的数据库所有的数据暴露
java程序中执行的SQL语句是从前台获取数据然后以SQL语句拼接的方式对数据库进行操作,这就出现SQL语句注入的安全问题,所有java程序在获取数据后不能
采取SQL语句拼接的方式对数据库进行操作。
所有我们要用:
Perparedstment perparedstment =conn.perparedstment("select * from 表名 where username=? and password=?"); //这里采用?就是占位符的方式,它可预编译(封装安全验证)
perparedstment.setString(1,'真龙天子'); //第一个参数是SQL语句第几个占位符,第二个参数是数据
perparedstment.SetString(2,'123456');
注意:操作数据库时一定要根据数据库各个字段的数据类型选用相同类型的方法。
四、数据库连接池(c3p0连接池)
1、导入c3p0数据连接池架包,导入c3p0conf.xml的配置文件
2、加载c3p0数据库驱动:
ComboPooledDataSource dataSource=new ComboPoledDataSource();
3、获取连接 :
Connection connection=dataSource.getConnection();
4、关闭资源:
ResultSet.close();
perparedstment.close();
Connectin.close();