获得数据库相关的信息_获得参数信息_获得结果信息
获得数据库相关的信息
获得参数信息
※需要在DriverManager.getConnection(url, user, password);
的url中添加generateSimpleParameterMetadata=true
private static String url = "jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true";
不然会报错(Parameter metadata not available for the given statement)
获得结果信息
获得数据库相关的信息----------------------------------------------------------
meta .supportsTransactions(); //是否支持事务
package com.dwt1220;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
public class DBMD {
public static void main(String[] args) throws SQLException {
Connection conn=JdbcUtils.getConnection();
DatabaseMetaData dbmd=conn.getMetaData();
/**************数据库名*******************/
System.out.println("db name:"+dbmd.getDatabaseProductName());
/***********是否支持事务*******************/
System.out.println("tx:"+dbmd.supportsTransactions());
conn.close();
}
}
获得参数信息-------------------------------------------------------------------------------------------------
※需要在DriverManager.getConnection(url, user, password);
的url中添加generateSimpleParameterMetadata=true
private static String url = "jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true";
不然会报错(Parameter metadata not available for the given statement)
package com.dwt1220;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
public final class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true";
private static String user = "root";
private static String password = "123";
private JdbcUtils() {
}
static {// 静态代码快,只执行一次。
try {
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
public static void free(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
package com.dwt1220;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ParameterMetaTest {
public static void main(String[] args) throws SQLException {
Object[] params=new Object[]{"lisi",100f};
read("select* from user where name = ? and money > ?",params);
}
static void read(String sql,Object[] params) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs=null;
try {
conn = JdbcUtils.getConnection();
ps = conn.prepareStatement(sql);
ParameterMetaData pmd=ps.getParameterMetaData();
int count=pmd.getParameterCount();
System.out.println("-----------------count参数总数------------------");
System.out.println(count);
for(int i=1;i<=count;i++){
ps.setObject(i, params[i-1]);
}
System.out.println("-----------------PreparedStatement(参数信息)-----------------------------------");
for(int i=1;i<=count;i++){
/****************返回的类型与数据库的实现有关,(mysql没有实现正确返回的功能)****************************************/
System.out.print(pmd.getParameterClassName(i)+"\t");
System.out.print(pmd.getParameterType(i)+"\t");
System.out.println(pmd.getParameterTypeName(i));
}
rs = ps.executeQuery();
System.out.println("-----------------查询结果---------------------------------------");
while (rs.next()) {
System.out.println(rs.getObject("id") + "\t"
+ rs.getObject("name") + "\t"
+ rs.getObject("birthday") + "\t"
+ rs.getObject("money"));
}
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}
获得结果信息
resultSetMetaData.getColumnName(i);
resultSetMetaData.getColumnType(i);
package com.dwt1220;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public final class ResultSetMetaTest {
public static void main(String[] args) throws Exception {
read();
}
static void read() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "select id,name,birthday,money from user";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
/**********通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等***************/
ResultSetMetaData resultSetMetaData =rs.getMetaData();
/*********获得共有几列*********/
int columnCount=resultSetMetaData.getColumnCount();
System.out.println("count:"+columnCount);
System.out.println("-----------------ResultSetMetaData----------------------");
for(int i=1;i<=columnCount;i++){
System.out.print(resultSetMetaData.getColumnClassName(i)+"\t");
System.out.print(resultSetMetaData.getColumnName(i)+"\t");
System.out.println(resultSetMetaData.getColumnType(i)+"\t");
}
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}