计科1501韩猛实验8

(一)学习总结

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
posted @ 2017-05-18 16:28  一头气质熊  阅读(138)  评论(0编辑  收藏  举报