Java作业八

本文介绍了如何使用JDBC进行数据库操作,包括使用PreparedStatement防止SQL注入,对比Statement与PreparedStatement的区别,并通过宠物商店实例展示了增删查改的具体实现。

(一)学习总结
1.用思维导图对本周的学习内容进行总结。
1080038-20170516191514728-1854550636.jpg
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连接数据库
1080038-20170516195350103-224004546.png
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项目中。
1080038-20170516195750635-1811884876.png
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);

---类图为:
1080038-20170511164413894-1034691985.png
(三)代码托管
1080038-20170516224220400-996220310.png
https://git.oschina.net/hebau_cs15/java_CS01wfy.git

转载于:https://www.cnblogs.com/yu-3356/p/6864145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值