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 ...
随机推荐
- Visual studio 2015已经停止工作无限重启
今天遇到一个问题,某个文件在撤销的时候vs报错,然后提示到路径 “C:\Users\username\AppData\Roaming\Microsoft\VisualStudio\14.0\***.x ...
- Shell使用手册
1.循环数组 list=(20180531 20180430 20180331 20180228 20180131 20171231 20171130 20171031 20170930 201708 ...
- 使用TryUpdateModel进行数据更新
在控制器中可以使用TryUpdateModel或者UpdateModel方法来对指定的数据Model进行更新,如图所示的更新操作. POST请求数据如下所示 使用如下代码就可以对指定的字段进行更新 使 ...
- January 06 2017 Week 1st Friday
Victory won't come to me unless I go to it. 胜利是不会向我走来的,我必须自己走向胜利. I wish I can walk from one victory ...
- 阿里云 CentOS 镜像和 EPEL 源
配置阿里云网络yum源 阿里云镜像源地址http://mirrors.aliyun.com/ 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.re ...
- 软工团队 - 预则立&&他山之石
软工团队 - 预则立&&他山之石 团队任务计划 时间 人员 任务 10.23-10.29 张昭锡 初拟Android代码规范 李永盛 初拟PHP代码规范 刘晨瑶 初拟Git代码规范 刘 ...
- Python正则表达式(总)
转载请标明出处: http://www.cnblogs.com/why168888/p/6445044.html 本文出自:[Edwin博客园] Python正则表达式(总) search(patte ...
- 两天学会css基础(一)
什么是css?css的作用是什么? CSS 指层叠样式表 (Cascading Style Sheets)主要作用就是给HTML结构添加样式,搭建页面结构,比如设置元素的宽高大小,颜色,位置等等. 学 ...
- Xposed模块开发基本方法记录
由于某些课程实验的要求,需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现.虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed ...
- cogs 2355. [HZOI 2015] 有标号的DAG计数 II
题目分析 来自2013年王迪的论文<浅谈容斥原理> 设\(f_{n,S}\)表示n个节点,入度为0的点集恰好为S的方案数. 设\(g_{n,S}\)表示n个节点,入度为0的点集至少为S的方 ...