Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以jdbc作为列表获取整行_Java_Sql_Excel_Jdbc - Fatal编程技术网

Java 以jdbc作为列表获取整行

Java 以jdbc作为列表获取整行,java,sql,excel,jdbc,Java,Sql,Excel,Jdbc,我需要从多个表中获取数据,并将每个表导出到excel表中。我不想使用getXXX()方法,因为有很多列,我不知道每列的数据类型。我需要获取整行并存储在结果列表中。 我使用getObject()获取了每一列,还使用MetaData.getColumnClassName()获取了类类型 比如说 Object val = resultSet.getObject(i); 我尝试使用getColumnClassName()将此val强制转换为其实际类型,但强制转换时出现错误 谁能帮帮我吗 公共类行{ p

我需要从多个表中获取数据,并将每个表导出到excel表中。我不想使用
getXXX()
方法,因为有很多列,我不知道每列的数据类型。我需要获取整行并存储在结果列表中。 我使用
getObject()
获取了每一列,还使用
MetaData.getColumnClassName()
获取了类类型

比如说

Object val = resultSet.getObject(i);
我尝试使用
getColumnClassName()
将此val强制转换为其实际类型,但强制转换时出现错误

谁能帮帮我吗

公共类行{

public Map<Object, Class> row;
public static Map<String, Class> TYPE;

static {
    TYPE = new HashMap<String, Class>();
    TYPE.put("INTEGER", Integer.class);
    TYPE.put("NUMERIC", BigDecimal.class);
    TYPE.put("DOUBLE", Double.class);
    TYPE.put("VARCHAR2", String.class);

}

public Row() {
    row = new HashMap<Object, Class>();
}

public <t> void add(t data) {
    row.put(data, data.getClass());
}

public void add(Object data, String sqlType) {
    add((Row.TYPE.get(sqlType)) data);
}

public static void formTable(ResultSet rs, List<Row> table) throws SQLException {
    if(rs == null)
        return;
    ResultSetMetaData rsmd = rs.getMetaData();
    int colCt = rsmd.getColumnCount();
    while(rs.next()) {
        Row row = new Row();
        for(int i = 0; i < colCt; i++) {
            row.add(rs.getObject(i), rsmd.getColumnTypeName(i));
        }
        table.add(row);
    }
}
public static void main(String[] args) {

}
公共地图行;
公共静态地图类型;
静止的{
TYPE=newhashmap();
TYPE.put(“INTEGER”,INTEGER.class);
TYPE.put(“NUMERIC”,BigDecimal.class);
类型。put(“双”,双。类);
TYPE.put(“VARCHAR2”,String.class);
}
公共行(){
行=新HashMap();
}
公共无效添加(t数据){
row.put(data,data.getClass());
}
公共void添加(对象数据,字符串sqlType){
添加((Row.TYPE.get(sqlType))数据);
}
公共静态void formTable(ResultSet rs,List table)引发SQLException{
如果(rs==null)
返回;
ResultSetMetaData rsmd=rs.getMetaData();
int colCt=rsmd.getColumnCount();
while(rs.next()){
行=新行();
for(int i=0;i
}请尝试以下代码:

Connection connection = DriverManager.getConnection("URL", "USERNAME", "PASSWORD");
PreparedStatement statement = connection.prepareStatement("select * from table");
ResultSet resultSet = statement.executeQuery();

if (resultSet != null) {
    while (resultSet.next()) {
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {

            int type = resultSetMetaData.getColumnType(i);
            if (type == Types.VARCHAR || type == Types.CHAR) {
                 System.out.println(resultSet.getString(i));
            } else {
                 System.out.println(resultSet.getLong(i));
            }
        }

         System.out.println("-----------");
    }
}
Connection-Connection=DriverManager.getConnection(“URL”、“用户名”、“密码”);
PreparedStatement=connection.prepareStatement(“从表中选择*);
ResultSet ResultSet=statement.executeQuery();
if(resultSet!=null){
while(resultSet.next()){
ResultSetMetaData ResultSetMetaData=resultSet.getMetaData();

对于(inti=1;i步骤1:获取元数据

ResultSetMetaData rsmd;
rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
int[] columnsType = new int[numColumns + 1];
columnsType[0] = 0;
for (int i = 1; i <= numColumns; i++) 
    columnsType[i] = rsmd.getColumnType(i);
ResultSetMetaData rsmd;
rsmd=rs.getMetaData();
int numColumns=rsmd.getColumnCount();
int[]columnsType=新的int[numColumns+1];
columnsType[0]=0;
对于(int i=1;i
公共类EXECUTEQUERY实现模块{
私有静态最终日期格式sdf=新的SimpleDataFormat(“yyyy-MM-dd HH:MM:ss”);
私有字符串用户标识;
字符串结果=”;
字符串resp=“”;
静态整数计数=1;
私有最终记录器log=Logger.getLogger(“EXECUTEQUERY”);
私有void dbg(字符串msg){
log.info(userId+“:”+msg);
}
私有无效dbg(例外情况除外){
log.info(例如getMessage());
例如printStackTrace();
}
私有无效uDbg(字符串消息){
log.info(userId+“:”+msg);
}
私有无效uDbg(例外情况除外){
uDbg(例如getMessage());
例如printStackTrace();
}
公共字符串main(UserContext UserContext,String reqXml){
dbg(“收到的查询为”+reqXml);
字符串响应;
userId=userContext.getUserId();
if(userContext.getAction().equals(“EXECUTEQUERY”)){
if(reqXml==null | | reqXml.equals(“”){
result=“!请输入查询”;
}否则{
结果=getQueryResult(userContext,reqXml);
}
}
返回结果;
}
/***
* 
*用于在@shyamla yadav创建的后端添加搜索记录
*@param userContext
*@param reqXml
*/
public void addQueryLog(UserContext UserContext,String reqXml){
dbg(“内部addQueryLog方法请求为”+reqXml);
userId=userContext.getUserId();
dbg(userId+“此用户正在从屏幕中选择值”);
System.out.println(“接收请求为”+reqXml);
PreparedStatement pStmt=null;
连接EODCNN=null;
dbg(“接收日志的addQueryLog”+reqXml);
日期=新日期();
java.sql.Date sqlDate=new java.sql.Date(Date.getTime());
eodConn=EODConnectionFactory.getInstance().getFCConnectionFromPool();
试一试{
pStmt=eodConn.prepareStatement(“插入EOD_QRY_EXEC_日志(QRY_EXEC_时间戳、QRY_文本、操作员ID)\n”
+“值(?,?)”;
setTimestamp(1,新的java.sql.Timestamp(System.currentTimeMillis());
pStmt.setString(2,reqXml);
pStmt.setString(3,用户ID);
pStmt.executeQuery();
}catch(SQLException-ex){
dbg(“例外情况为”+ex);
返回;
}
EODConnectionFactory.ReturnFCConnectionPool(eodConn);
返回;
}
/*
此方法返回带分隔符的查询例外表数据。
@夏姆拉尔,
*/
公共字符串getQueryResult(UserContext UserContext,String reqXml){
字符串字段_值=”;
字符串lsitofquery=“”;
字符串结果列表=”;
dbg(“内部getQueryResult方法”);
连接EODCNN=null;
语句stmt=null;
eodConn=EODConnectionFactory.getInstance().getFCConnectionFromPool();
试一试{
stmt=eodConn.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
结果集rs=stmt.executeQuery(reqXml);
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
dbg(“列总数为:“+columnCount”);
int rsCount=1;
while(rs.next()){
如果(rsCount==1){
对于(inti=1;i0?lsitofquery+“>”:“!表为空”;
addQueryLog(userContext,reqXml);
返回lsitofquery+“>”;
}
}

以及您得到的错误?另外,为什么您不知道您要查询的列?我建议使用Jetcel而不是JDBC。Excel实际上不是关系数据库。我认为了解列名及其类型只会有所帮助here@Woot4M
String s;
Object o;
while (rs.next()) {
    for (int i = 1; i <= numColumns; i++) {
        if (columnsType[i] == java.sql.Types.NUMERIC || columnsType[i] == java.sql.Types.CHAR || columnsType[i] == java.sql.Types.VARCHAR) {
            s = rs.getString(i);
        } else if (columnsType[i] == java.sql.Types.NVARCHAR) {
            s = rs.getNString(i);
        } else if (columnsType[i] == java.sql.Types.BOOLEAN) {
            // TODO
        } else if (columnsType[i] == java.sql.Types.FLOAT || columnsType[i] == java.sql.Types.DOUBLE) {
            // TODO
        } else if (columnsType[i] == java.sql.Types.TINYINT || columnsType[i] == java.sql.Types.SMALLINT || columnsType[i] == java.sql.Types.INTEGER || columnsType[i] == java.sql.Types.BIGINT) {
            // TODO
        } else if (columnsType[i] == java.sql.Types.DATE || columnsType[i] == java.sql.Types.TIMESTAMP) {
            // TODO
        } else {
            o = rs.getObject(i);
        }
    }
}
public class EXECUTEQUERY implements Module {

    private static final DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    private String userId;
    String result = "";
    String resp = "";
    static int count = 1;
    private final Logger log = Logger.getLogger("EXECUTEQUERY");

    private void dbg(String msg) {
        log.info(userId + ":" + msg);
    }
    private void dbg(Exception ex) {
        log.info(ex.getMessage());
        ex.printStackTrace();
    }
    private void uDbg(String msg) {
        log.info(userId + " :" + msg);
    }
    private void uDbg(Exception ex) {
        uDbg(ex.getMessage());
        ex.printStackTrace();
    }
    public String main(UserContext userContext, String reqXml) {
        dbg("Query recieved is " + reqXml);

        String resp;
        userId = userContext.getUserId();

        if (userContext.getAction().equals("EXECUTEQUERY")) {
            if (reqXml == null || reqXml.equals("")) {
                result = "!Please Enter the query";
            } else {
                result = getQueryResult(userContext, reqXml);
            }
        }
        return result;
    }
    /***
     * 
     * for adding search record in backend created by @shyamlal yadav
     * @param userContext
     * @param reqXml 
     */
    public void addQueryLog(UserContext userContext, String reqXml) {
         dbg("inside addQueryLog methos request is " + reqXml);
        userId = userContext.getUserId();

        dbg( userId +"this user is selecting value from screen");

        System.out.println("recieve request  is " + reqXml);
        PreparedStatement pStmt = null;
        Connection eodConn = null;
        dbg("addQueryLog recieved for log  " + reqXml);

        Date date = new Date();
        java.sql.Date sqlDate = new java.sql.Date( date.getTime()); 
        eodConn = EODConnectionFactory.getInstance().getFCConnectionFromPool();

        try {
            pStmt = eodConn.prepareStatement("insert into EOD_QRY_EXEC_LOG (QRY_EXEC_TIMESTAMP, QRY_TEXT,OPERATOR_ID)\n"
                    + " values (?,?,?)");
            pStmt.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
            pStmt.setString(2, reqXml);
            pStmt.setString(3, userId);
            pStmt.executeQuery();
        } catch (SQLException ex)  {
            dbg("Exception is " + ex);
            return;
        }
        EODConnectionFactory.returnFCConnectionToPool(eodConn);
        return;
    }

    /*
     This method returns query excecuted table data with separators.
     @Shaymlal, 
     */
    public String getQueryResult(UserContext userContext, String reqXml) {
        String field_value = "";
        String lsitofquery = "";
        String resultlist = "";
        dbg("Inside getQueryResult method");
        Connection eodConn = null;
        Statement stmt = null;
        eodConn = EODConnectionFactory.getInstance().getFCConnectionFromPool();
        try {
            stmt = eodConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet rs = stmt.executeQuery(reqXml);
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            dbg("Total no of column is:" + columnCount);

            int rsCount = 1;
            while (rs.next()) {
                if (rsCount == 1) {
                    for (int i = 1; i <= columnCount; i++) {
                        resultlist += "~" + rsmd.getColumnName(i);
                    }
                }
                for (int i = 1; i <= columnCount; i++) {
                    field_value += "~" + rs.getString(i);
                }
                field_value = field_value + "~<>";
                lsitofquery = resultlist + "~>" + field_value;
                rsCount = rsCount + 1;
            }
        } catch (Exception ex) {
            dbg("Exception is " + ex);
            return "!Exception  invalid query: " + ex;
        }
        EODConnectionFactory.returnFCConnectionToPool(eodConn);

        // return rowCount > 0 ? lsitofquery+">" : "!Table is Empty" ;
        addQueryLog(userContext,reqXml);
        return lsitofquery + ">";
    }
}