0

Java を使用して、localhost マシンで実行されている MySQL サーバーにセットアップしたデータベースと通信する Web サービスを作成しています。私のメソッド ListColumns() は、指定されたテーブル内の列の名前を検索し、それらを ResultSet から配列に変換してから、その配列を返します。正しいサイズの配列を返していますが、それは完全な「null」値です。

    import java.sql.*;

public class DBConnect {

private Connection con;
private Statement st;
private ResultSet rs;

public DBConnect(){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        String database = "jdbc:mysql://localhost:3306/binapartslist";
        String userID = "root";
        String userPW = "root";     
        //jdbc:mysql://localhost:3306/`database name` --> This is the database
        //userID database user
        //userPW user password

        //Connecting to the database
        con = DriverManager.getConnection(database, userID, userPW);
        st = con.createStatement();
    }
    catch(Exception ex){
        System.out.println("Error: "+ex);
    }
}
public String getUser(){
    try{
        DatabaseMetaData dmd = con.getMetaData();
        String username = dmd.getUserName();
        //System.out.println("Current User: "+username);
        return username;
    }catch(Exception ex){
        System.out.println(ex);
        return null;
    }
}
public void getData(String table){
    int i=1;
    try{

        String query = "select * from "+table;
        rs = st.executeQuery(query);
        System.out.println("Records from Database");

        String[] columnNames = ListColumns(table);
        int count = columnNames.length;
        System.out.println(ListColumns(table));

        System.out.println("number of columns "+count);         
        for(i=0; i<count; i++){
            System.out.println(columnNames[i]);
        }

    }catch(Exception ex){
        System.out.println(ex);
    }

}
public int countTables (String database){
    try{
        DatabaseMetaData dmd = con.getMetaData();
        rs= dmd.getTables(null, database, "%", null);

        int count=0;
        while(rs.next()){
            count++;
        }
        return count;

    }catch(Exception ex){
        System.out.println(ex);         
        return 0;
    }

}   
public int countColumns (String table){
    try{
        DatabaseMetaData dmd = con.getMetaData();
        rs = dmd.getColumns(null, null, table, "%");

        int count=0;
        while(rs.next()){
            count++;
        }
        return count;

    }catch(Exception ex){
        System.out.println(ex);         
        return 0;
    }

}
public String[] ListColumns(String table){
    String[] columnsList = new String[countColumns(table)];
    try{            
        DatabaseMetaData dmd = con.getMetaData();
        rs = dmd.getColumns(null, null, table, "%");

        int i=0;
        while(rs.next()){
            columnsList[i]=rs.getString("COLUMN_NAME");
            i++;
        }
        System.out.println("columnsList[] has "+columnsList.length+" values");
        for(i=0;i<columnsList.length;i++){
            System.out.println("Column Name: "+columnsList[i]);
        }
        return columnsList;         
    }catch(Exception ex){
        System.out.println("i screwed up");
        System.out.println(ex);         
        return columnsList;
    }
}
public String[] ListTables(String database){
    try{
        DatabaseMetaData dmd = con.getMetaData();
        rs = dmd.getTables(null, database, "%", null);

        System.out.println(database);
        String[] tablesList = new String[countTables(database)];
        int i=0;
        while (rs.next()) {
            tablesList[i]=rs.getString("TABLE_NAME");
            System.out.println("table name: "+rs.getString(3));
            i++;
        }               
        return tablesList;
    }catch(Exception ex){
        System.out.println(ex);
        return null;
    }
}
public void createUser(String username, String password, String rank) throws SQLException{
    try{
        con.setAutoCommit(false);
        st.executeUpdate("INSERT INTO `users` VALUES ('"+username+"', '"+password+"', '"+rank+"');");
        con.commit();
        con.setAutoCommit(true);
    }catch (Exception ex ) {
        System.out.println(ex);
            if (con != null) {
                try {
                    System.err.print("Transaction is being rolled back");
                    con.rollback();
                }catch(Exception excep) {
                    if (con != null) {
                        con.rollback();
                        con.setAutoCommit(true);
                      }
                    System.out.println(excep);
                }
            }
    }
}
public void deleteUser(String username) throws SQLException{
    try{
        con.setAutoCommit(false);
        st.executeUpdate("DELETE FROM `users` WHERE username = '"+username+"'");
        con.commit();
        con.setAutoCommit(true);
    }catch (Exception ex ) {
        System.out.println(ex);
            if (con != null) {
                try {
                    System.err.print("Transaction is being rolled back");
                    con.rollback();
                }catch(Exception excep) {
                    if (con != null) {
                        con.rollback();
                        con.setAutoCommit(true);
                      }
                    System.out.println(excep);
                }
            }
    }
}

}

これらのメソッドが含まれるクラスを次のコードで呼び出しています。

    import java.sql.SQLException;

    public class Main
    {
        public static void main(String[] args) throws SQLException {
            DBConnect connect = new DBConnect();
            System.out.println(connect.getUser());
            System.out.println(connect.ListColumns("parts list"));
            connect.ListColumns("parts list");
        }


    }

列名の文字列を含む配列を返すために、columnsList() が必要です。編集:配列columnList[]が実際にforループとprintlnを使用して列名を受け取っていることを確認しました。なぜリターンがまだヌルでいっぱいなのか理解できません

また、使用しているすべてのコードを追加しました。ListTables() メソッドは非常に似ており、同じ問題がありますが、一方を修正すると、もう一方も修正されると思います

事前に助けてくれてありがとう

4

2 に答える 2

0

私は週末の後に仕事を始めましたが、コードは最終的に機能することにしました。

于 2013-07-24T14:36:34.277 に答える