JDBC

Posted 我和Messi五五开

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。

入门案例

// 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();

  

SQL注入问题

如果我们在输入用户名与密码时,输入的信息如下:

用户名tom‘ OR ‘1‘=‘1

密码:任意输入

这时会发现,我们的程序正确运行了,并显示用户登陆成功及用户的详细信息。

这就产生了SQL注入问题

所谓SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。

对于SQL注入问题,我们可以使用PreparedStatement来替换Statement来解决这类问题。

PreparedStatement介绍

PreparedStatementjava.sql包下的一个接口。它是Statement的一个子接口

表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

获取PreparedStatement对象:

  • Connection中提供一个方法PreparedStatement prepareStatement(String sql) throws SQLException可以获取PreparedStatement对象。

注意:

参数sql,代表的是要预编译的sql语句,在语句中可以使用 “?”占位符来占位

常用方法:

  • ResultSet executeQuery() throws SQLException

用于执行select操作,注意无参数

  • int executeUpdate() throws SQLException

用于执行update delete insert操作,注意无参数

  • 对预编译的sql语句中?占位符赋值操作

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开始计数

后一个参数,是要赋的值

以上只是介绍三个比较常用的方法,更多方法大家可以查询帮助文档。

以上是关于JDBC的主要内容,如果未能解决你的问题,请参考以下文章

面试常用的代码片段

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

JDBC操作数据库之查询数据

如何在片段中填充列表视图?

在 myeclipse中进行连接sql server的测试

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段