這個問題似乎與setInt和setString方法中的'generic'語法有關。 - 當然,也可能是其他問題,但讓我告訴你我發現了什麼。我給出一個空的resultSet。我的JTable是空的。它不應該是
下面是我在mySql中的表,我試圖用java查詢。
Id | CashFlowSensitive | Sp1
-----------------------------------
37 | 1 | Hello
1000 | 0 | Hello
1401 | 0 | number3
1500 | 0 | number4
1504 | 1 | Hello
如果我這樣的代碼「給我哪裏CashFlowSensitive = 1和Sp1的=所有行‘你好’,然後我的代碼工作。它給了我第一行和最後一行,因爲它們完全符合過濾標準。
現在,假設我更改了表中的最後一行,替換number5
的Hello
條目。然後,將表看起來像這樣
Id | CashFlowSensitive | Sp1
-----------------------------------
37 | 1 | Hello
1000 | 0 | Hello
1401 | 0 | number3
1500 | 0 | number4
1504 | 1 | number5
最後我啓動我的查詢,詢問它給我的所有行「CashFlowSensitive」 = 1 我應該得到37和1504 可悲的是,這給出了一個空結果。我的JTable是空的。 在這個失敗的例子,我做的事:
public void searchStringTest(DefaultTableModel model, Database db, int CashFlowSensitive, String Sp1)
{
int first = -77;
String second = "-55";
String queryTest = " select * from helm.activitiesextended where CashFlowSensitive = ? and Sp1 = ? ";
try
{
java.sql.PreparedStatement selectStmt = CON.prepareStatement(queryTest);
if (first == -77) {
((PreparedStatement) selectStmt).setInt(1, 1);
} else {
((PreparedStatement) selectStmt).setInt(1, '%' + CashFlowSensitive + '%');
}
if (second == "-77") {
((PreparedStatement) selectStmt).setString(2, "Hello");
} else {
((PreparedStatement) selectStmt).setString(2, "%" + Sp1 + "%");
}
ResultSet rsTest = selectStmt.executeQuery();
model.setRowCount(0);
while (rsTest.next())
{
Vector <Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <=4; columnIndex ++)
{
vector.add(rsTest.getObject (columnIndex));// pick next column
}
data.add(vector);
model.addRow(vector);
}
我有一個搜索聲明爲 (INT CFS,INT ToBeMonitored,字符串SP1中,字符串SP2中,字符串SP3和加法7個PARAMATERS) 我定義我的查詢字符串: select * from CFS =?和ToBeMonitored =?和Sp1 =?和Sp2 =?和Sp3 =?枚舉十個參數。 現在,在這個查詢的任何給定運行中,我只激活最多4個參數,例如說我想過濾掉2個參數:CFS和Sp1,其餘參數對過濾過程應該是中性的,我稱之爲「中性」。 ((PreparedStatement)selectStmt).setInt(1,1); //在這一個過濾 ((PreparedStatement)selectStmt).setInt(2,'%'+ ToBeMonitored +'% 「); //(接受任何值) ((PreparedStatement)selectStmt).setString(3,「Hello」); //過濾這一個 ((PreparedStatement)selectStmt).setString(4,「%」+ Sp2 +「%」) ; ((PreparedStatement)selectStmt).setString(5,「%」+ Sp3 +「%」); 正如你所看到的,我將我的sql定位爲參數1和3,同時忽略了其他參數,這使得它們在過濾過程中保持中立。問題:儘管有效數據,仍然沒有創建結果集。
你的回答有點偏離我提出的問題。我希望您尊重這樣一個事實,即無論在每次單獨運行時要過濾哪個參數,都會一次又一次保留相同的查詢字符串。例如,如果我只'打開'CashFlowSensitive標誌,那麼在運行查詢時該特定參數應該是活動參數。其他參數對濾波過程應以中性方式運行。在其他時間,我可以選擇激活Sp1字段(CHAR字段),然後其他字段應該處於休眠狀態。在其他情況下,我可能會選擇幾個領域的組合,這些應該是積極的,沒有選擇的領域應該是中立的。 讓我減少你的任務範圍。 1)告訴我如何在過濾過程中使用綁定參數來查詢CHAR字段,換言之,應該接受任何內容2)您還可以告訴我如何檢查軟件生成的查詢字符串