20155322 《Java程序设计》课堂实践项目 数据库-3-4

20155322 《Java程序设计》课堂实践项目 数据库-3-4

数据库-3

实践要求

  • 参考教材代码完成下面的要求,提交能连接到world的截图(有学号水印),并提交代码的码云链接。查询world数据库,获得New Jessey州所有城市的总人口数。

    实践步骤

    我并没有在MessageDAO上修改,而是直接在之前的Demo上加入了:

            Statement stmt = conn.createStatement(); //创建Statement对象
            String sql = "SQL语句";    //要执行的SQL
            ResultSet rs = stmt.executeQuery(sql);//创建数据对象

SQL:

SELECT sum(Population) FROM `city` WHERE District= 'New Jersey'

然后使用rs.getString将数据打印出来:

            if(rs.next());
                System.out.println(rs.getString(1));

1071604-20170607104003747-1674581539.png

实践中遇到的问题

运行时抛出:java.sql.SQLException: Before start of result set错误
1071604-20170607104254668-218727339.png
这个错误的原因是因为ResultSet对象代表SQL语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next()应把光标置于第一行上,使它成为当前行。随着每次调用next()将导致光标向下移动一行。在ResultSe对象及其t父辈Statement对象关闭之前,光标一直保持有效。所以使用rs.getString();前一定要加上rs.next();
参考资料
在加上if(rs.next());之后,就没问题了。

实践代码

/**
 * Created by mac on 2017/6/7.
 */
import static java.lang.System.out;
import java.sql.*;

public class Connection02 {
    public static void main(String[] args)
            throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        String jdbcUrl = "jdbc:mysql://localhost:3306/world";
        String user = "root";
        String passwd = "";
        try (Connection conn =
                     DriverManager.getConnection(jdbcUrl, user, passwd)) {
            out.printf("已%s数据库连接%n", conn.isClosed() ? "关闭" : "打开");

            Statement stmt = conn.createStatement(); //创建Statement对象
            String sql = "SELECT sum(Population) FROM `city` WHERE District= 'New Jersey'";    //要执行的SQL
            ResultSet rs = stmt.executeQuery(sql);//创建数据对象
            //System.out.println("ID" + "\t"+"\t" + "Name" +"\t"+ "\t" + "CountryCode"+ "\t"+"\t" + "Distridt" + "\t"+"\t" + "Population");
            //int count = 0;
            /*while (rs.next()) {
                System.out.print(rs.getInt(1) + "\t"+"\t");
                System.out.print(rs.getString(2) + "\t"+"\t");
                System.out.print(rs.getString(3) + "\t"+"\t");
                System.out.print(rs.getString(4) + "\t"+"\t");
                System.out.print(rs.getString(5) + "\t"+"\t");
                System.out.println();
                count++;
            }*/
            if(rs.next());
                System.out.println(rs.getString(1));
            //System.out.printf("There are all %d answers",count);
            rs.close();
            stmt.close();
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

Connection02.java

转载于:https://www.cnblogs.com/blackay03/p/6955858.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值