如何在NetBeans中创建临时表?SQL存入临时表报错解决
在NetBeans中用JDBC创建SQL Server临时表并插入数据的正确姿势
嘿,我来帮你搞定这个问题!你遇到的The statement did not return a result set异常,本质是用错了JDBC的执行方法——让我给你拆解清楚:
为什么会报错?
你写的SELECT INTO #person FROM registry语句,在SQL Server里属于DDL(数据定义语言)操作,它的作用是创建临时表并把查询结果插入进去,执行完成后不会返回任何结果集。但你用了executeQuery()方法,这个方法是专门用来执行会返回结果集的SELECT查询的,两者不匹配,所以JDBC抛出了这个异常。
正确的操作步骤
1. 用合适的方法执行临时表创建语句
对于不返回结果集的SQL(比如DDL、INSERT/UPDATE/DELETE),应该用executeUpdate()或者execute()方法来执行。示例代码如下:
// 假设con已经是你获取到的数据库连接对象 String createTempTableSQL = "SELECT name, age INTO #person FROM registry"; try (Statement stmt = con.createStatement()) { // executeUpdate会返回受影响的行数,也就是插入到临时表的数据量 int insertedRows = stmt.executeUpdate(createTempTableSQL); System.out.println("临时表创建成功,共插入 " + insertedRows + " 条数据"); } catch (SQLException e) { e.printStackTrace(); }
2. 查询临时表的数据(如果需要)
如果之后要读取临时表的内容,再单独写SELECT语句,用executeQuery()来获取结果集:
String queryTempTableSQL = "SELECT name, age FROM #person"; try (Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(queryTempTableSQL)) { // 遍历结果集处理数据 while (rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("姓名:" + name + ",年龄:" + age); } } catch (SQLException e) { e.printStackTrace(); }
额外注意事项
- SQL Server的
#person是会话级临时表,只要当前数据库连接没有关闭,它就会存在;连接关闭后会自动被销毁,不用手动删除。 - 尽量使用
try-with-resources语法(如上代码所示),它会自动帮你关闭Statement、ResultSet这些资源,避免内存泄漏。
内容的提问来源于stack exchange,提问作者luana nastasi
相关产品推荐
相关产品推荐

