MySQLのレコード数を配列String[]の要素数にして、他クラスから参照したいと考えています。
具体的には、
「SELECT count(*) FROM table");」の結果nを、
String[] a = new String[n]として、中身にデータを与え、それを他クラスから参照したいと考えています。
###該当のソースコード
tst.java
1public class tst { 2 public static void main(String args[]) throws SQLException, ClassNotFoundException { 3 tst2.MainMethod(); 4 for (int i = 0; i < tst2.a.length; i++) { 5 tst2.a[i] = Integer.toString(i); 6 System.out.println(tst2.a[i]); 7 } 8 } 9 10}
tst2.java
1public class tst2 { 2 public static int n; 3 public static String[] a = new String[n]; 4 5 public static void MainMethod() throws SQLException, ClassNotFoundException { 6 String url = "jdbc:mysql://localhost/data1"; 7 String user = "user"; 8 String password = "pass"; 9 Class.forName("com.mysql.jdbc.Driver"); 10 Connection conn = DriverManager.getConnection(url, user, password); 11 Statement stmt = conn.createStatement(); 12 13 count(stmt); 14 String[] a = new String[n]; //冗長な宣言 15 16 stmt.close(); 17 conn.close(); 18 } 19 20 public static void count(Statement stmt) throws SQLException { 21 ResultSet rset2 = stmt.executeQuery("SELECT count(*) FROM table"); 22 rset2.next(); 23 n = Integer.parseInt(rset2.getString(1)); 24 rset2.close(); 25 } 26 27}
tst2.javaでは、
・レコード数nを代入するint n;
・n個分の要素数を持つ配列String[] a;
が宣言されています。
グローバル変数となっていますので、プログラムを実行した時にはnの中身は0が代入されており、結果的にString[] aの要素数も0となるので配列として機能しません。
そこでtst2.javaでは、レコード数をjdbcドライバで取得した後にも宣言しています。
String[] a = new String[n]; //冗長な宣言
明らかに二度手間な変数宣言ですが、グローバル変数のString[] a の行を無くし、こちらで宣言すると、tst2.javaではString a[レコード数]として扱うことが出来るのですが、tst.javaから参照することが出来ません(グローバル変数で無いため)。
上記プログラム(tst.java)ではtst2.a[i]の値にString型のiを代入していますが、MySQLからロードした文字列を代入したいと考えています。
###まとめ
-
tst.javaで、tst2.javaの配列a[n]に代入、または参照したい。
-
そのためには配列aはグローバル変数である必要がある。
-
グローバル変数で宣言すると、レコード数nの値が0になってしまい、必要な要素数が確保できない
となります。
拙文となりますが、よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/10 23:14