String query = "select email from emp_select";
Statement stmt;
try {
DB db=new DB();
db.connect();
stmt = (Statement) db.conn.createStatement(); // DB is connected here
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
System.out.print(", ");
}
System.out.println("");
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
System.out.print(", ");
String columnValue = rs.getString(i);
name[i]=columnValue;
System.out.println(name[i]); //Everything executes well till here
}
}
stmt.close();
} catch(Exception ex) {}
for (int i = 1; i < name.length; i++) {
System.out.println(name[i]); // why it gives null value here ?
}
回答
我想知道这是你真正想要的:
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
System.out.print(", ");
String columnValue = rs.getString(i);
name[i]=columnValue;
System.out.println(name[i]); //Everything executes well till here
}
}
这里正在发生的事情是,while循环开始,现在for循环开始执行,现在里面的for循环中你是给所有元素的名称数组相同的值即rs.getString(i),但你的查询返回只有一列你的rs,即电子邮件(但你编码在你的for循环,如名称[2] = rs.getString(2) [3] = rs.getString(3),但这里没有什么比rs.getString(1))更多。似乎你应该做的是这个,这可能会给你预期的结果
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
System.out.print(", ");
if (rs.next()) // hope this works, not sure (but it does works for me at the click of a button, when used through Swing Events)
{
String columnValue = rs.getString(1);// Since only one thing is being returned by your rs object.
name[i]=columnValue;
System.out.println(name[i]); //Everything executes well till here
}
}
希望这可能可以解决。
Regards
非常感谢你sooo我认为这个问题就像for循环中的“i”的值总是1,所以我使用了另一个变量,如“name [j]”。它工作正常..再次感谢 – user1151442 2012-01-16 13:45:27
@ user1151442:您的欢迎。很高兴知道它为你工作。问候 – 2012-01-16 14:08:29
好让我这个版本的代码的改写这样的:
String query = "select email from emp_select";
Statement stmt;
try {
DB db=new DB();
db.connect();
stmt = (Statement) db.conn.createStatement(); // DB is connected here
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
List<String[]> names = new ArrayList<String[]>();
String[] name=null; //assuming here you have only Varchar cols
while (rs.next()) {
name = new String[numberOfColumns];
for (int i = 0; i <= numberOfColumns; i++)
{
name[i]=rs.getString(i);
}
names.add(name);
}
stmt.close();
} catch(Exception ex) {
ex.printStackTrace();
}
for(String[] colResults : names)
{
for (int i = 0; i < colResults.length; i++) {
System.out.println(colResults[i]);
}
}
我已经初始化它像字符串name [] = new String [100];它具有全球范围 – user1151442 2012-01-16 08:39:04
全球范围?在Java中? – Viruzzo 2012-01-16 08:52:19
Sense U中的全局作用域可以在整个程序中对其进行访问 – user1151442 2012-01-16 08:58:09
我想这不是“给空”为姓数组的每个元素。它可能是null,因为你的name数组中有更多的元素比结果集中有列,或者因为结果集的最后一行实际上包含空值(你正在抛出除最后一行外的所有行)。
旁注:在Java中
- 数组的下标从0开始不把任何一个数组的第一个元素是值得商榷的
- 像你这样做你永远不应该忽略的异常。如果在此方法中无法处理SQLException,则应该由方法抛出,而不是忽略。
- 结果集,语句和连接应该在finally块中关闭。
实际上,它将为所有元素返回null,但随后会为ResultSet返回最后返回的值以及null! – user1151442 2012-01-16 08:35:02
您有一个一维数组来存储几行,每行都包含多列。你打算如何工作。您的代码只将结果集的最后一行存储在您的数组中,因为在结果集的每一行都会覆盖前一次迭代中存储的内容。 – 2012-01-16 08:39:45
- 1. 无法将参数2从'std :: string *'转换为'std :: string'
- 2. 将2D String数组转换为2D double
- 3. 如何将Serializable转换为String数组?
- 4. 将HttpEntity.Chunk转换为数组[String]
- 5. 将java.util.List转换为ResultSet?
- 6. 无法将CString转换为BYTE数组
- 7. 无法将Int数组转换为ASCII
- 8. 无法将值转换为浮点数
- 9. iOS无法将[String:Any?]转换为[String]如何转换?
- 10. 无法转换'String?'类型的值(Alamofire)
- 11. 将std :: string或string ^转换为C++/cli中的字节数组
- 12. 如何将数组[String]转换为Set [String]?
- 13. 无法将组合框中的值转换为整数
- 14. 无法从方法组转换为System.Func <string>
- 15. ArrayList <String>无法转换为IBarDataSet
- 16. 无法从'std :: string'转换为'LPSTR'
- 17. 无法从字符串[]转换为String
- 18. C#无法从'int'转换为'string'
- 19. 无法将'UIImage'类型的值转换为期望的参数类型'String'
- 20. 无法将类型'String'的值转换为期望的参数类型'NSManagedObject'Swift
- 21. 无法将类型'String'的值转换为期望的参数类型'URL'
- 22. 无法将“String”类型的值转换为预期的参数类型“URL”
- 23. 无法将类型'String'的值转换为期望的参数类型'Bool'
- 24. 如何转换数组为String []在C#
- 25. 转换的char []数组为String
- 26. 无法将双精度数组转换为数组
- 27. 无法将值“”转换为键入“System.Char”
- 28. 将Java ResultSet转换为Spark DataFrame
- 29. 将JDBC ResultSet转换为Spark RDD/DataFrame
- 30. 如何将Cassandra ResultSet转换为Spark DataFrame?
你在哪里声明'name'数组? – home 2012-01-16 08:19:59
顺便说一句:给你的要求一维数组似乎没有意义... – home 2012-01-16 08:24:12