首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

关于ResultSet的插入行有关问题

2012-12-27 
关于ResultSet的插入行问题各位好!我今天在操作ResultSet的插入行时程序报错,还请大家帮帮忙解决下,具体程

关于ResultSet的插入行问题
各位好!我今天在操作ResultSet的插入行时程序报错,还请大家帮帮忙解决下,具体程序代码和报错信息如下所示。
报错信息:

java.sql.SQLException: ORA-01732: data manipulation operation not legal on this view

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:543)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2960)
at oracle.jdbc.driver.UpdatableResultSet.execute_insertRow(UpdatableResultSet.java:2217)
at oracle.jdbc.driver.UpdatableResultSet.insertRow(UpdatableResultSet.java:1499)
at com.bean.JdbcDemo4.insertResult(JdbcDemo4.java:77)
at com.bean.JdbcDemo4.main(JdbcDemo4.java:100)



程序代码:
package com.bean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcDemo4 {
private static Connection con;
private static PreparedStatement pstmt;
private static ResultSet rs;
//获得结果集
public static void getResult(){
try {
Class.forName("oracle.jdbc.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "shop", "shop");
String sql="select id,name,gender from employees order by id";
pstmt=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=pstmt.executeQuery();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

}
//显示结果集
public static void showResult(){
try {
System.out.println("ID\t姓名\t性别");
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
String gender=rs.getString("gender");
System.out.println(id+"\t"+name+"\t"+gender);
}
} catch (SQLException e) {
e.printStackTrace();
}

}
//关闭资源
public static void closeAll(){
try {
rs.close();
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
//滚动
public static void srollResult(){
try {
rs.last();//滚动到最后一行
rs.previous();//上移一行
rs.first();//回到第一行
rs.beforeFirst();//第一行
rs.absolute(-3);//倒数第三行
rs.absolute(3);//正数第三行
rs.relative(-1);//上移一行
rs.relative(-2);//上移二行
} catch (SQLException e) {
e.printStackTrace();
}

}
//插入行
public static void insertResult() {
try {
rs.moveToInsertRow();
rs.updateInt("id",5);
rs.updateString("name","小强");
rs.updateString("gender","女");
rs.insertRow();
rs.moveToCurrentRow();
} catch (SQLException e) {
e.printStackTrace();
}
}
//更新行
public static void updateResult(){


try {
rs.first();
rs.updateString("name", "黄四");
rs.updateRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
//测试方法
public static void main(String[] args) {

getResult();
insertResult();
//updateResult();
//srollResult();
//showResult();
closeAll();


}

}

[解决办法]
你试图操作的这个employees 不是个数据表,是个视图,直接插入是不允许的
[解决办法]
楼上你说的不是很理解。
employees是数据表,不可能是视图呀,这个表中我还放了三条数据呢。
[解决办法]

引用:
楼上你说的不是很理解。
employees是数据表,不可能是视图呀,这个表中我还放了三条数据呢。

你打开你说的这个employees数据表的创建语句,是CREATE TABLE employees?
还是CREATE VIEW employees?
[解决办法]
是CREATE TABLE employees,这个你可以放心,没有问题。
[解决办法]
在你数据库中没有id为5数据的前提下改为下面的方式,实验一下。
rs.updateInt(1,5);
rs.updateString(2,"小强");
rs.updateString(3,"女");
[解决办法]
还是报错
java.sql.SQLException: ORA-01732: data manipulation operation not legal on this view

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:543)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2960)
at oracle.jdbc.driver.UpdatableResultSet.execute_insertRow(UpdatableResultSet.java:2217)
at oracle.jdbc.driver.UpdatableResultSet.insertRow(UpdatableResultSet.java:1499)
at com.bean.JdbcDemo4.insertResult(JdbcDemo4.java:77)
at com.bean.JdbcDemo4.main(JdbcDemo4.java:100)

[解决办法]
你重新建立一个新表employees1,纯的,然后用这个表试验一下。
说不定是你的现在这个表,牵扯到表锁定,触发器之类的相关操作了,可能性不好确定。

热点排行