1

3 つのテーブルを結合する SELECT クエリがあります。MYSQL テーブルを分離して Jtable に追加したいと考えています。結果セットでテーブル名を特定する方法を知りたいのですが?

resultLoad("SELECT sqNum,RegDate,JobNo,DecName,NoOfLines,EntryType,EntrySubType,EntrySubType2,Amount,Status FROM paysheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' UNION SELECT sqNum,RegDate,JobNo,DecName,NoOfLines,EntryType,EntrySubType,EntrySubType2,Amount,Status FROM creditsheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' ORDER BY RegDate UNION SELECT sqNumber,date,JobNumber,DecName,noOfLines,type,type,type,CommissionAmount,status FROM newjobsheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' ORDER BY RegDate");

private void resultLoad(String loadQuery) {

    try {
        Connection c = DB.myConnection();
        Statement s = c.createStatement();
        ResultSet r = s.executeQuery(loadQuery);

        while (r.next()) {
            Vector v = new Vector();
            v.addElement(r.getString("sqNum"));
            v.addElement(r.getString("RegDate"));
            v.addElement(r.getString("JobNo"));
            v.addElement(r.getString("DecName"));
            v.addElement(r.getString("NoOfLines"));
            v.addElement(r.getString("EntryType") + " - " + r.getString("EntrySubType") + " - " + r.getString("EntrySubType2"));
            v.addElement(r.getString("Amount"));
            v.addElement(r.getString("Status"));
            tm.addRow(v);
            totalComAmount = totalComAmount + Integer.parseInt(r.getString("Amount"));
        }
    } catch (Exception e) {
        //  e.printStackTrace();
        JOptionPane.showMessageDialog(this, e, "Error!", JOptionPane.ERROR_MESSAGE);
    }
}

日付を並べ替えて、このように Jtable に追加したいと思います。しかし、異なる列を含む 3 つのテーブル。

4

3 に答える 3

6

結果セットから、ResultSetMetaData を取得できます。次のようになります。

rs.getMetaData().getTableName(int Column);
于 2012-07-29T17:52:30.223 に答える
1

「表を分けて表に追加したい。」

それが何を意味するのかわかりませんが、

「Resultset 内のテーブル名を特定する方法を知りたいだけです。」

答えはノーです。クエリを書き直して自動的に実行されるようにしない限り、そうではありません。

SELECT ステートメントは、新しい (仮想) テーブルを生成します。それが提供する列は、技術的にはその新しい仮想テーブルの列です。結果はそれらの列の起源を覚えていません

ただし、クエリを記述して、SELECT リスト内のすべての式に列エイリアスを指定して、元を識別できるようにすることができます。たとえば、次のことができます。

SELECT table1.column1 AS table1_column1
,      table1.column2 AS table1_column2
,      ...
,      table2.column1 AS table2_column1
,      ...
FROM   table1 INNER JOIN table2 ON ... etc

アンダースコアが目的のセパレーターとして適切でない場合は、エイリアスを引用符で囲み、ドットを含む任意の文字をセパレーターとして選択することを検討できます。

SELECT table1.column1 AS `table1.column1`
,      ....
etc.

アップデート:

あなたのクエリが複数のテーブルの UNION であることに気付きました。その場合、明らかにこの方法は機能しません。あなたの最善の策は、次のようにクエリを書き直すことだと思います。

SELECT 'paysheet' as table_name, ...other columns...
FROM   paysheet
UNION
SELECT 'creditsheet', ...other columns...
...
于 2012-07-29T17:48:49.780 に答える
0

3 つの別々のテーブルからSELECTデータを取得し、それを 1 つのクエリで 1 つの ResultSet として返してから、結果を個別のテーブルに分離したいようです。

これは完全に直観に反しています。

各テーブルの結果を個別に確認できるように結果を分離したい場合は、3 つの異なるSELECTクエリを実行することをお勧めします。基本的に、3つのものを組み合わせてから、1回のパスで再度分離するように求めています。これをしないでください。最初にそれらを結合しないままにしておくと、それらを元に戻すことは問題になりません。

于 2012-07-29T17:52:55.667 に答える