(一)学习总结
1.用思维导图对本周的学习内容进行总结。
2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
JDBC中Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。
Statement(接口)
|
PreparedStatement(接口)
|
CallableStatement(接口)
Statement:(用于执行不带参数的简单 SQL 语句)
每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.
例:
String sql = "select seq_orderdetid.nextval as orderidfrom dual";
Statement stat1=conn.createStatement();
ResultSet rs1 = stat1.executeQuery(sql);
if ( rs1.next() ) {
id = rs1.getLong(1);
}
PreparedStatement:(用于执行带或不带 IN 参数的预编译SQL 语句)
执行的SQL语句中是可以带参数的,并支持批量执行SQL。由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。
例:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID =?");
for(int i =0;i<length;i++){
pstmt.setBigDecimal(1, param1[i]);
pstmt.setInt(2, param2[i]);
pstmt.addBatch();
}
pstmt. executeBatch();
CallableStatement :(用于执行对数据库已存储过程的调用)
(二)实验总结
实验内容:
使用JDBC实现实验七的宠物商店
完成实验内容,代码上传到码云,注意,务必将创建数据库的脚本文件随项目文件一起上传,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
1)首先应该有主函数应用程序,以开头,是一切程序的前提
import test.WelcomeFrame;
public class MainApp {
/**
* 项目运行
*/
public static void main(String[] args) {
new WelcomeFrame().setVisible(true);
}
}
(2)初始化数据,将用户界面所需数据储存,初始化数据,初始化窗口信息
import java.util.ArrayList;
import keke.Pet;
/**
* 存储数据
*/
public class DataBase {
public static ArrayList<Pet> data = new ArrayList<Pet>();
//初始数据
static{
data.add(new
(3)当然要添加管理员访问类,从而对初 始化后的程序进行获取,添加,删除等操作
import java.util.ArrayList;
import data.DataBase;
import keke.Pet;
/**
* 管理员数据访问类
*/
public class AdminDao {
//获取所有数据
public ArrayList<Pet> queryAllData(){
return DataBase.data;
}
//添加数据
public void addPet(Pet pet){
DataBase.data.add(pet);
}
//删除数据
public void delPet(String delNo){
for(int i = 0; i < DataBase.data.size();i++){
Pet thisPet = DataBase.data.get(i);
if(thisPet.getNo().equalsIgnoreCase(delNo)){
DataBase.data.remove(i);
}
}
}
}
(4)定义初始化的数据
package keke;
public class Pet {
private String No;
private String Name;
private String Number;
private String Age;
private Double Cost;
public Pet() {
}
public String toString(){
return "宠物的编号为:"+this.No+"宠物的名称为:"+this.Name+"宠物的年龄为:"+this.Age+"宠物的数量为:"+this.Number+"宠物的价格为:"+this.Cost;
}
}
(5)定义服务类,对界面中添加 删除 修改等应用进行写算法定义
public class AdminService {
private AdminDao adminDao = new AdminDao();
//查询服务
public ArrayList<Pet> queryPet(){
//调用Dao层的方法获取所有数据
ArrayList<Pet> data = adminDao.queryAllData();
return data;
}
//添加服务
public boolean addPet(String no,String name,String age,String number,String cost){
ArrayList<Pet> data = queryPet();
Iterator<Pet> iterator = data.iterator();
while(iterator.hasNext()){
Pet pet = iterator.next();
//如果存在重复编号则添加不成功
if(pet.getNo().equals(no)){
return false;
}
}
Pet thisPet = new Pet(no,name,age,number,Double.parseDouble(cost));
adminDao.addPet(thisPet); //添加成功
return true;
}
//修改服务
public boolean updatePet(String no,String name,String age,String number,String cost){
ArrayList<Pet> data = queryPet();
for(int i = 0; i < data.size();i++){
Pet pet = data.get(i);
if(pet.getNo().equals(no)){
adminDao.delPet(no);
Pet thisPet = new Pet(no,name,age,number,Double.parseDouble(cost));
adminDao.addPet(thisPet);
return true;
}
}
return false;
}
//删除服务
public boolean delPet(String no){
ArrayList<Pet> data = queryPet();
for(int i = 0; i < data.size();i++){
Pet pet = data.get(i);
if(pet.getNo().equals(no)){
adminDao.delPet(no);
return true;
}
}
return false;
}
}
(6)书写test类 ,构造所需方法
public AdminDialog(Frame owner,boolean modal){
super(owner,modal);
this.init(); //初始化
this.addComponent(); //添加组件
this.addListener(); //添加监听器
queryPet(); //创建对象时显示数据
}
添加监听器,当需要调用应用包的时候会自动调用运行
声明
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import service.AdminService;
import tools.GUITools;
import keke.Pet;
(7)数据库连接应用
* 获取连接对象
*/
public static Connection getConnection(int connection_type)throws Exception
{
switch (connection_type)
{
case CONNECTION_SQL:
return getConnectionSQL();
case CONNECTION_MYSQL:
return getConnectionMYSQL();
}
return null;
}
/*
* 连接SQLSERVER数据库
*/
private static Connection getConnectionSQL() throws Exception
{
Connection conn=null;
final String DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
final String DBURL = "jdbc:sqlserver://localhost:1433;databaseName=宠物商店";
final String DBUSER = "wangyikai";
final String DBPASS = "wwwyyykkk";
try
{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
return conn;
}
/*
* 连接MYSQL数据库
*/
private static Connection getConnectionMYSQL() throws Exception
{
final String DBDRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/宠物商店";
final String DBUSER = "wangyikai";
final String DBPASS = "wwwyyykkk";
Connection conn=null;
try
{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
return conn;
}
/**
* 关闭连接对象
*/
public static void close(Connection conn) throws Exception
{
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
throw e;
}
3.码云托管
地址:git@git.oschina.net:qq2546914025/jike1501hanmengshiyan8.git