本帖最后由 u013504533 于 2014-10-10 11:50:47 编辑

解决方案 »

  1.   

    代码如下:
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;import dao.BaseDao;public class SqlTest extends BaseDao {
    public void met() {
    List<Object> params = new ArrayList<Object>();
    String sql="select ? from  stu";


    params.add("dsm2_stuId");
    rs = executeQuery(sql, params);

    try {

    while (rs.next()) {
    String stuId = rs.getString("stuId");
    System.out.println("stuId:"+stuId);

    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    public static void main(String[] args) {
    SqlTest sqlTest=new SqlTest();
    sqlTest.met();
    }
    }
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;import util.ConfigManager;public class BaseDao {
    protected Connection conn;
    protected PreparedStatement ps;
    protected ResultSet rs;

    /**
     * @param 无
     * @return boolean 是否和数据库连接成功。
     * 获得数据库连接
     */
    public boolean getConnection() {
    ConfigManager configManager=ConfigManager.getInstance();
    //String driverClass=configManager.getString("jdbc.driver_class");
    String url=configManager.getString("jdbc.connection.url");
    String userName=configManager.getString("jdbc.connection.username");
    String password=configManager.getString("jdbc.connection.password");

    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn=DriverManager.getConnection(url, userName, password);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    return false;
    } catch (SQLException e) {
    e.printStackTrace();
    return false;
    }

    return true;
    }


    /**
     * @param sql sql语句;
     * @param params 参数列表;
     * @return rs 查询的结果集;
     * 查询的基本操作
     */
    public ResultSet executeQuery(String sql,List<Object> params) {
    getConnection();
    rs=null;

    try {
    ps=conn.prepareStatement(sql);
    for (int i=0; i<params.size(); i++) {
    ps.setObject(i+1, params.get(i));
    }
    rs=ps.executeQuery();
    } catch (SQLException e) {
    e.printStackTrace();
    }

    return rs;
    }

    /**
     * @param 无
     * @return boolean 是否成功关闭所有资源。
     * 释放资源
     */
    public boolean closeResource() {
    if (rs!=null) {
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    return false;
    }
    }
    if (ps!=null) {
    try {
    ps.close();
    } catch (SQLException e) {
    e.printStackTrace();
    return false;
    }
    }
    if (conn!=null) {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    return false;
    }
    }
    return true;
    }}jdbc.driver_class=com.mysql.jdbc.Driver
    jdbc.connection.url=jdbc:mysql://localhost:3306/dsm2?useUnicode=true&characterEncoding=utf-8
    jdbc.connection.username=root
    jdbc.connection.password=
      

  2.   

    还有一个工具类:
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;/*
     * 读取配置文件的工具类;
     */
    public class ConfigManager {
    private static ConfigManager configManager;
    private Properties properties;

    private ConfigManager() {
    String configFile="database.properties";
    properties=new Properties();
    InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);

    try {
    properties.load(is);
    is.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public static ConfigManager getInstance() {
    if (configManager==null) {
    configManager=new ConfigManager();
    }

    return configManager;
    }

    public String getString(String key) {
    String value=properties.getProperty(key);

    return value;
    }
    }
      

  3.   

    用字符串累加的方法吧,参数一般是用在WHERE中的
      

  4.   

     String sql="select ? from  stu";
     params.add("dsm2_stuId");换成
    String  params ="stuId";String sql="select"+ params+"  from  stu";
      

  5.   

    之前都是用oracle,这是第一次用MySQL。
    字符串累加是可以的,因为开发经验少,所以很多知识不是很了解,例如?的使用。
    碰到这奇怪问题真是醉了。
      

  6.   

    prepare 中不支持把字段名,表名做为参数传入。直接进行字符串拼接就行了。