在日期之间进行搜索如何在jtable中显示

问题描述:

这里是代码,我使用2 jdatechooser,并将代码放在一个按钮中。我也不确定查询是否正确。在日期之间进行搜索如何在jtable中显示

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    try 
{ 

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     String url="jdbc:sqlserver://USER-PC:1433;databaseName=tblgg"; 
     String userr="sa"; 
     String passs="1234"; 
     Connection con=DriverManager.getConnection(url,userr,passs); 

    java.util.Date first = dt1.getDate(); 
    java.util.Date second = dt2.getDate(); 
    String sql="SELECT * FROM tbl_sale WHERE date between '"+ first+"'and 
    '"+second+"'"; 

PreparedStatement pst= con.prepareStatement(sql); 



    ResultSet rs = pst.executeQuery(); 
tblsale.setModel(DbUtils.resultSetToTableModel(rs)); 

} 
catch (Exception e) 
{ 
    JOptionPane.showMessageDialog(null, e); 
} 
}     

好吧,我编辑我的代码。 xD现在正在发生某些事情,但没有任何显示。

+0

永远不要将任何SQL放入GUI(请参阅关于MVC)。不要连接你的查询和值,然后使用'PreparedStatement' ...如果你想提出一个SQL注入,至少使用'Statement'来完成。那么,你有没有试图填充一个'JTable',或者看看怎么做? – AxelH

纠正您缺少准备好的语句用法。试试这个

Resuse您的连接

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    String url="jdbc:sqlserver://USER-PC:1433;databaseName=tblgg"; 
    String userr="sa"; 
    String passs="1234"; 
    Connection con=DriverManager.getConnection(url,userr,passs); 
    ResultSet result = null; 

    String sql2 = "select\n" + 
      "*\n" + 
      "from student\n" + 
      "where date(first) > ? and date(second) < ?"; 
    PreparedStatement ps1 = con.prepareStatement(sql2, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY) ; 
    ps1.setObject (1 , startDatePicker.getModel().getValue()); 
    ps1.setObject (2 , endDatePicker.getModel().getValue()); 


    result = ps1.executeQuery(); 
    // get number of rows 
    result.last(); 
    numRows = result.getRow(); 
    result.first(); 
    //Get metadata object for result 
    ResultSetMetaData meta = result.getMetaData(); 
    // create an arry of string for the colum names 
    colNames = new String[meta.getColumnCount()]; 
    // store column names in the new col names array 
    for(int i = 0; i< meta.getColumnCount(); i++) 
    { 
     //get column name 
     colNames[i] = meta.getColumnLabel(i+1); 

    } 
    // create 2 d string array for table data 
    tableData = new String [numRows][meta.getColumnCount()]; 
    // store columns in the data 
    for (int row = 0 ; row < numRows; row++) 
    { 

     for (int col = 0; col < meta.getColumnCount(); col++) 
     { 
      tableData[row][col]= result.getString(col + 1); 

     } 

     result.next(); 
    } 


    // close statement 
    ps1.close(); 
    connection.close(); 
    System.out.println("Data Table Loaded."); 





} 

要显示的创建结果数据集使用这些线路

JTable table = new JTable(tableData,colNames); 
JScrollPane scrollPane = new JScrollPane(table); 

不要忘了滚动窗格添加到您的JPanel

panel.add(scrollPane); 
+0

使用元数据对于使用'PreparedStatement'失败的人来说很复杂......并且对于特定查询而言是不必要的。只需使用模拟表格为您的解决方案提供'Select A,B from myTable' ...这将更清洁,更短,.. – AxelH

+0

模拟表不显示在Java API搜索上。请解释课堂模拟表 –