我都搞不懂这道题到底难还是不难...

bbblllyyy 2004-05-07 03:51:53
发在基础类那里结果20多回没人答出...因为原来就是一个jsp上的一段,我就发这里试试了...
有两个类..
class a{
public string x = null;
public string y = null;
}

class b{
a tt[] = new a[10]();
for(int i=0;i<10;i++){
tt[i] = new a();
}

public boolean test(string s){
String sql = "Select * from KeyWord as wt where wt.name='"+s+"'";
ResultSet rs = tcon.executeQuery(sql);
try{
if(rs.next())
{
tt[0].x = rs.getString("name");
tt[0].y = rs.getString("type");
System.out.println(rs.getString("name"));
System.out.println(rs.getString("type"));
}
}
catch(Exception e)
{
e.printStackTrace();
}

}
}


主要问题是
tt[0].x = rs.getString("name"); //运行错误
tt[0].y = rs.getString("type"); //运行错误
System.out.println(rs.getString("name")); //运行正常
System.out.println(rs.getString("type")); //运行正常
这4句,我想把rs里面的列的内容存入tt里面.
为什么同样是getString,前两句错误,后来两句就是对的....?
高手求助!!!

ps:我认为是不是内存分配的问题?顺便问一下,怎么样把一个字符串a完全拷贝到字符串b里面去,然后安全的释放掉a ,而b里面的内容保留不变?
...全文
25 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
chrily 2004-05-07
  • 打赏
  • 举报
回复
只能读取一次 先将列读取赋值给一个变量在做处理
jiankou2001 2004-05-07
  • 打赏
  • 举报
回复
在结果集(行集)
rs.getString("列名");
是只能用一次的!
jiankou2001 2004-05-07
  • 打赏
  • 举报
回复
是只能使用一次。
String name = rs.getString("name");
if (name == null) {
System.out.println("no1");
}else{
System.out.println(name);
}
hyc4132 2004-05-07
  • 打赏
  • 举报
回复
复制对象,将类加上clone借口,这样可以:
把一个字符串a完全拷贝到字符串b里面去,然后安全的释放掉a ,而b里面的内容保留不变.
AbnerChai 2004-05-07
  • 打赏
  • 举报
回复
把a类中的两个属性用get/set方法封装起来。
jkit 2004-05-07
  • 打赏
  • 举报
回复
是只能使用一次。
String name = rs.getString("name");
if (name == null) {
System.out.println("no1");
}else{
System.out.println(name);
}
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
在顶一下...

请问是不是有的数据库真的只能使用一次
rs.getString("name")
的?
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
顶一下..
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7060)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3862)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:
5561)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:338)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:395)

at sqlexe.main(sqlexe.java:26)
minghuitian 2004-05-07
  • 打赏
  • 举报
回复
gz
heresysoar 2004-05-07
  • 打赏
  • 举报
回复
错误是什么
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
顶一下.刷新好像有问题~~~没有人回答吗?
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
heresysoar(小五) 朋友,我主要是想把rs.getString("name")里面的东西存入一个字符串数组里面,当然,里面有些行的name列是空的..
应该怎么做?我原来想把a = rs.getString("name");结果不对.
后来有人向我提议
a = new String(rs.getString("name"));
这样可以了,但如果name列是空的话又出错了...
if(rs.getString("name")==null){
System.out.println("no1");
}else{
System.out.println(rs.getString("name"));
}
运行错误.....
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
不对啊
if(rs.getString("name")==null){
System.out.println("no1");
}else{
System.out.println(rs.getString("name"));
}
运行错误!
heresysoar 2004-05-07
  • 打赏
  • 举报
回复
这样的,
for(int i=0;i<10;i++){
tt[i] = new a();
}
初始化tt这段并没有执行,放在构造函数就大概就ok了
到于后面一个问题,我想你以前学c的吧,java里都是句柄(你可能"想成"是指针),你所说的a,b,都是句柄,不是实实在在的字符串(若你指的是string的话),你说的释放是指释放堆里分配的字符串呢还是指释放a这个句柄?
若你是想弄出两个字符串来(在堆里分配两个),String a=new String("xxx");
String b=new String(a);
至于你要释放堆里的内存(代表a句柄这个),那是java自己的垃圾收集器的事,因为它没有对c++中delete对应的函数, 有个finalize(),是根类object中的,意思和c++中的destructor差不多吧
graygu 2004-05-07
  • 打赏
  • 举报
回复
if(rs.getString("name") == null)
{

}
bbblllyyy 2004-05-07
  • 打赏
  • 举报
回复
汗.这句是打错了

我想问一下,rs.getString("name");假如表里面没有值,怎么判断是空的?
  • 打赏
  • 举报
回复
a tt[] = new a[10]();

???
netfeng 2004-05-07
  • 打赏
  • 举报
回复
for(int i=0;i<10;i++){
tt[i] = new a();
}
这段代码怎么放在这里呢?应该放在析构函数里吧。

String b=a;
a=null;

81,115

社区成员

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

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