jre-1.8_66 üzerinde çalışırken JTDS'de garip bir ArrayIndexOutOfBoundsException ile karşılaştık ve web üzerinde bu sorunun başka bir sözünü bulamadık.jtds ArrayIndexOutOfBoundsException on Jre 1.8.66
Sunucu jvmdll kullanılırken jre-1.8_66'nın 32 bit sürümünü çalıştırırken hem jtds 1.2.5 ve 1.2.8'i kullanarak bu hatayı yineledim. 64-bit JRE veya 32-bit istemci jvm.dll kullanırken hata çoğaltamıyorum.
Ayrıca, Eclipse'de çalışırken veya Eclipse'den uzaktan hata ayıklama çalışırken bu hatayı yineleyemiyorum, bu nedenle sorunun belirli nedenini daraltamam.
Tam yığın izi aşağıdadır. durum oluşur ve ben özellikle yanlış bir şey göremiyorum ama kolayca karıştırılabilen nerede
java.lang.ArrayIndexOutOfBoundsException: 14
at net.sourceforge.jtds.jdbc.TdsData.readData(TdsData.java:800)
at net.sourceforge.jtds.jdbc.TdsCore.tdsRowToken(TdsCore.java:3081)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2346)
at net.sourceforge.jtds.jdbc.TdsCore.getNextRow(TdsCore.java:777)
at net.sourceforge.jtds.jdbc.JtdsResultSet.next(JtdsResultSet.java:596)
at test.jtdstest.JtdsText.main(JtdsText.java:51)
Ben noktada jtds kod ettik.
Hatayı çoğaltmak için yazdığım test programı aşağıda.
package test.jtdstest;
import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class JtdsText
{
private static PrintWriter pw;
static
{
try
{
pw = new PrintWriter(new File("c:\\temp\\jtds_trace.txt"));
DriverManager.setLogWriter(pw);
Class.forName("net.sourceforge.jtds.jdbc.Driver");
}
catch (Exception localException)
{
}
}
public static void main(String[] args)
throws Exception
{
Connection conn = null;
PreparedStatement stmt = null;
ResultSet res = null;
try
{
String sql =
"SELECT "
+ "text1, "
+ "int1, "
+ "int2, "
+ "text2 "
+ "FROM "
+ "text_test";
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/test;user=user1;password=aa");
stmt = conn.prepareStatement(sql);
res = stmt.executeQuery();
while (res.next())
{
int int1 = res.getInt(2);
System.out.println("int1 = " + Integer.toString(int1));
}
}
catch (Exception ex)
{
System.out.println("Error processing result set:");
ex.printStackTrace();
System.out.println();
}
finally
{
try
{
if(res != null)
{
res.close();
}
if(stmt != null)
{
stmt.close();
}
if(conn != null)
{
conn.close();
}
}
catch (Exception ex)
{
System.out.println("Error cleaning up Statement:");
ex.printStackTrace();
System.out.println();
}
}
}
}
I gerekirse de hata çoğaltmak için kullanılan veri sağlayabilir.
Bunun JRE dosyasında bir hata olduğunu şüpheliyim, çünkü bu, hatayı çoğaltabilen tek değişkendir.
Daha önce bunlarla karşılaşan var mı? JVM'yi değiştirmek dışında, hatayı aşmanın başka bir yolu var mı? Bu hatayı JVM'ye karşı rapor etmemi tercih edeyim mi?
Bunun için Oracle hata kimliğine bir bağlantınız olmalı mı? – Jason