ROWSET的问题--佳佳

jiajia80 2002-01-15 08:22:23
有谁研究过ROWSET的问题,为什么我按照例子做了一个,但只能查询,不能更新和插入新的记录。这是佳佳的第一个问题,希望大家能鼎立相助,小女子感激不尽!
...全文
203 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsilver 2002-01-18
  • 打赏
  • 举报
回复
“更新只能更新一条,其实插入也只能一次一条。 ”是针对Resultset而言
xsilver 2002-01-18
  • 打赏
  • 举报
回复
更新只能更新一条,其实插入也只能一次一条。
xsilver 2002-01-18
  • 打赏
  • 举报
回复
ResultSet接口提供了访问由执行语句产生的数据表,这是个存在于内存之中的视图,对它的修改对数据库来说是毫无关系的。老实说我只用它来访问sql语句执行结果集,真正要增加或更新记录还是使用java.sql.Statement中的executeUpdate()方法,最后用java.sql.Connection 中的commit()。你代码里面设置了自动提交其实和Resultset毫无关系。
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
并且提示以下问题:[Microsoft][SQLServer JDBC Driver]Can't start a cloned connection while in manual transaction mode.实在是不明白了,各位大哥哥快点帮帮我吧
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
我是在SUN网站上下的,都是按照它的例子,更新只能更新一条,插入根本就不行,我想不明白问题出在那里了:(
xsilver 2002-01-15
  • 打赏
  • 举报
回复
你可以参考一下java.sql.resultset
你也可以试试用ORACLE Jdeveloper这个开发工具,ORACLE提供了一个rowset包,很方便。
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
大家能不能具体点,我不是很懂的!
pengchy 2002-01-15
  • 打赏
  • 举报
回复
没有提交commit
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
那我怎么搞成不只读?
lauweiaaa 2002-01-15
  • 打赏
  • 举报
回复
你搞成只读了
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
55555555555...
jackyz 2002-01-15
  • 打赏
  • 举报
回复
粗看了一下,似乎没什么问题呢。不明白了。
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
代码都在上面了,他只能查询,不能更新,和插入,不知道为什么
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
TestBean.java
package test;

import java.rmi.*;
import javax.ejb.*;
import javax.sql.*;
import javax.naming.InitialContext;
import weblogic.jndi.*;
import java.util.Properties;
import javax.naming.*;
import java.sql.*;
import sun.jdbc.rowset.*;

public class TestBean implements SessionBean {
private SessionContext sessionContext;
private Context ctx = null;
private DataSource ds = null;
public TestBean(){}
public void ejbCreate()throws javax.ejb.CreateException {
Properties p= new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.T3InitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://192.168.1.210:7001");
try{
javax.naming.Context ctx = (javax.naming.Context) new javax.naming.InitialContext(p);
ds = (javax.sql.DataSource)ctx.lookup("apache");
} catch (Exception e) {
System.out.println(e.getMessage());
throw new CreateException();
}
}
public RowSet getApache()throws SQLException{
Connection con = null;
ResultSet rs;
CachedRowSet crs;
try{
con = ds.getConnection();
con.setAutoCommit(true);
//con.getTransactionIsolation();
java.sql.Statement stmt = con.createStatement();
rs = stmt.executeQuery("select * from apache");
crs = new CachedRowSet();
crs.populate(rs);
crs.setTableName("apache");
rs.close();
stmt.close();

}finally {
if (con != null)
con.close();
}
return crs;
}
public void updateApache(RowSet rs) throws SQLException {
Connection con = null;
try{
CachedRowSet crs = (CachedRowSet)rs;
con = ds.getConnection();
con.setAutoCommit(true);
//con.getTransactionIsolation();
crs.acceptChanges(con);
} finally{
if (con != null)
con.close();
}
}

public void ejbRemove() throws RemoteException {
}
public void ejbActivate() throws RemoteException {
}
public void ejbPassivate() throws RemoteException {
}
public void setSessionContext(SessionContext sessionContext) throws RemoteException {
this.sessionContext = sessionContext;
}
}
-------------------------------------------------------
Test.java
package test;

import java.rmi.*;
import java.sql.*;
import javax.sql.*;
import javax.ejb.*;

public interface Test extends EJBObject {
public javax.sql.RowSet getApache() throws SQLException, RemoteException;
public void updateApache(javax.sql.RowSet rs) throws SQLException, RemoteException;
}
---------------------------------------------------
TestHome.java
package test;

import java.rmi.*;
import javax.ejb.*;

public interface TestHome extends EJBHome {
public Test create() throws RemoteException, CreateException;
}
--------------------------------------------------------
Applet1.java

package test;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import sun.jdbc.rowset.*;
import javax.naming.*;
import java.util.Properties;
import javax.rmi.PortableRemoteObject;
import java.sql.ResultSet;


public class Applet1 extends Applet {
boolean isStandalone = false;
/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

/**Construct the applet*/
public Applet1() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
Properties p= new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.T3InitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://192.168.1.210:7001");
try{
Context ctx = new InitialContext(p);
Object ref = ctx.lookup("Test");
TestHome testhome = (TestHome) PortableRemoteObject.narrow(ref, TestHome.class);
Test test = testhome.create();
CachedRowSet rset = (CachedRowSet)test.getApache();
rset.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
rset.setConcurrency(ResultSet.CONCUR_UPDATABLE);
for(int i=0;rset.next();i++) {
String name = rset.getString("name");
int ld = rset.getInt("id");
if (ld==8) {
rset.updateString("name",rset.getString("name")+"hello");
rset.updateRow();
rset.moveToCurrentRow();
test.updateApache(rset);
}
System.out.println("name="+name);
}
}catch (Exception e) {
System.out.println("错误信息"+e.getMessage());

}
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
/**Main method*/
public static void main(String[] args) {
Applet1 applet = new Applet1();
applet.isStandalone = true;
Frame frame;
frame = new Frame() {
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public synchronized void setTitle(String title) {
super.setTitle(title);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
}
};
frame.setTitle("Applet Frame");
frame.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400,320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
}
jackyz 2002-01-15
  • 打赏
  • 举报
回复
put the sourcecode here.
jiajia80 2002-01-15
  • 打赏
  • 举报
回复
我按照你的办法试了,但还是老样子,不知道怎么搞的,为什么JAVA怎么难学。你在帮我想想吧,我会很感激你的:)
jackyz 2002-01-15
  • 打赏
  • 举报
回复
[Microsoft][SQLServer JDBC Driver]Can't start a cloned connection while in manual transaction mode.

message 说明你对于 connection 的处理不符合 sqlserver 的要求。
请寻找 connection.setAutoCommit(false) 类似的语句,注释掉这一句再试试看。

good luck.

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧