Java作业八

(一)学习总结
1.用思维导图对本周的学习内容进行总结。

2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
---executeUpdate()方法
-运行此 SQLServerPreparedStatement 对象中的 SQL语句,这些语句必须是 SQL INSERT、UPDATE、MERGE 或 DELETE 语句;或是不返回任何内容的 SQL 语句,如 DDL 语句。

public boolean delPet(String delNo){
	boolean result=false;
	Connection conn = null;
	PreparedStatement pstmt = null;	
	try{
		conn = JDBCUtils.getConnection(1);
		String  sql="delete from pet1 where no=?";
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, delNo);
		if(pstmt.executeUpdate()>0){
			result = true;
		}					
	}catch(Exception e ){
		e.printStackTrace();
	}finally{
		JDBCUtils.close(conn);
	}	
	return result;
}

---executeQuery()方法
-用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行SELECT语句,它几乎是使用最多的 SQL 语句。

conn = JDBCUtils.getConnection(1);
		stmt = conn.createStatement();
		String sql = "select no,name,age,number,cost from pet1";
		rs = stmt.executeQuery(sql);
		while(rs.next()){
			Pet thisPet = new Pet();
			thisPet.setNo(rs.getString("no"));
			thisPet.setName(rs.getString("name"));
			thisPet.setAge(rs.getString("age"));
			thisPet.setNumber(rs.getString("number"));
			thisPet.setCost(rs.getDouble("cost"));
			list.add(thisPet);

使用PreparedStatement接口和使用Statement的区别
-Statement执行的是一个完整的SQL语句,这样在程序中往往使用拼凑的SQL语句完成。而且如果由用户自己输入数据,往往会出现非法字符而造成程序错误,也可引起系统的安全漏洞,不建议使用,而使用 PreparedStatement 时用参数的办法能避免 SQL 注入漏洞。
(二)实验总结
使用JDBC实现实验七的宠物商店
---程序设计思路:
1.首先用java连接数据库

2.创建数据库

create table pet1(
no varchar(10) primary key,
name varchar(20),
age varchar(6),
number varchar(4),
cost varchar(20)
)
insert into pet1
values(1,'狸花猫',1,3,5000)
insert into pet1
values(2,'波斯猫',2,2,10000)
insert into pet1
values(3,'布偶猫',1,1,5500)
insert into pet1
values(4,'金毛',2,2,7000)
insert into pet1
values(5,'拉布拉多',1,2,8000)
insert into pet1
values(6,'萨摩耶',2,1,9000)

3.设置端口
4.将sqljdbc4.jar导入java项目中。

5.书写Java代码

public class JDBCUtils {
    public static final int CONNECTION_MYSQL=2;
    public static final int CONNECTION_SQL=1;	
    public JDBCUtils() {	}
    /*
    * 获取连接对象
    */
    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()
    {
	    Connection conn=null;
	    final String DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
	    final String DBURL = "jdbc:sqlserver://localhost:1433;databaseName=pet";
	    final String DBUSER = "潇潇雨凝";
	    final String DBPASS = "yu0822";		
	    try {
		    Class.forName(DBDRIVER);
		    conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
	    }catch (ClassNotFoundException e) {				
		    e.printStackTrace();
	    } catch (SQLException e) {
		    e.printStackTrace();
	    }		
	    return conn;
    }	
    * 关闭连接对象
    */
    public static void close(Connection conn)
    {
	    if(conn!=null)
	    {
		    try
		    {
			    conn.close();
		    } catch(SQLException e)
		    {
			    e.printStackTrace();				
		    }
		    conn = null;
	    }
    }	
}

---问题:索引值出现了越界
---原因:在prepareStatement中执行的SQL语句之前,对具体的内容采用“?”的占位符式出现,而我在values中相应的少写入一个“?”,就出现了索引值出现了越界。
---解决方案:

    conn = JDBCUtils.getConnection(1);
    String sql = "insert into pet1 ( no,name,age,number,cost) values  (?,?,?,?,?)";
    pstmt = conn.prepareStatement(sql);

---类图为:

(三)代码托管

https://git.oschina.net/hebau_cs15/java_CS01wfy.git

posted @ 2017-05-16 22:44  不羁的青春  阅读(126)  评论(0编辑  收藏  举报