菜鸟路过.
不知道是不是跟这两个参数有关.
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE总之楼主是以只读方式打开数据库的.
不知道是不是跟这两个参数有关.
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE总之楼主是以只读方式打开数据库的.
解决方案 »
- spring_framework_3.2的Jar包问题
- BAPF 有人用过吗
- 请问各位,23种设计模式都在哪些场合运用到啊。
- 关于实体bean部署到jboss中出现的问题,求解!
- 提示weblogic配置信息过时???
- Tomcat虚拟主机与数据库连接池问题
- Apache 远程访问 TOMCAT 时 为什吗图片一些 CSS东西都找不到,无法在页面上显示
- 用mondrian做过纯B/S结构OLAP数据仓库分析的高手请进
- java问题
- jasperReport+struts2中数据源问题
- ldap效率问题,我的每分钟只能insert700多条记录,正常吗?
- 在STRUTS里怎么配置<data-sources>元素呀?
而要用select <直接写出所有字段>的方式.
试试
这些似乎 只是用于插入之类?
出现这个异常肯定是因为楼主的ResultSet是只读的,至于原因可能和楼主用的数据库和JDBC驱动程序的版本有关,因为有些JDBC驱动程序是不支持可读写结果集的
出现这个异常肯定是因为楼主的ResultSet是只读的,建议重新设置ResultSet st=Connection.getResultSet(.....)其中有参数,具体可以查询java类库!
DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.
SQLServerDriver());
String url ="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test";
String user = "sa";
String password = ""; Connection conn=DriverManager.getConnection(url,user,password); String sql="select col1 from test";
PreparedStatement ps=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs=ps.executeQuery();
rs.absolute(2);
rs.updateString(1,"aaa");
rs.updateRow();
估计是你的数据库驱动程序不支持滚动或者更新光标的请求。
你的数据库是sqlserver,而我的是oracle92,所以......。我的驱动是支持滚动的,有谁使用过oracle的updateString之类的方法成功的,麻烦发个驱动到,先谢过了!
还得看驱动实现了,
而且这样做也慢,
还是用update的好
public abstract PreparedStatement prepareStatement(String sql) throws SQLException一条带有或不带 IN 参数的 SQL 语句可以被预编译并存放在 PreparedStatement 对象中。 该对象可用于有效地多次执行该语句。
注意: 为了处理那些能由预编译得到好处的带参数的 SQL 语句,该方法进行了专门的优化。如果驱动程序支持预编译,prepareStatement 将把该语句发送给数据库进行预编译。有些驱动程序不支持预编译。在这种情况下,在执行 PreparedStatement 语句之前,将不把语句发送到数据库。这对用户没有直接的影响;但是它确实影响某些 SQLExceptions 将由哪个方法抛出 。 参数:
sql - 一个 SQL 语句,它可以包含一个或多个 '?' IN 参数的位置标志符。
返回值:
一个包含该预编译语句的新建的 PreparedStatement 对象。
抛出: SQLException
如果发生了数据访问错误。
2、execute
public abstract boolean execute(String sql) throws SQLException执行一条可能返回多个结果的 SQL 语句。 在某些(非正常)环境下,一个单独的 SQL 语句可能返回多个结果集和/或更新数量。通常,您可忽略该方法,除非您正执行事先知道可能会返回多个结果集的存储过程,或者您动态地执行一个未知的 SQL 字符串。 "execute"、"getMoreResults"、"getResultSet" 和"getUpdateCount" 方法可使得浏览多条结果。 "execute" 方法执行一条 SQL 语句并指示最初的结果形式。可使用 getResultSet 或 getUpdateCount 方法来检索结果,及 getMoreResults 方法来移动到任何后继的结果。 参数:
sql - 任何 SQL 语句
返回值:
如果下一个结果是 ResultSet ,返回 true;如果它是一个更新数量或没有其它结果,返回 false。
抛出: SQLException
如果发生了数据访问错误。
3、executeQuery
public abstract ResultSet executeQuery(String sql) throws SQLException执行一条返回单个 ResultSet 的 SQL 语句。 参数:
sql - 典型地,这是静态的 SQL SELECT 语句
返回值:
包含由查询产生的数据的 ResultSet;永远不为 null 。
抛出: SQLException
如果发生了数据访问错误。 4、executeUpdate
public abstract int executeUpdate(String sql) throws SQLException执行一条 SQL INSERT、UPDATE 或 DELETE 语句。 另外,可执行没有返回值的 SQL 语句,如 SQL DDL 语句。 参数:
sql - 一条 SQL INSERT、UPDATE 或 DELETE 语句或没有返回值的 SQL 语句
返回值:
如果执行 INSERT、UPDATE 或 DELETE 语句返回行数或者为执行没有返回值的语句返回 0
抛出: SQLException
如果发生了数据访问错误。
String query = "SELECT * FROM Books";
ResultSet rs = stat.executeQuery(query);
while (rs.next())
{
if (. . .)
{
double increase = . . .
double price = rs.getDouble("Price");
rs.updateDouble("Price", price + increase);
rs.updateRow();
}
}
Statement stat
= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);这些java core上都有详细地介绍。