数据库查询

DatabaseMetaData metadata1=con.getMetaData();
ResultSet rs1=metadata1.getColumns(null, null,"goods", null);

连接对象con调用getMetaData()方法,获得一个DatabaseMetaData对象,

对象调用getColumns,可以把字段信息保存在一个ResultSet对象中,参数分别是”数据库名“,”数据库扩展名“,"表名”,“字段名”


控制游标查询

有时候不是靠next()的顺序查询就能解决问题

在sql对象获得链接对象con是加两个参数

Statement stme=con.createStatement(int type,int concurrency)

type的取值决定了滚动方式

ResultSet.TYPE_FORWORD_ONLY//只能向下移动

ResultSet.TYPE_SCROLL_INSENSITIVE//可以上下移动,当数据库变化是当前结果集不变

RseultSet.TYPE_SCROOL_SENSITIVE//可以上下移动,数据库变化是当前结果集同步变化

Concurrency决定了是否可以用结果更新数据库

ResultSet.CONCUR_READ_ONLY//不能用结果更新数据库的表

ResultSet.CONCUR_UPDATABLE//不能~~~~

还有ResultSet的滚动方法

public void previous()//相对的next,上面移动
public void beforeFirst()//游标移动到第一行前面
public void afterLast()//游标移动到最后一行后面
public void first()//游标移动到第一行
public void last()//游标移动到最后一行
public boolean isAfterLast()//判断是否最后一行后面
public boolean isBeforeFirst()//判断是否第一行之前
public boolean ifFirst()//是否第一行
public boolean isLast()//是否最后一行
public int getRow()//返回行号
public boolean absolute(int row);//把游标移动到row指定的行

 测试代码(倒叙输出

            Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Kooing","sa","kenn5666225");
            System.out.println("数据库连接成功");
            DatabaseMetaData metadata1=con.getMetaData();
            ResultSet rs1=metadata1.getColumns(null, null,"goods", null);
            int raws=0;
            for(;rs1.next();){
                raws++;
            }
            Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet rs2=sql.executeQuery("select * from goods");
            rs2.last();
            for(;!(rs2.isBeforeFirst());rs2.previous()){
                for(int i=1;i<=raws;i++){
                    System.out.print(" "+rs2.getString(i)+" ");
                }
                System.out.println("");
            }

 

posted on 2016-11-08 21:59  Kooing  阅读(204)  评论(0编辑  收藏  举报

导航