Connection conn = this.getSession().connection();
PreparedStatement pt = conn.prepareStatement(sql);
ResultSetMetaData metaData = pt.getMetaData();
........ pt.close();
conn.close();
pt.getMetaData() 报错 java.sql.SQLException: 未执行语句句柄: getMetaData
请问这是什么问题
PreparedStatement pt = conn.prepareStatement(sql);
ResultSetMetaData metaData = pt.getMetaData();
........ pt.close();
conn.close();
pt.getMetaData() 报错 java.sql.SQLException: 未执行语句句柄: getMetaData
请问这是什么问题
解决方案 »
- APPLET,用以下公式计算数学常数E的X次方:EX=1+X1/1!+X2/2!+X3/3!+、、、、、、,为什么实现不了
- Unable to connect. Invalid URL.
- 关于调用MyEclipse生成的webservice(xfire)
- 为什么我在运行期间tomcat 时老重载(注:没修改任何文件)
- java连接sqlserver2000出错
- 60分求解wsdl中xlm配置简单问题,另50分在http://community.csdn.net/Expert/topic/4583/4583896.xml?temp=.8164484
- Spring+Hibernate+Struts加载applicationContext.xml文件时报"invalid mapping"错,都察了好几遍了
- Hibernate 的Session flush设计是否有问题?
- struts,org.apache.struts.actions.ForwardAction的问题
- Servlet的问题:看不出那里出错.★★★★:( # !.确认Tomcat是成功调用了Servlet文件,但无法返回正确的JSP页面
- 【求助】GetMethod的使用(The requested URL /services/nicecoin/teacher was not found on )
- 这个选择排序怎么改才可以?
使用rs.getMetaData().getTableName(1))就可以返回表名
rs.getMetaData().getColumnCount()取得列数例子:ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");//得到查询结果,一个数据集
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount(); //得到数据集的列数 rsmd中的结构:om.mysql.jdbc.ResultSetMetaData@132e13d - Field level information:
com.mysql.jdbc.Field@1617189[catalog=test,tableName=MyBean,originalTableName=mybean,columnName=id,originalColumnName=id,mysqlType=3(FIELD_TYPE_LONG),flags= PRIMARY_KEY, charsetIndex=63, charsetName=US-ASCII]
com.mysql.jdbc.Field@64f6cd[catalog=test,tableName=MyBean,originalTableName=mybean,columnName=name,originalColumnName=name,mysqlType=253(FIELD_TYPE_VAR_STRING),flags=, charsetIndex=8, charsetName=Cp1252]
SQLException - if a database access error occurs or this method is called on a closed PreparedStatement 1.数据库访问错误
2.PreparedStatement关闭可能是数据库方面的变化导致访问错误? 好好排查一下呢
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData(); int count = metaData.getColumnCount();
System.out.println(count);
String[] name = new String[count];
for (int i = 0; i < count; i++) {
name[i] = metaData.getColumnName(i + 1);
System.out.println(name[i]);
}
ResultSetMetaData metaData = rs.getMetaData();是通过ResultSet里面的getMetaData()方法 不是PreparedStatement
ResultSet rs2 = pstm.executeQuery();
ResultSetMetaData metaData = pstm.getResultSet().getMetaData();//或者 rs2.getMetaData(); 或者 pstm.getMetaData();原来发现 是你没有了ResultSet rs2 = pstm.executeQuery();所以获取不了
package cn.com.sparknet;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.DataSource;public class T { public static void main(String[] args) throws SQLException { String sql = "";
DataSource ds = null;// 获取数据源
Connection conn = ds.getConnection();
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery(sql);
PreparedStatement pstm = conn.prepareStatement(sql);
ResultSet rs2 = pstm.executeQuery();
ResultSetMetaData metaData = pstm.getResultSet().getMetaData();// pstm.getMetaData();//rs2.getMetaData(); while (rs2.next()) {
System.out.println(rs2.getInt(1) + " " + rs2.getString(2) + " "
+ rs2.getInt(3));
}
int count = metaData.getColumnCount();
System.out.println(count);
String[] name = new String[count];
for (int i = 0; i < count; i++) {
name[i] = metaData.getColumnName(i + 1);
System.out.println(name[i]);
}
}
}
这个是我调试的代码
你试试看 需要修改的
String sql = "";
DataSource ds = null;// 获取数据源
二者都可以,问题是没有执行execute方法