jdbc之Statement和Preparement

Jdbc DML 操作
Statement:静态SQL操作
每次操作都会将sql语句提交到数据库执行一次,性能比较低
	// 1.加载驱动程序
	Class.forName(driverName);
	// 2.获取数据库连接
	Connection conn = DriverManager.getConnection(url, user, password);
	// 3.构建SQL语句
	String sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'abc','123456')";
	// 4.执行SQL语句
	Statement sts = conn.createStatement();
	// 返回的结果是影响的行数
	int count = sts.executeUpdate(sql);
	System.out.println("影响的行数:" + count);
	// 5.关闭资源
	sts.close();
	conn.close();


Jdbc DML 操作
PrepareStatement:动态sql操作  预编译操作
优点:性能比Statement高
	Statement对象能做的操作Preparedstatement都能做
	Preparedstatement能做的Statement不一定能做
	通过PrepareStatement对象更新用户数据
	execute:DDL操作
	executeUpdate:DML操作
	executeQuery:DQL操作
	executeBatch:批量处理 一次性执行多条sql语句

	// 1.加载驱动程序
	Class.forName(driverName);
	// 2.获取数据库的连接通道
	Connection conn = DriverManager.getConnection(url, user, password);
	// 3.构建SQL语句
	String sql = "update t_user set password=? where userid=?";
	// 4.执行sql语句
	// 获取Statement对象
	PreparedStatement ps = conn.prepareStatement(sql);
	ps.setString(1, "hehe");
	ps.setInt(2, 3);
	int count = ps.executeUpdate();
	System.out.println("影响的行数:"+count);
	// 关闭资源
	ps.close();


Jdbc查询:
	// 1.加载驱动程序
	Class.forName(driverName);
	// 2.获取数据库连接通道
	Connection conn = DriverManager.getConnection(url, user, password);
	// 3.构建SQL语句
	String sql = "select * from t_user order by userid";
	// 4.执行SQL语句获取查询结果
	PreparedStatement ps = conn.prepareStatement(sql);
	// 执行查询  ResultSet 类似于我们讲的游标 迭代器
	ResultSet rs = ps.executeQuery();// 其实并没有获取到数据,而是指向了第一条数据之前
	// 判断是否有下一条记录并把该记录保存到ResultSet对象中
	while(rs.next()){// 每循环一次取出一条新的记录
		//int id = rs.getInt("userid");
		int id = rs.getInt(1); // 通过列的下标取字段内容,从1开始
		String userName = rs.getString("username");
		String userPassword = rs.getString("password");
		System.out.println(id+" "+userName+" "+userPassword);
	}
	// 5.关闭相关的资源
	rs.close();
	ps.close();
	conn.close();


批处理:
	/**
	 * 通过Statement执行批处理操作
	 *    适用于执行多条不同的sql语句
	 * @throws Exception
	 */
	@Test
	public void testStatementBatch() throws Exception {
		conn = DbUtils.getConnection();
		Statement sts = conn.createStatement();
		sql1 = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'a','b')";
		sql2 = "update t_user set password='111' where userid=43";
		// 添加批处理的sql语句
		sts.addBatch(sql1);
		sts.addBatch(sql2);
		sts.executeBatch();
		DbUtils.close(sts, conn);

	}
	
	/**
	 * 通过PreparedStatement对象执行批处理操作
	 * @throws Exception 
	 * @throws ClassNotFoundException 
	 */
	@Test
	public void testPreparedStatement() throws  Exception {
		conn = DbUtils.getConnection();
		sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,?,?)";
		PreparedStatement ps = conn.prepareStatement(sql);
		/*ps.setString(1, "a1");
		ps.setString(2, "b1");
		ps.addBatch();
		ps.setString(1, "a2");
		ps.setString(2, "b3");
		ps.addBatch();*/
		for(int i = 0 ; i < 10 ; i++){
			ps.setString(1, "a"+i);
			ps.setString(2, "b"+i);
			ps.addBatch();
		}
		
		ps.executeBatch();
		DbUtils.close(ps, conn);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值