后台实质:
插入、删除、修改:
接收页面数据-----加工数据(其他格式数据转换成java数据)-----封装到JavaBean类里(方便数据的传递)----SQL语句(将javaBean类中的数据赋给SQL)-------插入、删除、修改
查询:
1.条件查询:
接收页面数据-----加工数据(其他格式数据转换成java数据)-----封装到JavaBean类里(方便数据的传递)----SQL语句(将javaBean类中的数据赋给SQL作为查询条件)------遍历结果集把数据封装到集合的对象中-----加工数据集合(将java数据转换成其他格式数据)--------发送页面
2.无条件查询:
SQL语句------遍历结果集把数据封装到集合的对象中-----加工数据集合(将java数据转换成其他格式数据)--------发送页面
页面实质:
页面发送数据(或收集、加工数据)----get、post(地址栏、超链接、表单提交)
页面接收数据--------加工数据(转换成响应的格式)-----赋值给对应的变量显示
servlet处理:
接收数据:
一:接收html片段数据
request.getParameter("name");
request.getParameter("password");
二:接收JSON数据
三:接收XML数据
DAO层用JDBC处理:
public void save(Employee e) throws Exception {
Connection conn = null;
try{
conn = DBUtil.getConnection();
PreparedStatement prep = conn.prepareStatement( "insert into king(name,salary,age) values(?,?,?)");//指定列
prep.setString(1, e.getName()); insert into king values(k_seq.nextval,?,?,?);//oracle的sequence
prep.setDouble(2, e.getSalary());
prep.setInt(3, e.getAge());
//PreparedStatement prep =conn.prepareStatement("delete from king where id=?");
//prep.setInt(1, e.getId());
//PreparedStatement prep = conn.prepareStatement("update king set name=?,salary=?,age=?
where id=?");
//prep.setString(1, e.getName());
//prep.setDouble(2, e.getSalary());
//prep.setInt(3, e.getAge());
//prep.setInt(4, e.getId());
conn.setAutoCommit(false);// 禁止自动提交(若不用事务管理的话这“三个”可去掉)
prep.executeUpdate();
conn.commit();// 提交事务
}catch(Exception e1){
e1.printStackTrace();
conn.rollback();// 回滚事务
throw e1;
}finally{
DBUtil.close(conn);
}
}
public List<Employee> findAll() throws Exception {
List<Employee> employees = new ArrayList<Employee>();
Connection conn = null;
try{
conn = DBUtil.getConnection();
PreparedStatement prep = conn.prepareStatement("select * from king");
//PreparedStatement prep = conn.prepareStatement("select * from king where id=?");
//prep.setInt(1, e.getId());
ResultSet rst = prep.executeQuery();
while(rst.next()){
Employee e = new Employee();
e.setName(rst.getString("name"));
e.setSalary(rst.getDouble("salary"));
e.setAge(rst.getInt("age"));
e.setId(rst.getInt("id"));
employees.add(e);
}
}catch(Exception e1){
e1.printStackTrace();
throw e1;
}finally{
DBUtil.close(conn);
}
return employees;
}
/*jdbc工具类:获取数据库连接,关闭连接等方法*/
public class DBUtil {
private static String driver = ConfigUtil.getValue("driver");
private static String url = ConfigUtil.getValue("url");
private static String user = ConfigUtil.getValue("user");
private static String pwd = ConfigUtil.getValue("pwd");
private static ThreadLocal<Connection> connectionHoders = new ThreadLocal<Connection>();
public static synchronized Connection getConnection2() throws Exception{
//先从线程局部变量(看成是一个容器)中取
Connection conn = connectionHoders.get();
if(conn == null){
conn = getConnection();
//以当前线程对象作为key,以conn作为value,放到了一个HashMap里面。
connectionHoders.set(conn);
}
return conn;
}
public static synchronized void close2(){
//以当前线程对象作为key,从HashMap中取对应的value
Connection conn = connectionHoders.get();
if(conn != null){
try {
conn.close();
connectionHoders.set(null);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//获得一个连接方法:
public static Connection getConnection() throws Exception{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,user,pwd);
return conn;
}
//关闭连接方法:
public static void close(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rst){
if(rst != null){
try {
rst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Statement stat){
if(stat != null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rst,Statement stat,Connection conn){
close(rst);
close(stat);
close(conn);
}
public static void close(Statement stat,Connection conn){
close(stat);
close(conn);
}
}
/*读db.properties数据库连接配置文件的工具类*/
public class ConfigUtil {
private static Properties props = new Properties();
static{
/*
* ConfigUtil.class : 获得ConfigUtil的class对象。
* ConfigUtil.class.getClassLoader:获得加载ConfigUtil的类加载器。
* 类加载器的getResourceAsStream方法:会依据指定的路径查找文件,并且返回一个InputStream流。
*/
InputStream ips = ConfigUtil.class.getClassLoader() .getResourceAsStream("util/db.properties");
//创建输入流读取连接配置文件
try {
props.load(ips);
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取db.properties文件失败");
}
}
/*db.properties数据库连接配置文件*/
#mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名
user=root
pwd=
#oracle
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@192.168.0.26:1521:数据库名
#user=xxxxxx
#pwd=123456
输出数据:
一:输出html数据
二:输出JSON数据
三:输出XML数据
Action处理
Action中不用写方法接收数据了,直接写对应页面的数据属性变量就可以接收数据了(类型还是字符串型)
相关推荐
本主题聚焦于"C# USB数据接收与发送",这是一个关键的技术领域,它涉及到通过USB接口进行通信的过程。USB(通用串行总线)允许设备之间进行数据交换,包括个人计算机与其他硬件设备如打印机、扫描仪、移动存储设备等...
然后,我们还需要设置事件处理器来处理串口的数据接收。`DataReceived`事件在串口接收到数据时触发,可以通过以下方式订阅: ```csharp serialPort.DataReceived += new SerialDataReceivedEventHandler...
总之,C++ USB数据接收与发送涉及对USB协议的理解、使用操作系统提供的API或第三方库进行设备交互、数据传输以及错误处理等多个层面的知识。掌握这些知识点,能帮助开发者有效地实现在C++环境中进行USB设备的数据...
由于串口数据接收是异步的,因此需要使用缓冲区来暂存接收到的数据: ```csharp private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)...
4. **数据接收与发送**:在“串口循环接收和发送数据”的程序中,接收部分可能包括设置好串口后,使用循环读取串口接收到的数据,并存储到适当的变量或数组中;发送部分则是在循环中构造要发送的数据,然后通过串口...
本文将详细讲解如何使用C#来实现CAN数据的接收和发送,以及涉及的相关技术点。 首先,要理解CAN总线是一种多主通信网络,主要用于汽车、工业自动化和其他嵌入式系统中的设备间通信。它具有高可靠性、实时性以及错误...
本文将详细探讨如何使用C#进行串口数据接收,并通过网络发送这些数据,以此实现如展厅入口控制媒体播放的功能。 首先,我们要理解串口通信的基本原理。串口通信,也称为串行通信,是一种数据传输方式,数据以单比特...
本文将深入探讨如何使用Socket类接收和发送数据。 首先,我们需要理解Socket类的基本概念。Socket代表了一个网络连接,它允许客户端应用程序与远程服务器进行通信。在Java中,Socket类位于`java.net`包下,提供了...
这通常涉及到状态机的设计,根据不同的状态(如等待接收、接收中、数据处理、发送准备等)执行相应的操作。 为了从PC上位机接收数据,FPGA的UART接收器需要监听串行输入,并在检测到起始位后开始接收数据。一旦接收...
在本文中,我们将深入探讨如何使用C#编程语言来实现RS232串口的数据发送与接收。RS232,全称为串行接口标准,是计算机与其他设备进行串行通信的一种常见方式,广泛应用于各种硬件接口,如打印机、调制解调器等。C#...
使用中断可以实时响应数据接收,避免丢失数据。中断标志需要在`USART_ITConfig()`函数中启用,例如启用RXNE中断(接收数据寄存器非空中断)。 4. **数据接收**: 当串口接收到数据时,数据会存储在USART的DR(数据...
// 数据接收事件处理程序 private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console....
硬件握手是通过额外的控制线来确认数据接收是否准备好,而软件握手则是通过特定的控制字符来控制数据流。 "串口接收"和"23-串口通信"这两个文件名可能分别包含了接收端的代码示例和串口通信的详细教程。通过分析和...
在BLE数据发送接收过程中,首先需要建立设备间的连接。连接成功后,客户端设备可以发现服务器设备提供的服务。这个过程通常涉及扫描、连接和发现服务的步骤。在Android或iOS平台上,这些操作可以通过相应的蓝牙API来...
本篇将详细介绍如何利用MFC来实现串口数据的发送与接收。 串口,也称为COM端口,是计算机上的一种通信接口,用于与外部设备进行数据交换。在MFC中,我们可以使用CSerial类来处理串口通信。以下是一些关键知识点: ...
在易语言中,数据报的发送和接收是网络通信中的基本操作,常用于实现客户端与服务器之间的信息交互。本篇文章将深入探讨易语言中数据报的发送接收机制及其应用。 1. 数据报概述 数据报在网络通信中是传输层的基本...
C# 串口发送与接收数据操作类详解 C# SerialPort 串口发送与接收数据操作类是指通过使用 C# 语言中的 SerialPort 类来实现串口的发送和接收数据操作。该类提供了完整的串口操作功能,包括串口的打开、关闭、发送...
对于数据接收,程序支持接收单个字符和多个字符,这意味着它可以处理不同大小的数据帧。接收的数据会被存储起来,便于后续的通信协议校验。通信协议校验是确保数据在传输过程中没有错误的关键步骤,常见的校验方式有...
总的来说,"Delphi UDP Server发送接收16进制数据"是一个实用的示例,展示了如何在Delphi中利用TUDPServer组件进行网络通信,并处理16进制数据。通过学习和理解这个项目,开发者可以掌握Delphi的网络编程基础,以及...