测试方向基础——JDBC数据库连接技术浅析( 三 )


打印出来的效果如下:
下面基于此运行结果,示例几个常用的方法 。
package xxx.www.xhx;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;//查询public class Demo2 {public static void main(String[] args) throws ClassNotFoundException, SQLException {String connUrl = "jdbc:mysql://127.0.0.1:3306/test0509?useSSL=true";String driverStr = "com.mysql.jdbc.Driver";String querySql = "select id,name as username,password,age from user";Class.forName(driverStr);Connection conn = DriverManager.getConnection(connUrl, "root", "123456");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(querySql);// 执行sql语句// ResultSet 指针初始值在第一行之前rs.absolute(3);// 指针定位到第三行System.out.println(rs.getString("username")); // 第三行打印出tom3rs.beforeFirst(); // 指针定位到第一行之前rs.next();// 指针定位到下一行,即第一行,应该为tom1System.out.println(rs.getString("username"));rs.afterLast();// 指针定位到最后一行之后rs.previous();// 指针向前移动一行,即tomSystem.out.println(rs.getString("username"));rs.close();stmt.close();conn.close();}}
结果如下:
查询结果的列名获取 。
package xxx.www.xhx;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;//查询public class Demo2 {public static void main(String[] args) throws ClassNotFoundException, SQLException {String connUrl = "jdbc:mysql://127.0.0.1:3306/test0509?useSSL=true";String driverStr = "com.mysql.jdbc.Driver";String querySql = "select id,name as username,password,age from user";Class.forName(driverStr);Connection conn = DriverManager.getConnection(connUrl, "root", "123456");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(querySql);// 执行sql语句ResultSetMetaData metaData = http://www.kingceram.com/post/rs.getMetaData(); //返回结果的列名int count = metaData.getColumnCount();System.out.println(count);System.out.println(metaData.getColumnLabel(2));// as之后的别名System.out.println(metaData.getColumnName(2));// as之前的原列名rs.close();stmt.close();conn.close();}}
结果如下:
在此,我们需要了解一个问题:SQL注入问题 。在此就浅浅的了解一下吧 。举个例子:
插入or 1 = 1 --后,所有信息都会被查出 。
上面那一大堆类中,有浅浅的一个细节,hh,你品,你慢慢品,就是得到对象,他会把sql语句提交到数据库进行预编译 。效率更高一点,更安全些 。
package xxx.www.xhx;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.naming.spi.DirStateFactory.Result;public class Demo4 {public static void main(String[] args) throws SQLException {String sql = "select count(*) from user where name = ? and password = ?";// 这个问号就相当于一个占位符Connection conn = DBUtils.openConnection();PreparedStatement pStatement = conn.prepareStatement(sql);// 普通的一个查询pStatement.setString(1, "tom1");// 1表示第一个占位符pStatement.setString(2, "123");// 2表示第二个占位符ResultSet rSet = pStatement.executeQuery();// 返回结果// 因为只有一行,我们用if即可 。超过一行就得用循环rSet.next(); // 移动到第一行System.out.println(rSet.getInt(1));// SQL注入查询pStatement.setString(1, "'or 1=1 -- '");// 1表示第一个占位符pStatement.setString(2, "123");// 2表示第二个占位符rSet = pStatement.executeQuery();// 返回结果// 因为只有一行,我们用if即可 。超过一行就得用循环rSet.next(); // 移动到第一行System.out.println(rSet.getInt(1));//关闭连接}}