在日期之间进行搜索如何在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现在正在发生某些事情,但没有任何显示。
答
纠正您缺少准备好的语句用法。试试这个
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搜索上。请解释课堂模拟表 –
永远不要将任何SQL放入GUI(请参阅关于MVC)。不要连接你的查询和值,然后使用'PreparedStatement' ...如果你想提出一个SQL注入,至少使用'Statement'来完成。那么,你有没有试图填充一个'JTable',或者看看怎么做? – AxelH