标签:statement 密码 占位符 insert drive 程序 date() exe user
入门案例
// 1.通过DriverManger注册驱动
DriverManager.registerDriver(new Driver());
// 2.通过DriverManager获取连接对象
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/databasename", "root", "abc");
// 3.通过Connection获取一个操作sql语句的对象Statement
Statement st = con.createStatement();
// 4.执行sql语句(select) 得到一个ResultSet
String sql = "select * from user";
ResultSet rs = st.executeQuery(sql);
// 5.操作结果集,得到数据
while (rs.next()) {
System.out.println("ID:" + rs.getInt("id") + "\tUSERNAME:"
+ rs.getString("username") + "\tPASSWORD:"
+ rs.getString("password") + "\tEMAIL:"
+ rs.getString("email"));
}
// 6.释放资源
rs.close();
st.close();
con.close();
如果我们在输入用户名与密码时,输入的信息如下:
用户名: tom‘ OR ‘1‘=‘1
密码:任意输入
这时会发现,我们的程序正确运行了,并显示用户登陆成功及用户的详细信息。
这就产生了SQL注入问题
所谓SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。
对于SQL注入问题,我们可以使用PreparedStatement来替换Statement来解决这类问题。
PreparedStatement是java.sql包下的一个接口。它是Statement的一个子接口
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
获取PreparedStatement对象:
注意:
参数sql,代表的是要预编译的sql语句,在语句中可以使用 “?”占位符来占位
常用方法:
用于执行select操作,注意无参数
用于执行update delete insert操作,注意无参数
n void setInt(int parameterIndex,int x) throws SQLException
n void setString(int parameterIndex,String x) throws SQLException
n void setObject(int parameterIndex,Object x) throws SQLException
参数parameterIndex代表的是第几个?号,也就是参数的序号,从1开始计数
后一个参数,是要赋的值
以上只是介绍三个比较常用的方法,更多方法大家可以查询帮助文档。
标签:statement 密码 占位符 insert drive 程序 date() exe user
原文地址:http://www.cnblogs.com/MessiAndDream/p/6056085.html