Java MySQL中的异常
我用Java编写了一个代码,它必须填充一个点文件。我得到了错误,我不知道为什么。所有路径都已设置Java MySQL中的异常,java,Java,我用Java编写了一个代码,它必须填充一个点文件。我得到了错误,我不知道为什么。所有路径都已设置 Class.forName("com.mysql.jdbc.Driver"); Connection connects = DriverManager.getConnection("jdbc:mysql://localhost:3306/userlogin", "root","12345"); Statement stm = connects.createS
Class.forName("com.mysql.jdbc.Driver");
Connection connects = DriverManager.getConnection("jdbc:mysql://localhost:3306/userlogin", "root","12345");
Statement stm = connects.createStatement();
ResultSet rs=stm.executeQuery("SELECT * FROM authors_4 WHERE self_authors='"+getTxt+"'");
int l=0;
/*if(rsx.next())
{
div = Double.parseDouble(rsx.getString("divs"));
}*/
do
{
if(l==0)
{
diva = Integer.parseInt(rs.getString("tot_pub"));
//fout.write("a [label=" + "\"" + rsx.getString(2) + "\\n" + rsx.getString(4) + "\"" + "color=blue,fontsize=24,fontcolor=red,style=filled];\r\n");
fout.write("\"" + rs.getString("self_authors") + "\"" + "[fixedsize=true, width="+diva+",height="+diva+", label=" + "\"" + rs.getString("self_authors") + "\\n" + rs.getString("tot_pub") + "\"" + "color=blue,fontsize=24,fontcolor=red,style=filled];\r\n");
l++;
}
divb = Integer.parseInt(rs.getString("tot_pub")) ;
fout.write("\"" + rs.getString("co_auths") + "\"" + "[fixedsize=true, width="+divb+",height="+divb+",label=" + "\"" + rs.getString("co_auths") + "\\n" + rs.getString("tot_pub") + "\"];" +"\r\n");
//fout.write("a ->" + "\"" + rsx.getString(6) + "\"" + "[penwidth=" + rsx.getString(8) +", label =" + rsx.getString(8) +" ];" + "\r\n");
fout.write("\"" + rs.getString("self_authors") + "\" ->" + "\"" + rs.getString("co_auths") + "\"" + "[penwidth=" + rs.getString("1") +", label =" + 1 +" ];" + "\r\n");
//System.out.println(rsx.getString(1));
}while(rs.next());
fout.write("}");
fout.close();
}
我写的代码很长,无法解释,所以我只发布我遇到异常的部分
例外情况如下:
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5773)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5693)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5733)
我相信,你发布的代码没有抛出任何错误。当您尝试访问结果集数据而不将光标移动到第一条记录时,将返回此错误
ResultSet rs = stm.executeQuery("SELECT * FROM authors_4 WHERE self_authors='"+getTxt+"'");
// Did you use rs.next() ???
while (rs.next())
{
// You need rs.next() before trying to access
// Without rs.next(), you'll see the "Before start of result set" exception
int myInt = rs.getInt(1);
...
...
}
例外情况是,您将光标定位在第一行数据之前,然后从中请求数据。我不能确定这一点,因为您还没有发布请求数据的代码部分,但这是我看到出现此异常的唯一上下文。您需要拨打:
rs.next();
将光标移动到第一行数据
编辑:正如我所料,您正在调用
diva=Integer.parseInt(rs.getString(“tot_pub”)调用rs.next()之前的代码>;因此,它试图从数据库返回的第一行之前的行中获取字符串。只需添加rs.next()在进行该调用之前执行code>,您的问题就解决了。在计算while
表达式之前执行do while
循环的主体
这意味着您的光标在循环的第一个过程中将不会前进。您需要使用while
循环:
while(rs.next()) {
...
}
也应考虑使用<代码> PravaReals> <代码>以防止SQL注入攻击。< /P> < P>请替换<强> ->(RS.NEXT))<强> >(R.HasNeXEF)< <强> >/P>
在Do While循环中,第一个语句为rs.next()
rs.hasNext()将检查ResultSet中是否存在任何现有值。如果存在任何值,则它将继续,否则将退出循环
Note: I will suggest to use **While loop** instead of a **Do-While loop**.
希望这会有所帮助。您已经看过了吗?由于您显示的代码很少,我不确定它是否适用于您的案例,您还应该使用参数来阻止潜在的SQL注入攻击。@添加了PM 77-1代码以进一步澄清我正在使用rs.next()在结果之后填充点文件,所以这是答案,使用rs.next()在使用rs.getString(“tot_pub”)之前,现在我得到了“java.sql.SQLException:After end of result set”添加了更多代码但没有工作“java.sql.SQLException:After end of result set”现在它返回了这个异常现在我得到了“java.sql.SQLException:After end of result set”听起来像是导航到了resultset的末尾。while循环中的rs.next()
是否是对next
的唯一调用ResultSet#next
返回一个布尔值,在尝试读取任何值之前需要检查该布尔值。在while循环中使用它将执行此检查