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);
}
jdbc之Statement和Preparement的更多相关文章
- jdbc执行Statement接口的步骤
jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = ...
- JDBC的Statement对象
以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/statements.html: 一旦获得了数据库的连接,就可以和数据库进行交互.JDBC的Statem ...
- jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?
Statement和PreparedStatement的功能主要是对sql语句的执行 区别 (1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划Pre ...
- JDBC与Statement和PreparedStatement的区别
一.先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入 ...
- JDBC PreparedStatement Statement
参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...
- JDBC之Statement 接口的测试(存在sql注入风险)
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
- JDBC之Statement、PreparedStatement和CallableStatement
JDBC提供了Statement.PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用 ...
- JDBC:Statement问题
1.Statement问题 2.解决办法:通过PreparedStatement代替 实践: package com.dgd.test; import java.io.FileInputStrea ...
- jdbc 08: statement应用场景
jdbc连接mysql,statement的应用场景 package com.examples.jdbc.o8_statement应用场景; import java.sql.*; import jav ...
随机推荐
- SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Windows故障转移群集
WSFC 群集 (WSFC cluster)“Windows Server 故障转移群集”(WSFC) 群集是一组独立的服务器,它们共同协作以提高应用程序和服务的可用性. 故障转移群集实例 (Fail ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- iOS设计模式 - 装饰
iOS设计模式 - 装饰 原理图 说明 1. cocoa框架本身实现了装饰模式(category的方式实现了装饰模式) 2. 装饰模式指的是动态的给一个对象添加一些额外的职责,相对于继承子类来说,装饰 ...
- Linux入门-4 Linux下获取帮助
help MAN INFO doc help <command> -h或<command> --help whatis <cmd> MAN man <comm ...
- redis-day1
1 Redis 概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务软件很像, ...
- [EffectiveC++]item3:尽可能使用const
将某些东西声明为const可以帮助编译器检测出错误用法,const 编译器强制实施bitwise constness,但是你code的时候应该使用“概念上的常量性” 当const和non-const成 ...
- linux性能系列--cpu
一.先看看什么是CPU? 回答:中央处理器(Central Processing Unit)的缩写,即CPU,CPU是电脑中的核心配件,只有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和 ...
- 使用SN.exe对.Net生成的程序集进行签名
CLR用数字签名的方式防止程序集发布后被人篡改,也可以确定发布人,这个方法就是使用公/私钥对,然后对程序集所有模块取一个哈希生成一个数字签名放在程序集的元数据中. 1.创建公/私钥对 创建公/ ...
- 1295. [SCOI2009]最长距离【最短路】
Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...
- 反向ajax实现
在过去的几年中,web开发已经发生了很大的变化.现如今,我们期望的是能够通过web快速.动态地访问应用.在这一新的文章系列中,我们学习如何使用反 向Ajax(Reverse Ajax)技术来开发事件驱 ...