美文网首页
Jave SE --- JDBC(13 PreparedStat

Jave SE --- JDBC(13 PreparedStat

作者: Tedisaname | 来源:发表于2018-12-14 23:33 被阅读13次
    实验名称:数据库访问练习

    1、学会PrerparedStatement的使用;
    2、学会使用preparedStatement预编译sql语句,并实现数据库的操作;

    实验内容:

    在MS SQLServer中创建数据库Bookmenagement,在数据库中定义表book
    (1) 采用预编译的方法向数据库中插入5本图书;
    (2) 实现数据库的CRUD操作。

    实验步骤:

    数据库操作准备工作:

    1、 设置数据库的登录模式,修改登录帐号和密码,启动TCP/IP协议。

    (1) 登录打开SQL Server应用程序,选择服务器名称(这里为xgxy3),身份验证选择Windows身份验证可直接登录

    (2) 设置数据库的登录模式:连接到数据库后,在服务名xgxy3上右击à属性à安全性,然后选择服务器登陆模式。

    (3) 修改登录帐号和密码:安全性à登录名,可显示所有的用户,在要修改的登录名上右击à选择属性,在弹出的对话框中修改密码。

    (4) 断开当前连接,以SQL Server身份再次连接。

    (5) 启动TCP/IP协议:开始à程序àMicrosoft SQL Server 2005à配置工具àSQLSever Configuration Manager,选择网络配置àMSSQLSERVER的协议,TCP/IPà右击à启动。

    (6) 重启SQLSever服务。

    2、在SQL Server数据库中,还原StudentManager,其中包含数据库表student

    (1)、点击“数据库”→右键“任务”下的“还原”下的“数据库”;

    (2)、在“还原数据库”中的“还原的源”中单机“源设备”选项按钮,并单击右边的[图片上传失败...(image-fb11da-1544800873114)] 按钮。

    (3)、在出现的“指定备份”对话框中,单机添加按钮,在出现的定位备份文件对话框中选中备份文件,点击“确定”按钮回到“还原数据库”窗口。

    (4)选择用于还原的备份集,点击确定即可。

    3、编写sql语句,使用预定义接口preparedstatement对数据库的进行增删改查的预定义操作,然后执行操作即可。

    //jdbc.properties配置文件:
    driver=com.microsoft.sqlserver.jdbc.SQLServerDriver  //在这里我使用的是sql server数据库,可以是任何数据库的驱动
    url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=studentmanage  //设置JDBC的连接协议和相关地址和接口信息,以及所要连接数据库的名称
    user=sa    //数据库登陆用户名,可根据实际情况填写
    password=111111  //数据登陆时的密码,可由情况具体填写
    
    
    // experimental contents codes:
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import java.util.Properties;
    
    public class TestPreparedStatement {
            //the method of getting the connection
        public static Connection getConnection()   {
            Connection conn = null;
    //get the outside configuration file        
    InputStream is = ClassLoader.getSystemResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            try {
                properties.load(is);
                String driver = properties.getProperty("driver");
                String url = properties.getProperty("url");
                String userName = properties.getProperty("user");
                String password = properties.getProperty("password");
                Class.forName(driver);
                conn = DriverManager.getConnection(url, userName, password);
            } catch (IOException e1) {
                e1.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
        //the method of executing update operation
        public static int exeUpdate(String sql,Object...values) {
            Connection conn = null;
            conn = TestPreparedStatement.getConnection();
            PreparedStatement pstmt = null;
            int n = 0;
            try {
                pstmt = conn.prepareStatement(sql);
                for(int i = 1;i <= values.length; i++){
                    pstmt.setObject(i, values[i-1]);
                }
                n = pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                TestPreparedStatement.release(conn, pstmt, null);
            }
            return n;
        }
        //get the method of executing query operation
        public static void exeQuery(String sql,int n,Object...values) {//可变参数
            Connection conn = null;
            conn = TestPreparedStatement.getConnection();
            
            PreparedStatement pstmt = null;
            ResultSet rs  = null;
            
            try {//相当于sql语句中?(占位符)的个数,?也就是所指定字段的名称
                pstmt = conn.prepareStatement(sql);
                for (int i = 1; i <= values.length; i++) {//该循环的作用可以认为是将sql语句将之前空缺的占位符补充完整
                    pstmt.setObject(i, values[i-1]);
                }
                //真正的执行sql语句
                rs = pstmt.executeQuery();//查询结束后,返回的结果中包含你所需的那几列
                String str;
                while(rs.next()) {//移动一行
                    for(int i = 1;i <= n; i++) {//遍历所查询的列
                    str = rs.getMetaData().getColumnName(i);//获取有关ResultSet对象中列的类型和属性的信息的对象,在这获取列信息
                    System.out.println(str+":"+rs.getObject(i));//打印输出列
                    }
                }
                
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                TestPreparedStatement.release(conn, pstmt, rs);
            }
        }
        //release the connection of datebase operation
        public static void release(Connection conn, PreparedStatement pstmt,ResultSet rs) {
    
                if(rs != null)
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                if(pstmt != null)
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                
                if(conn != null)
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        
                        
                    }
        }
        //drive codes
        public static void main(String[] args) {
            String sql = "insert into book values(?,?,?,?,?,?)";
    //      int n = TestPreparedStatement.exeUpdate(sql, "20180618001","little prince","清华大学出版社","梁胜斌","2018/11/22",59.80);
    //      int n = TestPreparedStatement.exeUpdate(sql, "20180618002","little little","清华大学出版社","梁拜斌","2018/11/12",59.00);
    //      int n = TestPreparedStatement.exeUpdate(sql, "20180618003","little lit","清华大学出版社","梁斌","2018/10/12",49.00);
    //      int n = TestPreparedStatement.exeUpdate(sql, "20180618004","little l","清华大学出版社","梁斌1","2018/9/12",48.00);
            int n = TestPreparedStatement.exeUpdate(sql, "20180618005","little","清华大学出版社","梁","2018/8/12",99.00);       
            if(n > 0){
                System.out.println("添加"+n+"本图书成功!!!");
            }else{
                System.out.println("添加图书失败!!!");
            }
            
            String sql1 = "select bno,bname,bprice from book where bno=?";
            TestPreparedStatement.exeQuery(sql1, 3,"20180618003");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Jave SE --- JDBC(13 PreparedStat

          本文链接:https://www.haomeiwen.com/subject/shanhqtx.html