请教用java连接mysql数据库的问题? 比如说,我要查询一个表的全部内容并输出,select * from table;但是我事先不知道table有几个字段的情况下,如何能得到字段的名称和字段的个数? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 调用 resultset.getMetaData(),能得到一个 ResultSetMetaData 对象。多看看 java.sql.* 的文档吧,不算复杂。 多谢楼上的,终于知道怎么用了,不过还有一个问题:public void outAllInfoOfTable(String tableName){ this.tableName = tableName; String sql="desc " + tableName; try { result = stmt.executeQuery(sql); metadata = result.getMetaData(); tempCount = metadata.getColumnCount(); System.out.println("tempCount is "+tempCount); } catch (SQLException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } System.out.println("---------------"); System.out.println("desc "+ tableName + ":"); this.printTableInfo();}我写了一个打印表字段信息的函数,现在的问题是我的表中只有2个字段name,age可是显示的tempCount=6; 如果后面在用到这个值的时候肯定是越界了,请问各位帮忙这是为什么?如何解决? hehe, 楼主,你把 1 楼和 2 楼的“解决方案”混在一起用了,这样不行的!如果你用 1 楼的解决方案,sql 语句是 desc table,那么,不用检查 metadata,它的返回结果一定是 6 列,具体是什么意思,你用数据库客户端软件执行一下就知道了。如果你用 2 楼的解决方案,sql 语句应该就是你原来的那个:select * from table 回楼上:select * from table,我已经实现了,没有问题,我现在是想得到table的字段数,因为table是个参数,字段数是不固定的,比如说table有2个字段,name和age,在mysql客户端上显示的是这样的:desc table;nameage对吧,我现在就像得到有几个这样的字段?我的方法不行,那如何能得到呢? 唉,楼主还是没明白 metadata 的意思。如果像你说的,你的 table 里有两个字段,那 select * from table 的 ResultSet 里每行记录就应该有这样两个字段,但现在你并不知道有这样两个字段,对吧?所以,就调用 rs.getMetaData(),它能告诉你这个 ResultSet 的每行记录有几个字段、都叫什么名字、类型是什么。 select * from table;查到的是表中的数据,这个我知道了,先不说这个了desc tables;得到的是表的字段,现在我就想得到字段个数如何做啊? 下面这段程序分别用两种办法查询并打印出 table 的结构信息,希望楼主仔细看看,别辜负我敲的这么多字 ;) Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:336/test?user=root&useUnicode=true&characterEncoding=utf8"); String table = "test"; String sql = "desc " + table; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); System.out.println("table name: " + table); int cnt = 0; while (rs.next()) { System.out.println("Column " + (++cnt) + ":"); System.out.println("\t Field : " + rs.getString(1)); System.out.println("\t Type : " + rs.getString(2)); System.out.println("\t Null : " + rs.getString(3)); System.out.println("\t Key : " + rs.getString(4)); System.out.println("\t Default: " + rs.getString(5)); System.out.println("\t Extra : " + rs.getString(6)); } rs.close(); pstmt.close(); System.out.println("=================================="); sql = "select * from " + table; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); System.out.println("table name: " + table); for (int i=1; i<=numberOfColumns; i++) { System.out.println("Column " + i + ":"); System.out.println("\t ColumnLabel : " + rsmd.getColumnLabel(i)); System.out.println("\t ColumnName : " + rsmd.getColumnName(i)); System.out.println("\t ColumnDisplaySize : " + rsmd.getColumnDisplaySize(i)); System.out.println("\t ColumnType : " + rsmd.getColumnType(i)); System.out.println("\t ColumnTypeName : " + rsmd.getColumnTypeName(i)); System.out.println("\t Nullable : " + rsmd.isNullable(i)); System.out.println("\t Precision : " + rsmd.getPrecision(i)); System.out.println("\t Scale : " + rsmd.getScale(i)); } rs.close(); pstmt.close(); conn.close(); 现在我明白第二个程序段了,第一个还是不太明白?就是为什么desc table;就是6列 ?是对于每个表这个值都是一样的? 哦,多谢maquan('ma:kju) ,我终于知道了 正则表达式的一些东西 java编写的文件存储与读取程序 如何用JNDI修改AD账户的password JAVA 与 QQ 的通讯初步 50分求此题的简便算法 程序有错误但不知道原因! 什么叫助手类?能举例说明一下否? 有人帮我这段代码注释下吗?谢谢 求救:日期比较问题 !!!!!!!!!!!!!!!!!!!!help me给出详细的解释谢谢各位!!!!!!! system.out.println("i= " i+ " j= "+j) 请教问题.谢谢! Jtable能不能实现右键选择行?(高分求救)
public void outAllInfoOfTable(String tableName){
this.tableName = tableName;
String sql="desc " + tableName;
try {
result = stmt.executeQuery(sql);
metadata = result.getMetaData();
tempCount = metadata.getColumnCount();
System.out.println("tempCount is "+tempCount);
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
System.out.println("---------------");
System.out.println("desc "+ tableName + ":");
this.printTableInfo();
}
我写了一个打印表字段信息的函数,现在的问题是我的表中只有2个字段name,age可是显示的tempCount=6; 如果后面在用到这个值的时候肯定是越界了,请问各位帮忙这是为什么?如何解决?
desc table;
name
age
对吧,我现在就像得到有几个这样的字段?我的方法不行,那如何能得到呢?
desc tables;得到的是表的字段,现在我就想得到字段个数如何做啊?
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:336/test?user=root&useUnicode=true&characterEncoding=utf8");
String table = "test"; String sql = "desc " + table;
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
System.out.println("table name: " + table);
int cnt = 0;
while (rs.next()) {
System.out.println("Column " + (++cnt) + ":");
System.out.println("\t Field : " + rs.getString(1));
System.out.println("\t Type : " + rs.getString(2));
System.out.println("\t Null : " + rs.getString(3));
System.out.println("\t Key : " + rs.getString(4));
System.out.println("\t Default: " + rs.getString(5));
System.out.println("\t Extra : " + rs.getString(6));
}
rs.close();
pstmt.close(); System.out.println("=================================="); sql = "select * from " + table;
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
System.out.println("table name: " + table);
for (int i=1; i<=numberOfColumns; i++) {
System.out.println("Column " + i + ":");
System.out.println("\t ColumnLabel : " + rsmd.getColumnLabel(i));
System.out.println("\t ColumnName : " + rsmd.getColumnName(i));
System.out.println("\t ColumnDisplaySize : " + rsmd.getColumnDisplaySize(i));
System.out.println("\t ColumnType : " + rsmd.getColumnType(i));
System.out.println("\t ColumnTypeName : " + rsmd.getColumnTypeName(i));
System.out.println("\t Nullable : " + rsmd.isNullable(i));
System.out.println("\t Precision : " + rsmd.getPrecision(i));
System.out.println("\t Scale : " + rsmd.getScale(i));
}
rs.close();
pstmt.close(); conn.close();
就是为什么desc table;就是6列 ?是对于每个表这个值都是一样的?