package com.kangwei.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
public final class SqlHelper {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
private static String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
private static String url = "jdbc:odbc:andonSQL";
private static String username = "sa";
private static String password = "sql";
public static void main(String[] args) {
//**测试executeQueryAL
String sql="SELECT name,password FROM tblOperatorPW WHERE 1=?";
String[] paras={"1"};
new SqlHelper().executeQueryAL(sql, paras);
}
public static Connection getConn() {
return conn;
}
public static PreparedStatement getPs() {
return ps;
}
static{
try {
/**
*1. 注册驱动,静代码块只执行一次
*/
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void executeQueryAL(String sql,String []parameters)
{
try {
conn = DriverManager.getConnection(url, username, password);
ps = conn.prepareStatement(sql);
if(parameters !=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
//执行查询
rs = ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int columnNum=rsmd.getColumnCount();
if (rs.next())
{
for(int i=0;i<columnNum;i++)
{
System.out.println(rs.getObject(i+1)); //此句输出全为 null,
System.out.println(rs.getString(i+1)) ; //此句结果正确
}
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
//关闭资源
SqlHelper.close(conn, ps, rs);
}
}
//关闭资源
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(stmt!=null){
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
stmt = null;
}
if(conn!=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
conn=null;
}
}
}
各位
为什么上面的代码64行不能得到正确的结果,全为null,
65行能得到正确的结果。。。
为什么呀。。。??
------解决思路----------------------
我用MySQL驱动查询,调用getObject(int)方法,能够得到正确的列值。
猜测是你用的驱动不支持getObject(int)方法?