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的更多相关文章

  1. jdbc执行Statement接口的步骤

    jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = ...

  2. JDBC的Statement对象

    以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/statements.html: 一旦获得了数据库的连接,就可以和数据库进行交互.JDBC的Statem ...

  3. jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?

    Statement和PreparedStatement的功能主要是对sql语句的执行 区别 (1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划Pre ...

  4. JDBC与Statement和PreparedStatement的区别

    一.先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入 ...

  5. JDBC PreparedStatement Statement

    参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...

  6. JDBC之Statement 接口的测试(存在sql注入风险)

    实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...

  7. JDBC之Statement、PreparedStatement和CallableStatement

    JDBC提供了Statement.PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用 ...

  8. JDBC:Statement问题

    1.Statement问题  2.解决办法:通过PreparedStatement代替  实践: package com.dgd.test; import java.io.FileInputStrea ...

  9. jdbc 08: statement应用场景

    jdbc连接mysql,statement的应用场景 package com.examples.jdbc.o8_statement应用场景; import java.sql.*; import jav ...

随机推荐

  1. CC150相关问题

    18.9 动态计算中位数 利用两个堆:一个最大堆,存放小于中位数的值:一个最小堆,存放大于中位数的值. 则两个堆的堆顶即为数组中最中间的两个数. 在插入新元素的时候,我们只要维护两个堆, 使其堆中元素 ...

  2. leetcode Ch6-Data Structure

    1. Sliding Window Maximum class Solution { public: vector<int> maxSlidingWindow(vector<int& ...

  3. 十分钟带你学会Http协议和Tomcat服务器的原理

    1. Http协议 1. 什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准 ...

  4. 沉淀再出发:jetty的架构和本质

    沉淀再出发:jetty的架构和本质 一.前言 我们在使用Tomcat的时候,总是会想到jetty,这两者的合理选用是和我们项目的类型和大小息息相关的,Tomcat属于比较重量级的容器,通过很多的容器层 ...

  5. BZOJ 1015 星球大战starwar 逆向并查集

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1015 题目大意: 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个 ...

  6. (持续更新) CSS属性持续记录

    可以去除ul的li标签自带的圆点list-style-type: none; 可以将自己的光标改变样式:cursor: pointer;

  7. Client/Server 模型 与socket

    Client/Server 模型  Sockets 是以 Client 和 Server 交互通信方式来使用的.典型的系统配置是把 Server 放在一台机器中,而把 Client 放在另一台机器中, ...

  8. Mybatis和Mysql的Json类型

    Mysql5.7新增加了Json类型字段,但是目前Mybatis中并不支持 1.新建MybatisJsonTypeHandler.java import com.fasterxml.jackson.a ...

  9. Discuz!在线中文分词服务

    Discuz!在线中文分词服务是基于API返回分词结果的.在项目中,我们只需要一个函数即可方便地进行分词.关键词提取.以下是根据Discuz!在线分词服务API写的函数,测试可正常运行: 代码代码如下 ...

  10. 3.2 Spark内置RPC框架

    实现的HttpFileServer,但在Spark 2.0.0版本中它也被废弃了,现在使用的是基于Spark内置RPC框架的NettyStreamManager.节点间的Shuffle过程和Block ...