zoukankan      html  css  js  c++  java
  • Java连载138-数据库删除数据以及编译预处理

    一、删除数据

    • DELETE语句如下
    DELETE FROM <表名> WHERE <条件表达式>
    
    • 方法:(1)利用Statement实例执行静态DELETE语句完成;(2)利用PreparedStatement实例通过执行动态DELETE语句完成;(3)利用CallableStatement实例通过执行存储过程完成。
    • 第一种方式:
    String sql = "delete from tb_record where date<'2017-2-14'";
    statement.executeUpdate(sql);
    
    • 第二种方式:
    String sql = "delete from tb_record where date<?";
    PreparedStatement prpdStmt = connection.preparedStatement(sql);
    prpdStmt.setString(1,'2017-2-14');//为日期型参数赋值
    prpdStmt.executeUpdate();
    
    • 注意点:当前未使用java.sql.Date,所以方法setString(int parameterIndex,String x),如果使用了java.sql.Date,那么使用方法setDate(int parameterIndex,java.sql.Date date)
    • 第三种方式:
    String sql = "{call pro_record_delete_by_date(?)}";
    CallableStatement cablStmt = conneciton.prepareCall(call);
    cablStmt.setString(1,"2017-2-14");
    cablStmt.executeUpdate();
    
    • 下面我们通过一个实例来演示代码
    package com.bjpowernode.java_learning;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class D138_1_deleteSQL {
    	private static final String URL = "jdbc:Access:///e:/xsgl.mdb";
    	static {
    		try {
    			Class.forName("com.hxtt.sql.access.AccessDriver");
    			
    		}catch(ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	public static void main(String args) {
    		try {
    			Connection conn = DriverManager.getConnection(URL);
    			Statement statement = conn.createStatement();
    			String sql = "delete from tb_record where Salary<1000";
    			statement.executeUpdate(sql);
    			statement.close();
    			conn.close();
    		}catch(SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
    
    • 下面通过PreparedStatement实例一次执行多条DELETE语句
    package com.bjpowernode.java_learning;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class D138_2_PreparedStatementDelete {
    	private static final String URL = "jdbc:Access:///e:/xsgl.mdb";
    	static {
    		try {
    			Class.forName("com.hxtt.sql.access.AccessDriver");
    			
    		}catch(ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	public static void main(String args) {
    		try {
    			Connection conn = DriverManager.getConnection(URL);
    			String[] names = {"部门经理","会计"};
    			String sql = "delete from tb_record where duty=?";
    			PreparedStatement prpdStmt = conn.prepareStatement(sql);
    			prpdStmt.clearBatch();
    			for(int i=0;i<names.length;i++) {
    				prpdStmt.setString(1,names[i]);
    				prpdStmt.addBatch();
    			}
    			prpdStmt.executeBatch();
    			prpdStmt.close();
    			conn.close();
    		}catch(SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
    

    二、编译预处理

    • PreparedStatement始于编译预处理有关的类,是Statement的一个子类,它与Statement类的一个重要区别是:用Statement定义的语句是一个功能明确而具体的语句,而用PraparedStatement类定义的SQL语句 中则包含一个或者多个?占位符,他们对应多个IN参数,带占位符的SQL语句可以被编译,而在后续执行过程中,这些占位符需要使用set方法设置为具体的IN参数值,再将这些语句发送到数据库获得执行。
    • 给出若干编译预处理语句实例说明PreparedStatement的用法
    • (1)创建对象
    PraparedStatement pstmt = conn.prapareStatement("update tablel set=? where  y=?");
    
    • 对象pstmt中包含了语句"update tablel set x=? where y=?",该语句被发送到DBMS进行编译预处理,为执行做准备
    • (2)为每个IN参数设定参数值,即每个占位符?对应一个参数值。设定参数值是通过调用setXxx方法实现的,其中Xxx是与参数相对应的类型,加入上面例子中的参数类型为long,则用下面的代码为参数设定值。
    pstmt.setLong(1,123456789);
    pstmt.setLong(2,987654321);
    
    • 这里的1,2是与占位符从左到有的次序相对应的序号,他们不是从0开始计数。
    • (3)执行语句
    Pstmt.executeUpdate();
    

    三、源码:

  • 相关阅读:
    Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.
    Spring NoSuchBeanDefinitionException六大原因总结
    深入分析Spring 与 Spring MVC容器
    MyBatis mapper parameterType
    eclipse下的mybatis插件:MyBatipse
    javax.servlet-api 和 servlet-api 区别
    Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别
    dump总结
    操作系统基础知识
    JMM中的Happens-Before原则
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13670376.html
Copyright © 2011-2022 走看看