JDBC의 ParameterMetaData
3664 단어 JDBC
2. 파라메터메타데이터를 통해 파라미터 정보를 얻을 수 있다.
JdbcUtils의 코드:
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Jdbc
*/
public final class JdbcUtils {
// localhost:3306
private static String url = "jdbc:mysql:///jdbc";
private static String url2
= "jdbc:mysql:///jdbc?user=root&password=root&"
+ "useUnicode=true&generateSimpleParameterMetadata=true";
private static String username = "root";
private static String password = "root";
/**
* , ,
*
*/
private JdbcUtils(){
}
//
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
*
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url2);
//return DriverManager.getConnection(url, username, 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 cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
/**
*
*/
public class ParameterMetaTest {
/**
*
* @throws SQLException
*/
@Test
public void testRead() throws SQLException {
// java.sql.Date java.util.Date
Object[] params = new Object[] { "lisi",
new java.util.Date(System.currentTimeMillis()), 100f };
read("select * from user where name = ? and birthday < ? and money > ?", params);
}
/**
*
* @param sql
* @param params
* @throws SQLException
*/
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);
// ,MySQL
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));
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.free(rs, ps, conn);
}
}
}
테스트 결과:
매개 변수 개수: 3 java.lang.String 12 VARCHAR java.lang.String 12 VARCHAR java.lang.String 12 VARCHAR 2 lisi 2017-06-06 310.0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 시각화 도구 FineReport와 AWS RedShift 연결(JDBC 방법)Amazon Redshift는 클라우드의 완전 관리형, 페타바이트 규모 데이터 웨어하우스 서비스입니다. 수백 기가바이트의 데이터로 시작하여 페타바이트 이상까지 확장할 수 있습니다. 이렇게 하면 고객의 비즈니스와 고객...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.