sql 返回一行一列的情况

u010526199 2014-03-11 10:46:11
在刚接触到的java C/S

CSocket t1 = new CSocket();
String str = t1.one("select sum(bsalary) from worker");


CSocket类 通讯类
public String  one(String s) throws UnknownHostException, IOException{
Socket sock = new Socket(ip, duan);
PrintStream out = new PrintStream(sock.getOutputStream());
String st="8#"+s;
out.println(st);
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String s1 = in.readLine();
sock.close();
out.close();
return s1;
}


SSocket类 服务器端类
else if(p==8){
System.out.println("部件查询");
ResultSet s = sk.executeQuery(sql[1]);
st=null;
PrintStream out = new PrintStream(socket.getOutputStream());
s.next();//只遍历一行
st=""+s.getInt(1);
out.println(st);
out.close();

}


以上"select sum(bsalary) from worker"可以返回一行一列的值 意思是计算所有工人的工资


但我如果执行"select cname from component where cvalues=(select max(cvalues) from component)"的话就不行 其意思是查询生产价值最贵的部件 我在sql上执行 他的确是返回一行一列啊 但是在java中就是出错 不知为什么!
...全文
167 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
Connection reset这个是正常的吗?java不懂
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
有报错不??
界面启动...
dnode=员工基本信息管理
dnode=添加员工信息
添加员工信息
dnode=删除员工
删除员工
dnode=所有员工信息
所有员工信息
dnode=车间管理
dnode=添加车间信息
添加车间信息
dnode=修改车间信息
修改车间信息
dnode=删除车间信息
删除车间信息
dnode=查询车间信息
查询车间信息
dnode=生产部件管理
dnode=添加生产部件信息
添加生产部件信息
dnode=修改生产部件信息
修改生产部件信息
dnode=删除生产部件信息
删除生产部件信息
dnode=查询生产部件信息
查询生产部件信息
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
	at java.io.InputStreamReader.read(InputStreamReader.java:167)
	at java.io.BufferedReader.fill(BufferedReader.java:136)
	at java.io.BufferedReader.readLine(BufferedReader.java:299)
	at java.io.BufferedReader.readLine(BufferedReader.java:362)
	at lab.CSocket.one(CSocket.java:271)
	at lab.Node34Panel.downInit(Node34Panel.java:98)
	at lab.Node34Panel.<init>(Node34Panel.java:42)
	at lab.HrMain.valueChanged(HrMain.java:244)
	at javax.swing.JTree.fireValueChanged(JTree.java:2823)
	at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:3194)
	at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:629)
	at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1078)
	at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:287)
	at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTreeSelectionModel.java:170)
	at javax.swing.JTree.setSelectionPath(JTree.java:1598)
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
有报错不??
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
select TOP 1 cname from component ORDER BY cvalues DESC
辛苦了 在sql上是可以返回一行一列的 但是在java中调用
CSocket t1 = new CSocket();
        String str = t1.one("select TOP 1 cname from component
ORDER BY cvalues DESC");
还是不行 我下午去问问老师 谢了
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
select TOP 1 cname from component ORDER BY cvalues DESC
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
如果有两个以上的部件cvalues是相同并且是最大,那你怎么处理?
没有相同价值的部件 只有一个是最大的
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
如果有两个以上的部件cvalues是相同并且是最大,那你怎么处理?
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:
select top 1 cname from component t where cvalues=(select max(cvalues) from component where cname=t.cname)
版主 不行 你返回的是一列的第一个 我要的是返回一个生产价值最大的部件 而一楼的是返回一列的全部部件~囧
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
select top 1 cname from component t where cvalues=(select max(cvalues) from component where cname=t.cname)
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
[quote=引用 3 楼 u010526199 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:] select cname from component where cvalues=(select max(cvalues) from component) 这个可能返回两个或以上的数据
请问怎么改 可以返回一行一列呢[/quote]1楼的可行不?[/quote] 不好意思 我说错了 1楼的不能返回一行一列
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
出什么错?错误信息贴出来
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
[quote=引用 3 楼 u010526199 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:] select cname from component where cvalues=(select max(cvalues) from component) 这个可能返回两个或以上的数据
请问怎么改 可以返回一行一列呢[/quote]1楼的可行不?[/quote] 一楼的在sql中可以返回一行一列 但是
CSocket t1 = new CSocket();
        String str = t1.one("select cname from component t where cvalues=(select max(cvalues) from component where cname=t.cname)");
出错了
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 1 楼 fredrickhu 的回复:
select cname from component t where cvalues=(select max(cvalues) from component where cname=t.cname)
执行语句可以 但是还是出错了
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
引用 3 楼 u010526199 的回复:
[quote=引用 2 楼 DBA_Huangzj 的回复:] select cname from component where cvalues=(select max(cvalues) from component) 这个可能返回两个或以上的数据
请问怎么改 可以返回一行一列呢[/quote]1楼的可行不?
u010526199 2014-03-11
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
select cname from component where cvalues=(select max(cvalues) from component) 这个可能返回两个或以上的数据
请问怎么改 可以返回一行一列呢
發糞塗牆 2014-03-11
  • 打赏
  • 举报
回复
select cname from component where cvalues=(select max(cvalues) from component) 这个可能返回两个或以上的数据
--小F-- 2014-03-11
  • 打赏
  • 举报
回复
select cname from component t where cvalues=(select max(cvalues) from component where cname=t.cname)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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