Java Sql和Oracle出现Netbeans错误
您好,我的应用程序中有此错误消息:“res”在当前上下文中不是已知变量。此外,我也有此错误消息“ORA-00911:无效字符” 这是代码,出于安全原因,IP和实例名称已更改为XXXX:Java Sql和Oracle出现Netbeans错误,java,sql,netbeans,Java,Sql,Netbeans,您好,我的应用程序中有此错误消息:“res”在当前上下文中不是已知变量。此外,我也有此错误消息“ORA-00911:无效字符” 这是代码,出于安全原因,IP和实例名称已更改为XXXX: package javaapplication6; import java.io.IOException; import java.io.File; import java.sql.DriverManager; import java.sql.Connection; import java.sql.Prepar
package javaapplication6;
import java.io.IOException;
import java.io.File;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class JavaApplication6 {
private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DB_CONNECTION = "jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:XXXX";
private static final String DB_USER = "system";
private static final String DB_PASSWORD = "manager";
public static void main(String[] argv) {
try {
WriteExcel();
} catch (SQLException e)
{
System.out.println(e.getMessage());
}
}
@SuppressWarnings("empty-statement")
public static void WriteExcel() throws SQLException {
{
try {
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
ResultSet res = null;
File file = new File("c:\\output.xls");
int row=0;
//formato fuente para el contenido contenido
WritableFont wf = new WritableFont( WritableFont.ARIAL, 12, WritableFont.NO_BOLD );
WritableCellFormat cf = new WritableCellFormat(wf);
//Interfaz para una hoja de cálculo
WritableSheet excelSheet = null;
WritableWorkbook workbook = null;
//Establece la configuración regional para generar la hoja de cálculo
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setLocale(new Locale("en", "EN"));
try {
workbook = Workbook.createWorkbook( file, wbSettings );
//hoja con nombre de la tabla
workbook.createSheet( "persona", 0 );
excelSheet = workbook.getSheet(0);
System.out.println( "creando hoja excel.....Listo" );
} catch (IOException ex) {
System.err.println( ex.getMessage() );
}
//Consulta SQL
String sql = "SELECT\n" +
" cast (TICKET.VAL_NUM as varchar(18)) as TICKET,\n" +
" TICKET.TCK_MNT/100 as MONTO,\n" +
" TICKET.CREDAT as FECHA,\n" +
" BCLIENT.ID_CLI as ID_CLIENTE,\n" +
" BCLIENT.PRENOM || ' ' || GALAXIS.BCLIENT.NOM as NOMBRE,\n" +
" FCONSOM.COD_UTILIS as REGISTRO,\n" +
" TCKSTS.LIB_STS as ESTADO,\n" +
" FTYPCLI.LIB_LONG2 as CATEGORIA\n" +
"FROM\n" +
" BCLIENT,\n" +
" FCONSOM,\n" +
" TCKSTS@DB_LINK,\n" +
" FTYPCLI,\n" +
" TCKTYP@DB_LINK,\n" +
" QPCONSTCK@DB_LINK,\n" +
" TICKET@DB_LINK\n" +
"WHERE\n" +
" ( TCKSTS.ID_STS = TICKET.ID_STS )\n" +
" AND ( TCKTYP.ID_TCKTYP = TICKET.ID_TCKTYP )\n" +
" AND ( QPCONSTCK.ID_TCK(+)=cast(TICKET.VAL_NUM as varchar(18)) )\n" +
" AND ( FCONSOM.ID_CONSO(+)=QPCONSTCK.ID_CONSO )\n" +
" AND ( BCLIENT.ID_CLI(+)=FCONSOM.ID_CLI )\n" +
" AND ( BCLIENT.COD_TYPCLI=FTYPCLI.COD_TYPCLI )\n" +
" AND (\n" +
" TICKET.CREDAT BETWEEN to_date('2014-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND to_date('2014-03-28 23:59:59', 'yyyy-mm-dd hh24:mi:ss')\n" +
" AND TCKTYP.LIB_TCKTYP = 'RESTRICTED PROMOTIONAL'\n" +
" );";
dbConnection = getDBConnection();
PreparedStatement pstm = dbConnection.prepareStatement(sql);
//ResultSet res;
res = pstm.executeQuery();
System.out.println( "obteniendo registros.....Listo" );
try {
while(res.next())
{
Label ticket;
ticket = new Label( 0 , row, res.getString( "TICKET" ) , cf );
Label monto;
monto = new Label( 1 , row, res.getString("MONTO" ) , cf );
Label fecha;
fecha = new Label( 2 , row, res.getString( "FECHA" ) , cf );
Label id;
id = new Label( 3 , row, res.getString( "ID" ) , cf );
Label nombre;
nombre = new Label( 4 , row, res.getString( "NOMBRE" ) , cf );
Label registro;
registro = new Label( 4 , row, res.getString( "REGISTRO" ) , cf );
Label estado;
estado = new Label( 4 , row, res.getString( "ESTADO" ) , cf );
Label categoria;
categoria = new Label( 4 , row, res.getString( "CATEGORIA" ) , cf );
row ++;
try {
excelSheet.addCell( ticket );
excelSheet.addCell( monto );
excelSheet.addCell( fecha );
excelSheet.addCell( id );
excelSheet.addCell( nombre );
excelSheet.addCell( registro );
excelSheet.addCell( estado );
excelSheet.addCell( categoria );
} catch (WriteException ex) {
System.err.println( ex.getMessage() );
}
}
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (dbConnection != null) {
dbConnection.close();
}
}
//Escribe el archivo excel en disco
workbook.write();
try {
workbook.close();
} catch (WriteException ex) {
Logger.getLogger(JavaApplication6.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println( "Escribiendo en disco....Listo" );
System.out.println( "Proceso completado...." );
} catch (IOException ex) {
Logger.getLogger(JavaApplication6.class.getName()).log( Level.SEVERE, null, ex);
}
}
}
private static Connection getDBConnection() {
Connection dbConnection = null;
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
try {
dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER,DB_PASSWORD);
return dbConnection;
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return dbConnection;
}
}
您能指出哪些行有这些错误吗?您可能想去掉SQL结尾的分号-这应该可以处理Oracle错误。还有其他错误。。。这是否只是NetBeans调试器在定义
res
之前报告的情况?如果是这样,那是完全正常的,不是错误。我只是在netbeans中使用调试命令来查看错误并显示我以前发布的消息。当我在调试选项中进行跟踪时,调试不会访问while(res.next())行。我不知道为什么。