Java第八次作业--数据库编程
(一)学习总结
1.用思维导图对本周的学习内容进行总结。
2 . 通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
JDBC中Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。
-
方法executeQuery
用于产生单个结果集(ResultSet)的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
如:
//加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //使用DriverManager获取数据库连接 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234"); //使用Connection来创建一个Statment对象 Statement stmt = conn.createStatement(); //执行查询语句 ResultSet rs =stmt.executeQuery("select * from teacher"); //把查询结果输出来 while (rs.next()) { System.out.println(rs.getInt(1) + "/t" + rs.getString(2)); }
-
方法executeUpdate
用于执行 INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如 CREATE TABLE 和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改中零行或多行中的一列或多列。executeUpdate的返回值是一个整数(int),指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate 的返回值总为零。
如:
//加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //使用DriverManager获取数据库连接 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234"); //使用Connection来创建一个Statment对象 Statement stmt = conn.createStatement(); //执行DML语句,返回受影响的记录条数 return stmt.executeUpdate(sql);
-
方法execute:
可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。但它执行SQL语句时比较麻烦,通常我们没有必要使用execute方法来执行SQL语句,而是使用executeQuery或executeUpdate更适合,但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了。
如:
//加载驱动 Class.forName(driver); //获取数据库连接 conn = DriverManager.getConnection(url , user , pass); //使用Connection来创建一个Statment对象 stmt = conn.createStatement(); //执行SQL,返回boolean值表示是否包含ResultSet boolean hasResultSet = stmt.execute(sql); //如果执行后有ResultSet结果集 if (hasResultSet){ //获取结果集 rs = stmt.getResultSet(); //ResultSetMetaData是用于分析结果集的元数据接口 ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); //迭代输出ResultSet对象 while (rs.next()) {//依次输出每列的值 for (int i = 0 ; i < columnCount ; i++ ) { System.out.print(rs.getString(i + 1) + "/t"); } System.out.print("/n"); } }else { System.out.println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条"); }
(二)实验总结
程序设计思路:
- 首先,创建WelcomeFrame界面,进行注册或登录功能;点击注册,进入LoginFrame注册界面,进行注册,注册时,进行数据库连接,注册信息存入数据库;点击登录,判断输入的信息与数据库内容比较,若为管理员登录,进入AdFrame管理员界面,否则为UserFrame用户界面;若购买,进行数据库连接,若在用户界面购买后,信息存入数据库,点击宠物清单进入ListFrame清单界面
- 其次创建Pet宠物类存放宠物属性,LoginCheck注册类存放注册属性,创建JDBCUtils数据库类,与数据库进行连接,注册时比较TextFiled的字符串与数据库数据,GUITools类对于界面组件显示的方法
- 最后,AdminDao类是对管理界面的按钮组件功能进行实现,实现按钮功能时,进行数据库连接,AdService类是对AdminDao类中的方法进行判断,UserDao类是对用户界面的按钮组件功能进行实现,实现按钮功能时,进行数据库连接,UserService类是对UserDao类中的方法进行判断
问题1:
注册登录时出现空指针异常,conn对象无法执行
原因:
没有为conn赋值,执行注册或者登录时,没有连接数据库
解决方案:
当异常进行增删改查时,捕获异常时,为conn赋值
问题2:
不能显示图片
原因:
未找到原因,待解决
总结:数据库编程是固定的套路,记住JDBC的操作步骤和executeUpdate()、executeQuery()的用法即可
三 .代码托管
地址链接: