Jave SE --- JDBC(13 PreparedStat

2018-12-14  本文已影响13人  Tedisaname
实验名称:数据库访问练习

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");
    }
}

上一篇下一篇

猜你喜欢

热点阅读