利用PreparedStatement对sql语句的?赋值后,出现奇怪的结果。请大家帮忙解决,谢谢。 本帖最后由 u013504533 于 2014-10-10 11:50:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下: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.Driverjdbc.connection.url=jdbc:mysql://localhost:3306/dsm2?useUnicode=true&characterEncoding=utf-8jdbc.connection.username=rootjdbc.connection.password= 还有一个工具类: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; }} 用字符串累加的方法吧,参数一般是用在WHERE中的 String sql="select ? from stu"; params.add("dsm2_stuId");换成String params ="stuId";String sql="select"+ params+" from stu"; 之前都是用oracle,这是第一次用MySQL。字符串累加是可以的,因为开发经验少,所以很多知识不是很了解,例如?的使用。碰到这奇怪问题真是醉了。 prepare 中不支持把字段名,表名做为参数传入。直接进行字符串拼接就行了。 with read only 从 oracle 转到 mysql 的问题 有使用POSTGRESQL的朋友进来,统计使用人数罗 急!!!MYSQL远程连接不上出错!! 多表查询的正确查询问题. 高手请救命啊!!!! 错误:Duplicate entry '0' for key 1!?!?!?! Mysql 用户登陆的问题 MYSQL 多表查询 数据库太大,有按年月分别建库的搞法? 请教一个全文索引的问题 order by centos安装XtraBackup失败,版本冲突怎么办?
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=
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;
}
}
params.add("dsm2_stuId");换成
String params ="stuId";String sql="select"+ params+" from stu";
字符串累加是可以的,因为开发经验少,所以很多知识不是很了解,例如?的使用。
碰到这奇怪问题真是醉了。