public void actionPerformed(ActionEvent E)
{
int id;
String name,address,phone;
Connection conn = null;
PreparedStatement stmt = null;
try {
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
String sql;
sql = "SELECT * FROM person";
System.out.println("Creating statement...");
stmt = conn.prepareStatement (sql,ResultSet.TYPE_SCROLL_INSENSITIVE ,
ResultSet.CONCUR_UPDATABLE );
ResultSet rs = stmt.executeQuery(sql);
if(E.getSource()== bNext) {
rs.next();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()== bPrevious) {
rs.previous();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()==bLast) {
rs.last();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
if(E.getSource()==bFirst) {
rs.first();
id = rs.getInt("id");
name = rs.getString("name");
address = rs.getString("address");
phone = rs.getString("phone");
//Display values
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.print(", Address: " + address);
System.out.println(", Phone: " + phone);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但previous()方法不起作用,每当next用户按下按钮时,输出保持不变,并且不会向前移动.有人可以帮忙吗?
每次actionPerformed调用方法时(我假设在按下某个按钮时调用它),您再次执行查询.因此next()总会给你第一个元素并previous返回false.
您应该将所有行读入某些数据结构,例如ArrayList(作为初始化步骤,而不是单击按钮时),并保持当前索引List,这将允许您在单击按钮时向前或向后移动.
PS你不应该使用rs.next()或rs.previous()不检查返回值.如果这些方法返回false,则不应调用诸如的方法rs.getInt("id"),因为它们会抛出异常.
PPS一些JDBC驱动程序不支持previous(),first和last方法,这意味着他们可能会抛出SQLFeatureNotSupportedException.但是,next()正如我所建议的那样,只有在初始化步骤中读取所有数据时才需要.
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |