29 HAZİRAN 2011, ÇARŞAMBA
En seviyesinde bağımsız dönüşüm JSON için etkin?
Aşağıdaki kodu bir JSON string JSONArray
JSONObject
ResultSet
dönüştürür.
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){
obj.put(column_name, rs.getBlob(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
obj.put(column_name, rs.getDouble(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
obj.put(column_name, rs.getFloat(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
obj.put(column_name, rs.getNString(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
obj.put(column_name, rs.getString(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
obj.put(column_name, rs.getInt(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
obj.put(column_name, rs.getDate(column_name));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
obj.put(column_name, rs.getTimestamp(column_name));
}
else{
obj.put(column_name, rs.getObject(column_name));
}
}
json.put(obj);
}
return json;
}
}
- Daha hızlı bir yolu var mı?
- Daha az bellek kullanan bir yolu var mı?
Teşekkür ederim!
CEVAP
6 EYLÜL 2011, Salı
Bu daha hızlı yapacak iki şey vardır:
While döngüsünün dışında rsmd.getColumnCount()
Ara hareket. Sütun sayısı satır üzerinde değişiklik değil.
Her sütun türü için, böyle bir şey diyorsun sonunda
obj.put(column_name, rs.getInt(column_name));
Biraz daha hızlı sütun dizini sütun değerini almak için kullanılması daha doğru olur:
obj.put(column_name, rs.getInt(i));
Bunu Paylaş:
Java eğer herhangi bir sonuç olup olma...
Bir Java null int bir değer için kontr...
Nasıl OLANLARI bir seviyesinde bağımsı...
Nasıl iPhone SDK üzerinde etkin bir İn...
Seri hale getirilirken jQuery JSON içi...