public void update(Mess mess) { Connection conn = null; PreparedStatement pstmt = null; try { conn = DBUtil.getConnection(); String sql = "UPDATE mess SET name=?, birthday=?, height=?, number=? WHERE number=? OR name=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, mess.getName()); pstmt.setDate(2, new java.sql.Date(mess.getBirthday().getTime())); pstmt.setFloat(3, mess.getHeight()); pstmt.setString(4, mess.getNumber()); pstmt.setString(5, mess.getNumber()); pstmt.setString(6, mess.getName()); pstmt.executeUpdate(); // 执行SQL语句并提交到数据库中 } catch (SQLException e) { e.printStackTrace(); } finally { close(conn, pstmt, null); } }请解释说明一下在修改学生的学号结束之后表中的学生学号信息并未修改是如何解决的?
时间: 2023-11-22 08:52:22 浏览: 27
在修改学生的学号结束之后,表中的学生学号信息并未修改的原因可能是由于SQL语句中使用了 OR 运算符,导致更新操作同时匹配了两个条件:学号和姓名。因此,当更新学号之后,姓名仍然和之前的记录匹配,导致学号信息没有被正确地更新。
为了解决这个问题,可以将 SQL 语句中的 OR 运算符改为 AND 运算符,这样就可以确保只有学号和姓名都匹配时才进行更新操作。另外,也可以在更新操作之前,先查询表中是否已经存在相同的学号或姓名,如果存在,则提示用户修改失败。这样可以避免出现混淆的情况。
相关问题
public void update(Mess mess) { Connection conn = null; PreparedStatement pstmt = null; try { conn = DBUtil.getConnection(); String sql = "UPDATE mess SET name=?, birthday=?, height=?, number=? WHERE number=? OR name=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, mess.getName()); pstmt.setDate(2, new java.sql.Date(mess.getBirthday().getTime())); pstmt.setFloat(3, mess.getHeight()); pstmt.setString(4, mess.getNumber()); pstmt.setString(5, mess.getNumber()); pstmt.setString(6, mess.getName()); pstmt.executeUpdate(); // 执行SQL语句并提交到数据库中 } catch (SQLException e) { e.printStackTrace(); } finally { close(conn, pstmt, null); } }解释说明一下该代码
这段代码是一个Java程序中的一个更新(update)数据库记录的方法。该方法使用了JDBC(Java Database Connectivity)来连接到数据库并执行更新操作。
首先,该方法通过调用DBUtil.getConnection()方法获取与数据库的连接。然后,它将传入的Mess对象的属性值设置为对应的SQL参数,并构造了一个SQL语句,使用了占位符(?)来代替参数。该SQL语句的作用是更新mess表中的记录,根据number或name来定位需要更新的记录。
接着,通过调用prepareStatement()方法创建了一个PreparedStatement对象,并将SQL语句传入该对象。接着,通过调用setString()、setDate()和setFloat()等方法将Mess对象的属性值设置为对应的SQL参数。最后,调用executeUpdate()方法执行SQL语句并将更新提交到数据库中。
如果在执行过程中发生了SQLException异常,则会在控制台打印异常信息。最后,通过调用close()方法关闭连接和PreparedStatement对象。
package demo; import java.sql.*; public class Demo{ public static void main(String args[]) { Connection con=null; Statement sql; ResultSet rs; try{ Class.forName("com.mysql.cj.jdbc.Driver"); //加载JDBC_MySQL驱动 } catch(Exception e){} String uri = "jdbc:mysql://localhost:3306/diyi"+"useSSL = ture&serverTimezone=CST"; String user ="root"; String password ="8888"; try{ con = DriverManager.getConnection(uri,user,password); //连接代码 } catch(SQLException e){} try { sql=con.createStatement(); rs=sql.executeQuery("SELECT * FROM aba"); //查询mess表 while(rs.next()) { String a=rs.getString(1); int id=rs.getInt(2); String b=rs.getString(3); System.out.printf("%s\t",a); System.out.printf("%d\t",id); System.out.printf("%s\t",b); } con.close(); } catch(SQLException e){ System.out.println(e); } } }
这是一个Java程序,用于连接MySQL数据库,并查询aba表中的数据。程序的具体流程如下:
1. 导入需要的Java类库:java.sql.*;
2. 声明变量:Connection con用于存储连接对象,Statement sql用于执行SQL语句,ResultSet rs用于存储查询结果;
3. 加载JDBC_MySQL驱动,使用Class.forName()方法加载com.mysql.cj.jdbc.Driver类;
4. 指定数据库地址、用户名和密码,使用DriverManager.getConnection()方法建立数据库连接;
5. 创建Statement对象,使用executeQuery()方法执行SQL查询语句,将查询结果存储在ResultSet对象中;
6. 使用while循环遍历ResultSet对象,将查询结果输出到控制台;
7. 关闭数据库连接,释放资源。
需要注意的是,在实际使用中,应该对SQLException进行正确的异常处理,并且在最终关闭数据库连接前,应该保证所有数据库操作都已经完成,否则可能会出现资源泄露的情况。
阅读全文