数据库实验

数据库连接与数据查询

一.实验目的

理解并掌握利用.netDelphiJava(JBuilderEclipse)等编程平台进行数据库访问的基本过程,熟悉数据库访问方法。

二.实验属性

设计性。

三.实验仪器设备及器材

装有.netDelphi 7.netJDK编译器及SQL Server的计算机。

四.实验要求

  1. 预习数据库访问的方式:

1. 调用Driver.forName方法加载驱动程序。

2. 调用DriverManager对象的getConnection()方法,获得一个Connection对象。

3. 创建一个Statement对象,准备一个SQL语句,这个SQL语句是Statement对象(立即执行的语句)PreparedStatement语句(预编译的语句)CallableStatement(存储过程中调用的语句)

4. 调用executeUpdate()等方法执行SQL语句,不返回ResultSet对象的结果。

5. 对返回的ResultSet对象进行显示等相应的处理。

      c)对于Java(JBuilderEclipse)编译环境利用JDBC进行数据库连接。数据库连接后使用DatabaseQueryDataSetTableDataSetDataSetView等类进行数据库操作。

   2 实验中要求完成如下步骤:

b.  复合查询。

给定一定的查询字段,有用户进行选择进行查询。注意使用模糊匹配。

c.  动态查询。

给出数据库的所有字段,有用户选择后进行查询。对于不同的字段类型,由程序自动给出操作运算符,如果用户选择了一个数据类型是char型的字段,操作运算符只能是“=”,“< >”。注意使用模糊匹配。

  1. 实验后提交程序清单和实验报告。

五.实验步骤:

     采用java语言借助于eclipse来连接数据库sqlserve 2005.(由于利用java语言其界面设计的代码较为繁琐就不涉及其相关代码,只列述与数据库相关的代码)

   1 连接数据库:

       在建立工程后,需要为驱动包构建路径,然后获得一个连接对象:

    public Connection getConn()

    {

       String url="jdbc:sqlserver://localhost:1433;DatabaseName=Demo;";

       String userName="root";

    String password="root";    

    try {                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");       

                  conn=DriverManager.getConnection(url,userName,password);

              } catch (ClassNotFoundException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

                  return null;

              } catch (SQLException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

                  return null;

              }            

           return conn;     

    }

 

2 。设计登录(利用数据库)

     * 登录时得到通过用户的登录名strUser去查找数据库的密码

     */

    public ResultSet getUserName(String strUser)

    {

       conn=getConn();

       ResultSet rs;

       if(conn!=null)

       {

           String StrSql="select * from login where sno=?";

           try {

              PreparedStatement psmt=conn.prepareStatement(StrSql);

              psmt.setString(1, strUser);

             rs = psmt.executeQuery();

             

           } catch (SQLException e) {

              e.printStackTrace();

              return null;

           }

           return rs;

           }

       else   return null;     

    }

以上是连接数据库,通过在UI界面输入的用户账号,通过连接数据库获得密码与UI界面上的密码进行对照。 在向sql语句传递参数时,利用的是PreparedStatement预编译处理的形式能够动态的添加相关变量。

  1. 数据库简单查询

设计的是一个combox控件对象上显示各个阶段的年龄(调用数据库中的学生年龄),

当选择一个时,会将这个年龄的所有学生信息显示在一个table控件对象上。 

  运行界面:

(1)  combox控件对象上的数据绑定

 

/*

     * 查找数据库中的学生的年龄阶段,存放在一个vector里面

     */

    public Vector getAges() throws SQLException

    {

       Vector items= new Vector();

       conn=getConn();     

       String strSql="select  distinct  sage from student order  by Sage  asc ";

       PreparedStatement psmt=conn.prepareStatement(strSql);

       ResultSet rs = psmt.executeQuery();

       while(rs.next())

       {

           String age=String.valueOf(rs.getInt("Sage"));//int类型转换成string

           items.addElement(age);         

       }

       return items;    

    }

将返回的数据在进一步放到combox控件上就可以了。在不知道数据的长度时,我们需要将返回的数据信息放到一个向量对象里面去,最后只需将这个向量对象在作为combox的一个参数就可以将数据显示到空间对象上。

(2)  table控件对象绑定数据:

 

public ResultSet getTableset(int age) {

      

       conn=getConn();

       PreparedStatement psmt;

       try {

           psmt = conn.prepareStatement("select sno as '学号',sname as '姓名',sdept as '院系' from student where sage =?");

           psmt.setInt(1, age);

           return psmt.executeQuery();

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

           return null;

       }         

    }

对于已经获取的ResultSet(结果集)它是一条一条的记录,需要为这个结果集设置一个TableModel

  DBconnect db = new DBconnect();

       ResultSet rs =db.getTableset(age);

       

   

           try {

           table.repaint();

              rsTableModel.SetResultSet(rs); 

             

              table.setModel(rsTableModel);

                 

           } catch (SQLException e1) {

              // TODO Auto-generated catch block

              e1.printStackTrace();

           }

          

注:rsTableModel是一个继承了AbstractTableModel类的一个对象这样就可以将返回的结果集的数据显示在table的一个控件对象上。

  为了的操作方便,也可以在一个文本框内输入一句sql语句来将返回的数据返回到一个表内:

这个实现和上述的实现是一样的,就是先将ResultSet经过TableModel显示在table的控件对象上了。

  1. 数据库条件式查询

条件式查询就是为查询语句设置一定的条件,在可视化操作中还要根据不同的条件来设置进行不同的处理

先截取运行后的界面:

 

按照学号的模糊查询

按照姓名的模糊查询

执行结果

至于其相应的代码实现:

当点击执行按钮是就会响应一下函数

else if(e.getActionCommand().equals("执行"))

       {

           String strConditions=textConditions.getText();

           String strSql=null;

           if(strConditions.equals(""))

              JOptionPane.showMessageDialog(null, "输入的条件为空");

           else

           {

              DB ss = new DB();

              {

                  switch (SelectedType) {

                  case 1:

                     strSql="select sno '学号',sname as '姓名',sdept '学院',sage '年龄'from student where sno"+cbxOperater.getSelectedItem().toString()+textConditions.getText();

                     System.out.println(strSql);

                     break;

                  case 2:

                     strSql="select sno '学号',sname as '姓名',sdept '学院',sage '年龄'from student where sage"+cbxOperater.getSelectedItem().toString()+textConditions.getText();

                     System.out.println(strSql);

                     break;

                  case 3:

                     strSql="select sno '学号',sname as '姓名',sdept '学院',sage '年龄'from student where sname like"+"'"+textConditions.getText().trim()+"%'";

                     break;

                  }

              }

 

              //            strSql="select * from student";

              ResultSet rs =ss.excuteQurre(strSql);

              try {

                  rsModel.SetResultSet(rs);

              } catch (SQLException e1) {

                  // TODO Auto-generated catch block

                  e1.printStackTrace();   

              }

              table.repaint();

              table.setModel(rsModel);

           }

 

设计思路是先对选择查询的进行选择,如当选择以姓名进行查找时就将selectionType设置为1,就再将查询的要求设置为> < = 这三种选择,这样就可以进行相关的数据处理。

(六)实验心得:

Jdbc连接数据库是java学习的一个提升,同时也是将数据库学习的实践化。

通过这个实验(虽然有点简单),我一方面加强了我对java语言的理解和深化,以前我从未用过Jtable控件,但这次我不仅用了,而且是在table控件上显示数据库的信息,另一方面我也从中理解了sql语句在高级语言的嵌套,这样就可以实现真正的sql的操作。

但在收获成功的同时我也遇到很多问题:

 1 java语言不想C#中可以及将查询的数据结果放到DateSet里面,在里面又可以将表分离,java返回的是ResultSet需要在经过TableModel这一设置,经过一番在网上的查找我实现这项功能。

2 sql语言的嵌套在高级语言中,刚开始时除了问题,如textUserNametextBox控件对象)的text返回的用户的姓名,在嵌套时应该有“+textUserName+”,错误虽小,但要谨记。

 


你可能感兴趣的:(数据库实验)