thymeleaf rs 查询结果_第十一章 JDBC与MySQL数据库(10)——通用查询

通用查询

本节的目的是编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录。

编写通用查询,需要知道数据库表的列(字段)的名字,特别是表的列数(字段的个数),那么一个简单常用的办法是使用返回到程序中的结果集来获取相关的信息。

程序中的结果集ResultSet对象rs调用getMetaData()方法返回一个ResultSetMetaData对象(结果集的元数据对象):

ResultSetMetaData metaData = rs.getMetaData();

然后ResultSetMetaData对象,例如metaData,调用getColumnCount()方法就可以返回结果集rs中的列的数目:

int columnCount = metaData.getColumnCount();

ResultSetMetaData对象,例如metaData,调用getColumnName(int i)方法就可以返回结果集rs中的第i列的名字:

String columnName = metaData.getColumnName(i);

例子6将数据库名以及SQL语句传递给Query类的对象,用表格(JTable组件)显示查询到的记录,程序代码如下所示:

import javax.swing.*;public class Example6 {  public static void main(String[] args) {    String [] tableHead;    String [][] content;    JTable table ;    JFrame win= new JFrame();    Query findRecord = new Query();    findRecord.setDatabaseName("students");    findRecord.setSQL("select * from mess");    content = findRecord.getRecord();         //返回二维数组,即查询的全部记录    tableHead=findRecord.getColumnName();     //返回全部字段(列)名    table = new JTable(content,tableHead);    win.add(new JScrollPane(table));    win.setBounds(12,100,400,200);    win.setVisible(true);     win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  }}
import java.sql.*;public class Query {  String databaseName=""; //数据库名  String SQL;             //SQL语句  String [] columnName;   //全部字段(列)名  String [][] record;     //查询到的记录  public Query() {    try {      Class.forName ("com.mysql.jdbc.Driver"); //加载 JDBC-MySQL驱动    }    catch(Exception e) {}  }  public void setDatabaseName(String s) {    databaseName=s.trim();  }  public void setSQL(String SQL) {    this.SQL = SQL.trim();  }  public String[] getColumnName() {    if(columnName ==null) {      System.out.println("先查询记录");      return null;    }    return columnName;  }  public String[][] getRecord() {    startQuery();    return record;  }  private void startQuery() {    Connection con;    Statement sql;    ResultSet rs;    String uri = "jdbc:mysql://localhost:3306/"+databaseName+           "?useSSL=true&characterEncoding=utf-8";    try {      con = DriverManager.getConnection(uri,"root","");      sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);      rs = sql.executeQuery(SQL);      ResultSetMetaData metaData = rs.getMetaData();      int columnCount = metaData.getColumnCount();  //字段数目      columnName = new String[columnCount];      for(int i=1; i<=columnCount; i++) {        columnName[i-1] = metaData.getColumnName(i);      }      rs.last();      int recordAmount = rs.getRow();               //结果集中的记录数目      record = new String[recordAmount][columnCount];      int i=0;      rs.beforeFirst();      while(rs.next()) {        for(int j=1;j<=columnCount;j++) {          record[i][j-1]=rs.getString(j);       //第i条记录放入二维数组的第i行        }        i++;      }      con.close();    }    catch(SQLException e) {      System.out.println("请输入正确的表名"+e);    }  }}

程序运行效果如图所示。

2c57f539055450d61dff72d1d20288ca.png 22c1061e7143b41968327fe3648bab36.png 103f0a945f986c9cea18fa4ddc8503de.png 22c1061e7143b41968327fe3648bab36.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值