您的位置:首页 > 数据库

jdbc链接数据库名,获取表名、字段名和数据

2017-07-20 15:11 477 查看
这里以mysql 为例,最近项目需要外部异表数据源的载入,需要自动获取连接数据的库名,数据表名,字段名和数据。现在做个笔记。

想获取库里面的数据表名,字段名和数据,网上也有很多,怎么写看个人爱好。

获取该连接的库名,由于没有什么资料,我查了也没有结果,主要是接受的字符串不知道是什么,只是一个地址。通过反复试验,用detabase居然可以显示了。

如果只是查询库名的话,url地址可以不用写哪个库 url = “jdbc:mysql://127.0.0.1:3306

String sql1 = "SHOW DATABASES";
ResultSet resultSouceSet = statement
.executeQuery(sql1);
while(resultSouceSet.next()){
System.out.println(resultSouceSet.getString("database"));

System.out.println();

}


直接上整套代码:

package ;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.HashMap;
import java.util.Properties;
/**
* 查询库中的表 以及表结构数据
* @author Administrator
*
*/
public class ConnTest {

public static void main(String[] args) throws Exception {

String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/demo";
String user = "root";
String password = "root";

Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
if (!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
else
System.err.println("connect filed");
// 获取所有表名
Statement statement = conn.createStatement();

//获取该连接下所有的库名
String sql1 = "SHOW DATABASES";
ResultSet resultSouceSet = statement
.executeQuery(sql1);
while(resultSouceSet.next()){
System.out.println(resultSouceSet.getString("database"));

System.out.println();

}

getTables(conn);

ResultSet resultSet = statement
.executeQuery("select * from table1");
//        // 获取列名
ResultSetMetaData metaData = resultSet.getMetaData();
for (int i = 0; i < metaData.getColumnCount(); i++) {
// resultSet数据下标从1开始
String columnName = metaData.getColumnName(i + 1);
int type = metaData.getColumnType(i + 1);
if (Types.INTEGER == type) {
// int
} else if (Types.VARCHAR == type) {
// String
}
System.out.print(columnName + "\t");
}
System.out.println();
// 获取数据
while (resultSet.next()) {
for (int i = 0; i < metaData.getColumnCount(); i++) {
// resultSet数据下标从1开始
System.out.print(resultSet.getString(i + 1) + "\t");
}
System.out.println();

}
statement.close();
conn.close();

}

public static String convertDatabaseCharsetType(String in, String type) {
String dbUser;
if (in != null) {
if (type.equals("oracle")) {
dbUser = in.toUpperCase();
} else if (type.equals("postgresql")) {
dbUser = "public";
} else if (type.equals("mysql")) {
dbUser = null;
} else if (type.equals("mssqlserver")) {
dbUser = null;
} else if (type.equals("db2")) {
dbUser = in.toUpperCase();
} else {
dbUser = in;
}
} else {
dbUser = "public";
}
return dbUser;
}

private static void getTables(Connection conn) throws SQLException {
DatabaseMetaData dbMetData = conn.getMetaData();
// mysql convertDatabaseCharsetType null
ResultSet rs = dbMetData.getTables(null,
convertDatabaseCharsetType("root", "mysql"), null,
new String[] { "TABLE", "VIEW" });

while (rs.next()) {
if (rs.getString(4) != null
&& (rs.getString(4).equalsIgnoreCase("TABLE") || rs
.getString(4).equalsIgnoreCase("VIEW"))) {
String tableName = rs.getString(3).toLowerCase();
System.out.print("tableName: "+tableName + "\t");
// 根据表名提前表里面信息:
ResultSet colRet = dbMetData.getColumns(null, "%", tableName,
"%");
System.out.println();
while (colRet.next()) {
String columnName = colRet.getString("COLUMN_NAME");
String columnType = colRet.getString("TYPE_NAME");
int datasize = colRet.getInt("COLUMN_SIZE");
int digits = colRet.getInt("DECIMAL_DIGITS");
int nullable = colRet.getInt("NULLABLE");
System.out.println(columnName + " " + columnType + " "+
datasize + " " + digits + " " + nullable);
}

}
}
System.out.println();

//         resultSet数据下标从1开始
ResultSet tableRet =  conn.getMetaData().getTables(null, null, "%", new String[] { "TABLE" });
while (tableRet.next()) {
System.out.print(tableRet.getString(3) + "\t");
}
System.out.println();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 mysql jdbc 数据