public String DBMessage(long id){
String dbdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://localhost:3333;databaseName=aidb";
String us="sa";
String pw="sa";
String sql="select * from ColumnItem where id="+id+"";
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
StringBuffer sb= new StringBuffer();
try {
Class.forName(dbdriver);
conn=DriverManager.getConnection(url, us, pw);
stat=conn.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
int counts = rsmd.getColumnCount();
for (int col = 0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
// String colclass=(String) rs.getObject(colname);
sb.append(colname);
sb.append(",");
// sb.append(colclass);
sb.append("\r\n");
System.out.println(colname);
}
// str += rs.getInt("colId");
// str += ",";
// str += rs.getInt("sid");
// str += ",";
// str += rs.getInt("id");
// str += ",";
// str += rs.getString("colCode");
// str += ",";
// str += rs.getString("colName");
// str += ",";
// str += rs.getInt("colPid");
// str += ",";
// str += rs.getInt("colLevel");
// str += ",";
// str += rs.getInt("colType");
// str += ",";
// str += rs.getInt("colLenght");
// str += ",";
// str += rs.getString("colDate");
// str += ",";
// str += rs.getInt("com_id");
// str += ",";
// str += rs.getInt("display");
// str += ",";
// str += rs.getString("formula");
// str += ",";
// str += rs.getInt("isText");
// str += "\r\n";
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
} for里面应该怎么写才能自动获取到表列和表列的值?现表列已经获取到了,表列的值怎么获取?
String dbdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://localhost:3333;databaseName=aidb";
String us="sa";
String pw="sa";
String sql="select * from ColumnItem where id="+id+"";
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
StringBuffer sb= new StringBuffer();
try {
Class.forName(dbdriver);
conn=DriverManager.getConnection(url, us, pw);
stat=conn.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
int counts = rsmd.getColumnCount();
for (int col = 0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
// String colclass=(String) rs.getObject(colname);
sb.append(colname);
sb.append(",");
// sb.append(colclass);
sb.append("\r\n");
System.out.println(colname);
}
// str += rs.getInt("colId");
// str += ",";
// str += rs.getInt("sid");
// str += ",";
// str += rs.getInt("id");
// str += ",";
// str += rs.getString("colCode");
// str += ",";
// str += rs.getString("colName");
// str += ",";
// str += rs.getInt("colPid");
// str += ",";
// str += rs.getInt("colLevel");
// str += ",";
// str += rs.getInt("colType");
// str += ",";
// str += rs.getInt("colLenght");
// str += ",";
// str += rs.getString("colDate");
// str += ",";
// str += rs.getInt("com_id");
// str += ",";
// str += rs.getInt("display");
// str += ",";
// str += rs.getString("formula");
// str += ",";
// str += rs.getInt("isText");
// str += "\r\n";
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
} for里面应该怎么写才能自动获取到表列和表列的值?现表列已经获取到了,表列的值怎么获取?
解决方案 »
- try-with-resources的使用问题
- 父类与子类间,方法名相同参数不同的方法,能算是多态表现形式吗?能算是重载吗?
- 请教简单的数组问题
- 对 Characer类的digit(char ch, int radix)方法的研究
- 求教:一个有一年工作经验的java程序员的学习提升方法,不管你是java的牛人还是菜鸟,都希望大家进来看看,希望大家共同进步.........
- 在jdk下面调用com出问题拉?劳驾知道的进来一下。
- struct架构的问题
- 空指针异常??
- huangyan229 () 请进来取分。
- JAVA小白求助
- MSSQL2000 insert 返回ID 的写法
- 在Eclipse下编译直接通不过,可是直接在命令行下是可以运行的,求解。。。
或者
rs.getInt("colname");
不就行了么。
sid,2,
id,6763,
colCode,BQSJ,
colName,期末数|||实际数,
colPid,0,
colLevel,75122,
colType,0,
colLenght,0,
colDate,2010-07-26 10:51:54.193,
com_id,1,
display,1,
formula,null,
isText,0,colId,75123,
sid,10,
id,6763,
colCode,BNNC,
colName,年初数,
colPid,0,
colLevel,75123,
colType,0,
colLenght,0,
colDate,2010-07-26 10:51:54.193,
com_id,1,
display,1,
formula,null,
isText,0,导出后是这种形式的,我想变成下面这种形式的,应该怎么处理一下?
colId, sid, id, colCode, colName, colPid, colLevel, colType, colLenght, colDate, com_id, 75122,2,6763,BQSJ,期末数|||实际数,0,75122,0,0,2010-07-26 10:51:54.193,1,1,NULL,0
75123,10,6763,BNNC,年初数,0,75123,0,0,2010-07-26 10:51:54.193,1,1,NULL,0
for (int col = 0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
String coltype=rs.getString(colname);
sb.append(colname);
sb.append(",");
sb.append(coltype);
sb.append(",");
sb.append("\r\n");
}不行。
public class Test{
public String DBMessage(long id){
String dbdriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://localhost:3333;databaseName=aidb";
String us="sa";
String pw="sa";
String sql="select * from ColumnItem where id="+id+""; Connection conn=null;
Statement stat=null;
ResultSet rs=null;
StringBuffer sb= new StringBuffer(); try {
Class.forName(dbdriver);
conn=DriverManager.getConnection(url, us, pw);
stat=conn.createStatement();
rs=stat.executeQuery(sql);
while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
int counts = rsmd.getColumnCount();
for (int col = 0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
sb.append(rsmd.getColumnName(col+1)+",");
System.out.println(colname);
}
sb.setLength(sb.length()-1);
sb.append("\r\n");
while(rs.next()){
sb.append(rs.getInt("colId")+",");
sb.append(rs.getInt("sid")+",");
//....自己写
sb.setLength(sb.length()-1);
sb.append("\r\n");
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return sb.toString();
}
}
//楼主这问题还在纠结啊?排版很简单啊,难得是取数据
// str += ",";
// str += rs.getInt("sid");
// str += ",";
// str += rs.getInt("id");
// str += ",";
// str += rs.getString("colCode");
// str += ",";
// str += rs.getString("colName");
// str += ",";
// str += rs.getInt("colPid");
// str += ",";
// str += rs.getInt("colLevel");
// str += ",";
// str += rs.getInt("colType");
// str += ",";
// str += rs.getInt("colLenght");
// str += ",";
// str += rs.getString("colDate");
// str += ",";
// str += rs.getInt("com_id");
// str += ",";
// str += rs.getInt("display");
// str += ",";
// str += rs.getString("formula");
// str += ",";
// str += rs.getInt("isText");
// str += "\r\n";
要是这样的话,你已经给了我答案了,就是上面这种。但是它不是活的、要是换个表查的话就需要改代码,不方便所以...
while(rs.next()){
for(int i=0;i<counts;i++){
sb.append(rs.getObject(i)+",");}
}
楼主要求蛮多的,我不保证正确性,只是提供这种方法你试试。
itId,id,code,itemName,itPid,itemLevel,attribute,calculationFormula,com_id,itemBackupName,display,isRectItem,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
还有个办法算不错,要加很多代码。
string[] type = rsmd.getColumnType(column);
取出来之后
while(rs.next()){
for(int i=0;i<counts;i++){
switch(rsmd.getColumnTypeName(i)){
case “String”:sb.append(rs.getString(i)+",");break;//自己查api
case :
case :
case :
case :
case :
case :
}
//挺复杂的,你要是能把所以类型列出来,代码可重用行就高了。
//估计你又有意见了。。
}
while(rs.next()){
for(int i=0;i<counts;i++){
try {
methodName = "get"+
rsmd.getColumnTypeName(i).substring(0,1).toUpperCase()
+ rsmd.getColumnTypeName(i).substring(1);
//单独写个方法处理字母大小写问题,或者跟我这样。如果有问题,你打印出来看,//只要能得到方法名就可以,比如getString;
Method m=rs.getClass().getMethod(methodName, Integer.class);
//反射原理,第二参数是方法里面的参数的类型
sb.append(m.invoke(i)+",");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
继续纠正
这个方法不熟,原理自己查吧,m.invoke(rs,i);
rs 是ResultSet 的一个实例。
没时间别深究,知道原理有这么回事,查查google,查查api能写出来就可以了。
ResultSetMetaData rsmd = rs.getMetaData();
int counts = rsmd.getColumnCount();
for(int col=0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
String colvalue=rs.getString(colname);
sb.append(colname);
sb.append(",");
sb.append(colvalue);
sb.append(",");
}
sb.append("\r\n");
}
}测试了多次,还是不行啊...
String colname = rsmd.getColumnName(col+1);要是放在for里面就不对、每执行一次就把列名读取一次,没必要。要是放在for外面while里面它就只取第一列,后面的列名就没取了。这是怎么回事?for外面是这样
itId,272425,,272425,,272425,,272425,,272425,,272425,,272425,,272425,,272425,,272425,,272425,,272425,
for里面是这样itId,272425,id,6763,code,1217001,itemName,一年内到期的长期负债,itPid,0,itemLevel,272425,attribute,0,calculationFormula,31323130313030,com_id,null,itemBackupName,null,display,1,isRectItem,null,
itId,272426,id,6763,code,1218001,itemName,其他流动负债,itPid,0,itemLevel,272426,attribute,0,calculationFormula,31323130313030,com_id,null,itemBackupName,null,display,1,isRectItem,null,
itId,272427,id,6763,code,1210100,itemName, 流动负债合计,itPid,0,itemLevel,272427,attribute,0,calculationFormula,313230303130303D313231323030312B313231323230312B313231323230322B313231323230332B313231323135312B313231323135332B313231323233322B313231323137312B313231323137362B313231323234312B313231323139312B313232323830312B313231373030312B31323138303031,com_id,null,itemBackupName,null,display,1,isRectItem,null,
itId,272428,id,6763,code,1222501,itemName,长期借款,itPid,0,itemLevel,272428,attribute,0,calculationFormula,31323230313030,com_id,null,itemBackupName,null,display,1,isRectItem,null,
itId,272429,id,6763,code,1222502,itemName,应付债券,itPid,0,itemLevel,272429,attribute,0,calculationFormula,31323230313030,com_id,null,itemBackupName,null,display,1,isRectItem,null,
itId,272430,id,6763,code,1222701,itemName,长期应付
哦,那段是我copy你的代码没注意。 while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
int counts = rsmd.getColumnCount();
for (int col = 0; col < counts; col++) {
String colname = rsmd.getColumnName(col+1);
sb.append(rsmd.getColumnName(col+1)+",");
System.out.println(colname);
}
不要循环。把这段中的while语句去掉