JDBC--使用statement接口实现增,删,改operate

本文通过三个示例演示如何使用 Java 的 JDBC 进行数据库操作,包括建立连接、执行 SQL 语句及关闭资源等基本步骤,并展示了面向对象的方法来简化代码。

1.statement接口引入-----用于执行静态SQL语句返回所生成结果的对象。

2.int executeUpdate(String sql)-----支持增删改 

void close(); 关闭数据库连接

封装方法--

package jdbc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DbUtil {

	//数据库地址
	private static String dbUrl="jdbc:mysql://localhost:3306/mybatis_db";
	//用户名
	private static String dbUserName="root";
	//密码
	private static String dbPassword="***********";
	//驱动名称
	private static String jdbcName="com.mysql.jdbc.Driver";
	/**
	 * 获取数据库连接
	 * @return
	 * @throws Exception
	 */
	
	public Connection getCon()throws Exception{
		Class.forName(jdbcName);
		Connection con=DriverManager.getConnection(dbUrl, dbUserName,dbPassword);
		return con;
	}
	
	/**
	 * 关闭连接
	 * @param con
	 * @throws Exception
	 */
	public void close(Statement stmt,Connection con)throws Exception{
		if(stmt!=null){
			stmt.close();
			if(con!=null){
				con.close();
			}

		}
			}
}



方法一:面向对象
package jdbc.chap03;

import java.sql.Connection;
import java.sql.Statement;

import jdbc.util.DbUtil;

public class Demo02 {
	private static DbUtil dbUtil=new DbUtil();
	/**
	 * 添加个人信息
	 * @param personName
	 * @param age
	 * @return
	 * @throws Exception
	 */
	private static int addinformation(String personName,Integer age)throws Exception{
		Connection con=dbUtil.getCon();//获取连接
		
		String sql="insert into t_student values(656,'"+personName+"',"+age+")";
		Statement stmt=con.createStatement();//创建Statement
		int result=stmt.executeUpdate(sql);
		dbUtil.close(stmt, con);//关闭Statement和连接
		return result;
	}
	
	public static void main(String[] args)throws Exception{
		int result=addinformation("Allen", 43);
		if(result==1){
			System.out.println("添加成功了!");
		}else {
			System.out.println("添加失败!");
		}
	}
}

结果::




方法二:

package jdbc.chap03;

import java.sql.Connection;
import java.sql.Statement;

import jdbc.util.DbUtil;

public class Demo01 {

	public static void main(String[] args) throws Exception{
		DbUtil dbUtil=new DbUtil();
		String sql="insert into t_student values(233,'文科',21)";
		Connection con=dbUtil.getCon();//获取数据库连接
		Statement stmt=con.createStatement();//获取Statement
		int result=stmt.executeUpdate(sql);
		System.out.println("操作的结果:"+result+"数据");
		stmt.close();//关闭statement
		con.close();//关闭连接
	}
}


方法三:面向对象
package jdbc.chap03;

import java.sql.Connection;
import java.sql.Statement;

import jdbc.util.DbUtil;
import model.Person;

public class Demo02 {
	private static DbUtil dbUtil=new DbUtil();
	
	/**
	 * 添加个人信息2
	 * @param person
	 * @return
	 * @throws Exception
	 */
	private static int add2(Person person)throws Exception{
Connection con=dbUtil.getCon();//获取连接
		
		String sql="insert into t_student values(null,'"+person.getPersonName()+"',"+person.getAge()+")";
		Statement stmt=con.createStatement();//创建Statement
		int result=stmt.executeUpdate(sql);
		dbUtil.close(stmt, con);//关闭Statement和连接
		return result;
			
	}
	/**
	 * 添加个人信息
	 * @param personName
	 * @param age	
	 * @return
	 * @throws Exception
	 */
	/*private static int addinformation(String personName,Integer age)throws Exception{
		Connection con=dbUtil.getCon();//获取连接
		
		String sql="insert into t_studeMnt values(654,'"+personName+"',"+age+")";
		Statement stmt=con.createStatement();//创建Statement
		int result=stmt.executeUpdate(sql);
		dbUtil.close(stmt, con);//关闭Statement和连接
		return result;
	}*/
	
	public static void main(String[] args)throws Exception{
		/*int result=addinformation("Allen", 43);
		if(result==1){
			System.out.println("添加成功了!");
		}else {
			System.out.println("添加失败!");
		}*/
		//多行注释 ctrl+shift+/
		Person person=new Person("周星驰",28);
		int result=add2(person);
		if(result==1){
			System.out.println("添加成功了!");
		}else {
			System.out.println("添加失败!");
		}
	}	
}

person类:
package model;
/**
 * 个人信息 
 * @author MC-DS
 *
 */

public class Person {

	private int id;
	private String personName;
	private int age;
	
	
	
	public Person(String personName, int age) {
		super();
		this.personName = personName;
		this.age = age;
	}
	public int getId() {	
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPersonName() {
		return personName;
	}
	public void setPersonName(String personName) {
		this.personName = personName;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
### 使用JSP、Servlet和JDBC实现CRUD操作 #### 创建数据库表 为了展示如何通过Java Web应用程序执行CRUD(创建、读取、更新、除),先定义一个简单的`users`表格用于存储用户数据。 ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(150) ); ``` 此SQL语句会建立一张名为`users`的新表,其中包含三个字段:自型整数作为唯一标识符的`id`;字符串类型的`name`用来保存用户名字;以及同样为字符串形式的`email`来记录用户的电子邮件地址[^1]。 #### 设计实体类User.java 在Java项目里表示上述关系模型的一个对象就是所谓的POJO(Plain Old Java Object)。这里给出的是代表单个用户条目的简单版本: ```java public class User { private int id; private String name; private String email; public User() {} // Getters and Setters omitted for brevity. } ``` 该段代码片段展示了怎样构建一个基本的数据传输对象DTO,它映射到之前提到过的MySQL中的`users`表结构上。注意,在实际开发过程中应当补充相应的getter/setter方法以便于访问成员变量。 #### 编写DAO接口及其具体实现 接下来要做的工作是设计持久层组件——即Data Access Objects(DAOs),负责处理来自业务逻辑层的所有关于特定领域对象的操作请求。下面是一个抽象化的例子说明了这一点: ```java // UserDao interface declares methods that operate on Users table records. public interface UserDao { void add(User user); // Insert a new record into the 'users' table. List<User> list(); // Retrieve all entries from this collection as an ArrayList of type User. boolean delete(int userId); // Remove one entry based upon its unique identifier value passed here. User get(int userId); // Fetch single row matching given ID parameter. } // Concrete implementation of above-defined contract, utilizing JDBC technology stack underneath. public class UserDaoImpl implements UserDao { @Override public void add(User user) { /* Implementation details */ } @Override public List<User> list() { /* Implementation details */ } @Override public boolean delete(int userId) { /* Implementation details */ } @Override public User get(int userId) { /* Implementation details */ } // Private helper method to establish connection with DBMS server instance running locally or remotely. private Connection getConnection() throws SQLException { return DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", ""); } } ``` 这段程序清单解释了怎样声明一组API函数原型供客户端调用者使用,并提供了一个具体的子类去完成这些功能的实际编码任务。值得注意的是,对于每一个公开暴露出来的服务端点而言都需要有对应的内部机制支持其正常运转,比如这里的`getConnection()`私有辅助工具就承担起了连接至目标RDBMS实例的任务。 #### 构建控制器部分 - Servlet 最后一步是要搭建起Web容器可识别的服务入口点,也就是常说的HTTP处理器或者叫作Servlet。此类构件通常位于应用架构最外侧的位置,充当着接收外部网络请求的第一道防线角色。以下是针对本案例所编写的相关源码样例: ```java @WebServlet("/user") public class UserController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Handle POST requests like adding/updating/deleting items... // Redirect back after processing form submission actions successfully. RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); dispatcher.forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Deal with GET queries such as fetching lists/forms/pages... // Forward control flow over to view component when necessary. RequestDispatcher dispatcher = request.getRequestDispatcher("/viewUsers.jsp"); dispatcher.forward(request,response); } } ``` 以上摘录下来的两处关键位置分别对应着两种不同性质的消息交换方式:“doPost”专门服务于那些涉及修服务器状态的行为模式,而“doGet”的职责范围则更倾向于查询检索方面的事务。此外还注意到在这两个分支路径末端都安排有一个转发器对象的存在,它的作用在于把当前上下文环境传递给下一个阶段继续沿袭下去直至最终呈现给终端使用者为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值