这不应该是一个非常简单的操作吗?但是,我看到既没有size()也没有length()方法.
在Java中,我试图从ResultSet中测试一个空值,其中列被转换为原始int类型.
int iVal;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {
iVal = rs.getInt("ID_PARENT");
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码片段,有更好的方法来做到这一点,我假设第二个isNull()测试是多余的?
教育我们,谢谢
以下代码ResultSet使用JSONArray和将a转换为JSON字符串JSONObject.
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class ResultSetConverter {
public static JSONArray convert( ResultSet rs )
throws SQLException, JSONException
{
JSONArray json = new JSONArray();
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
int numColumns = rsmd.getColumnCount();
JSONObject obj = new JSONObject();
for (int i=1; i<numColumns+1; i++) {
String column_name = rsmd.getColumnName(i);
if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){
obj.put(column_name, rs.getArray(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
obj.put(column_name, rs.getBoolean(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){ …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的方法,接收ResultSet作为参数,并返回一个包含ResultSet的行计数的int.这是否是这样做的有效方式?
int size = 0;
try {
while(rs.next()){
size++;
}
}
catch(Exception ex) {
System.out.println("------------------Tablerize.getRowCount-----------------");
System.out.println("Cannot get resultSet row count: " + ex);
System.out.println("--------------------------------------------------------");
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
int size = 0;
try {
resultSet.last();
size = resultSet.getRow();
resultSet.beforeFirst();
}
catch(Exception ex) {
return 0;
}
return size;
Run Code Online (Sandbox Code Playgroud)
但是我说错了 com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.
提前感谢指针!
我必须在text [csv]文件中写入大量数据.我使用BufferedWriter来写入数据,大约需要40秒来写入174 MB的数据.这是java提供的最快速度吗?
bufferedWriter = new BufferedWriter ( new FileWriter ( "fileName.csv" ) );
Run Code Online (Sandbox Code Playgroud)
注意:这40秒包括迭代和从结果集中提取记录的时间.:).174 MB是结果集中的400000行.
由于ResultSet包含从动态SQL返回的数据,是否有任何方法可以确定ResultSet是否包含特定的列名?例如,如果我运行rs.getString("Column_ABC");但Column_ABC确实不存在,它将抛出异常.如何测试ResultSet是否可以从名为"Column_ABC"的列中获取数据?
我用过一个ResultSet返回一定数量的行.我的代码是这样的:
ResultSet res = getData();
if(!res.next())
{
System.out.println("No Data Found");
}
while(res.next())
{
// code to display the data in the table.
}
Run Code Online (Sandbox Code Playgroud)
有没有方法可以检查返回的行数ResultSet?或者我必须自己写?
我在Java中使用ResultSet,并且不确定如何正确关闭它.我正在考虑使用ResultSet来构造HashMap,然后关闭ResultSet.这种HashMap技术是否有效,或者是否有更有效的方法来处理这种情况?我需要键和值,所以使用HashMap似乎是一个合乎逻辑的选择.
如果使用HashMap是最有效的方法,我如何在我的代码中构造和使用HashMap?
这是我尝试过的:
public HashMap resultSetToHashMap(ResultSet rs) throws SQLException {
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
HashMap row = new HashMap();
while (rs.next()) {
for (int i = 1; i <= columns; i++) {
row.put(md.getColumnName(i), rs.getObject(i));
}
}
return row;
}
Run Code Online (Sandbox Code Playgroud) 使用JDBC时,我经常遇到类似的结构
ResultSet rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt(1);
// Some other actions
}
Run Code Online (Sandbox Code Playgroud)
我问自己(以及代码的作者)为什么不使用标签来检索列值:
int id = rs.getInt("CUSTOMER_ID");
Run Code Online (Sandbox Code Playgroud)
我听过的最好的解释是关于表现的.但实际上,它是否会使处理速度极快?我不相信,尽管我从未进行过测量.即使按标签检索会慢一点,但在我看来,它提供了更好的可读性和灵活性.
那么有人可以给我很好的解释,避免通过列索引而不是列标签来检索列值吗?这两种方法的优点和缺点是什么(可能是关于某些DBMS)?
java ×10
resultset ×10
jdbc ×5
sql ×2
csv ×1
file ×1
hashmap ×1
json ×1
maintenance ×1
null ×1
optimization ×1
record-count ×1