zoukankan      html  css  js  c++  java
  • 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));
    

    实践中遇到的问题

    运行时抛出:java.sql.SQLException: Before start of result set错误

    这个错误的原因是因为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" + "	"+"	" + "Name" +"	"+ "	" + "CountryCode"+ "	"+"	" + "Distridt" + "	"+"	" + "Population");
                //int count = 0;
                /*while (rs.next()) {
                    System.out.print(rs.getInt(1) + "	"+"	");
                    System.out.print(rs.getString(2) + "	"+"	");
                    System.out.print(rs.getString(3) + "	"+"	");
                    System.out.print(rs.getString(4) + "	"+"	");
                    System.out.print(rs.getString(5) + "	"+"	");
                    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

  • 相关阅读:
    css 解决fixed 布局下不能滚动的问题
    js 正则常用函数 会正则得永生
    巧用call,appl有 根据对象某一属性求最大值
    锚点 , angular 锚点 vue锚点
    css 改变浏览器滚动条的样式
    angular 常用插件集合
    angular4,angular6 父组件异步获取数据传值子组件 undefined 问题
    angular组件之间的通讯
    tomcat的配置详解:[1]tomcat绑定域名
    click 绑定(三)防止事件冒泡
  • 原文地址:https://www.cnblogs.com/blackay03/p/6955858.html
Copyright © 2011-2022 走看看