您的位置:首页 > 数据库

JDBC学习笔记(14):数据库的元数据信息与参数的元数据信息

2015-04-03 18:07 330 查看
数据库的元数据信息:

package com.xxyh.jdbc;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
public class DBMD {

public static void main(String[] args) throws SQLException {
java.sql.Connection conn = JdbcUtils.getConnection();
DatabaseMetaData dbmd = conn.getMetaData();
//        dbmd.getConnection();
System.out.println("数据库连接:" + dbmd.getConnection());
System.out.println("驱动名:" + dbmd.getDriverName());
System.out.println("数据库名:" + dbmd.getDatabaseProductName());
System.out.println("数据库版本号:" + dbmd.getDatabaseProductVersion());
System.out.println("是否支持事务:" + dbmd.supportsTransactions());
}
}


【运行结果】:

数据库连接:com.mysql.jdbc.JDBC4Connection@42ab91e8
驱动名:MySQL Connector Java
数据库名:MySQL
数据库版本号:5.6.21-log
是否支持事务:true

参数的元数据信息

package com.xxyh.jdbc;
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 {
read("select * from user where name=? and birthday<? and money>?", null);
}

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();// 获取参数个数
for (int i = 1; i <= count; i++) {
System.out.print(pmd.getParameterClassName(i)+"\t");
System.out.print(pmd.getParameterType(i)+"\t");
System.out.println(pmd.getParameterTypeName(i));
}
} finally {
JdbcUtils.close(rs, ps, conn);
}
}
}


【运行结果】:
Exception in thread "main" java.sql.SQLException: Parameter metadata not available for the given statement
原因:驱动设置默认不支持使用这个对象
解决方案:在数据库连接URL加上一个参数generateSimpleParameterMetadata=true"
即url="jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true"
​【运行结果】:

java.lang.String 12 VARCHAR
java.lang.String 12 VARCHAR

java.lang.String 12 VARCHAR

可以发现并没有查询到正确的类型,因为并没有查询数据库,直接返回varchar类型。

通用的数据更新操作,不论数据的参数个数:

package com.xxyh.jdbc;
import java.sql.Connection;
import java.sql.Date;
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", new Date(System.currentTimeMillis()), 100f};
read("select * from user where name=? and birthday < ? 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();// 获取参数个数
for (int i = 1; i <= params.length; i++) {
ps.setObject(i, params[i-1]);
}

rs = ps.executeQuery();

while (rs.next()) {
System.out.println(rs.getInt("id") + "\t"
+ rs.getString("name") + "\t"
+ rs.getDate("birthday") + "\t"
+ rs.getFloat("money"));
}
} finally {
JdbcUtils.close(rs, ps, conn);
}
}
}


【运行结果】:
2 lisi 1986-01-01 900.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐