java.sql.SQLException: 结果集开始前已经有rs.next
java.sql.SQLException: Before start of result set already have rs.next
所以我正在连接到数据库,我想从 table 投票中获取奶牛编号以在条形图上显示它,但我收到错误 "java.sql.SQLException: Before start of result set" 但我有 rs.next 有人可以帮我吗
conn = DbCon.ConnectDb();
String sql = "SELECT * FROM votes";
try
{
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
String cows = rs.getString("cows");
if (rs.next())
{
int cowss = Integer.parseInt(cows);
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.setValue(cowss ,"Votes", "Cows");
dataset.setValue(20 ,"Votes", "Pigs");
dataset.setValue(20 ,"Votes", "Dogs");
dataset.setValue(50 ,"Votes", "Donkeys");
JFreeChart chart = ChartFactory.createBarChart("Results", "", "Votes", dataset, PlotOrientation.VERTICAL , false, true, true);
ChartFrame frame = new ChartFrame("Results", chart);
frame.setVisible(true);
frame.setSize(450,350);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null, e);
}
您需要在读取列值之前调用ResultSet.next()
,以便光标指向结果中的第一行:
if (rs.next())
{
String cows = rs.getString("cows");
int cowss = Integer.parseInt(cows);
...
您在这里也真的不需要 PreparedStatement
-- 没有参数化查询。您可以简单地使用正常的 Statement
.
所以我正在连接到数据库,我想从 table 投票中获取奶牛编号以在条形图上显示它,但我收到错误 "java.sql.SQLException: Before start of result set" 但我有 rs.next 有人可以帮我吗
conn = DbCon.ConnectDb();
String sql = "SELECT * FROM votes";
try
{
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
String cows = rs.getString("cows");
if (rs.next())
{
int cowss = Integer.parseInt(cows);
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.setValue(cowss ,"Votes", "Cows");
dataset.setValue(20 ,"Votes", "Pigs");
dataset.setValue(20 ,"Votes", "Dogs");
dataset.setValue(50 ,"Votes", "Donkeys");
JFreeChart chart = ChartFactory.createBarChart("Results", "", "Votes", dataset, PlotOrientation.VERTICAL , false, true, true);
ChartFrame frame = new ChartFrame("Results", chart);
frame.setVisible(true);
frame.setSize(450,350);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null, e);
}
您需要在读取列值之前调用ResultSet.next()
,以便光标指向结果中的第一行:
if (rs.next())
{
String cows = rs.getString("cows");
int cowss = Integer.parseInt(cows);
...
您在这里也真的不需要 PreparedStatement
-- 没有参数化查询。您可以简单地使用正常的 Statement
.