JDBC
JDBC注册驱动:
Class.forName("com.mysql.jdbc.Driver");
获取连接对象:
获取连接需要方法 DriverManager.getConnection(url,username,password),三个参数分别表示,url 需要连接数据库的位置(网址) user用户名 password 密码
String url="jdbc:mysql://localhost:3306/库名?useUnicode=true
&characterEncoding=UTF-8";
String username="root";
String password="123456";
注入问题:
当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账号为XXX 密码为:XXX’ OR ‘a’=’a时,则真正执行的代码变为:
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;
此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。
为此,我们使用PreparedStatement来解决对应的问题。
PreparedStatement 预处理对象:
每条sql语句所有的实际参数,都使用逗号分隔。
? :占位符 明确传值
String sql="select count(*) from user where uname=? and pwd=?";
PreparedStatement pst=conn.prepareStatement(sql);
getString(第几个占位符(数字),传的值);给占位符赋值
:String为值的类型
执行:
executeUpdate();增删改
格式:int row=sta.executeUpdate();
executeQuery();查询
格式:ResultSet rs=sta. executeQuery();
处理结果集:
ResultSet实际上就是一张二维的表格
我们可以调用其next()方法指向某行记录,返回一个boolean值,当第一次调用next()方法时,便指向第一行记录的位置
getXXX(int col)方法获取指定列的数据:
rs.next();//指向第一行
rs.getInt(1第几列);//获取第一行第一列的数据
rs.getString(2); //获取第一行第二列的数据
格式:
int count=0;
while(rs.next()){
count=rs.getInt(1);
}
释放资源:
调用一堆close()方法
先开的后关
rs.close();//查询时才有
pst.close();
conn.close();