怎么获取PreparedStatement 的最终执行SQL

 我来答
千锋教育
2016-07-23 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
获得链接部分省略……

String sql = "insert into dept(deptno,deptname,deptadress) values(?,?,?)";
// 获得PreapareStatment 对象
PreapareStatment pst=con.preaparestatment(sql);
// 给占位符赋值

pst.setInt(1,11);
pst.setString(2,"zhangsan");
pst.setString(2,"zhongguoshanxishengxi'anshi");】
//执行sql 语句

int rows=pst.excutUpdate();
System.out.println(rows);
//释放资源
pst.close();
con.close();
匿名用户
2016-07-23
展开全部
靠谱,推荐大家使用。????Connection con = DriverManager.getConnection(url); DebugLevel debug = DebugLevel.ON; String sql = "SELECT name,rate FROM EmployeeTable WHERE rate > ?"; //Use a factory instead of Connection to get a PreparedStatement. //PreparedStatement ps = con.prepareStatement(sql); PreparedStatement ps = StatementFactory.getStatement(con,sql,debug); ps.setInt(1,25); //If ps is a DebuggableStatement, you see the statement, //otherwise, an object identifier is displayed System.out.println(" debuggable statement= " + ps.toString());????附件是这段代码中用到的类。??????????????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就烦条0o
2016-07-23 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
在CSDN的JAVA基础版,常常有人问及如何得到PreparedStatement最终执行的SQL语句;或者如何在控制台输出占位符的真实值...
..原因就是PreparedStatement执行的sql语句有大量的占位符?....
问题诸如JDBC中:

如何得到 conn.prepareStatement 最终执行的sql语句。
sql="update table1 set a=?,b=?"
stmt = con.prepareStatement(sql);
stmt.setObjec t(1,"a");
stmt.setObjec t(2,"b");

希望可以通过stmt或者conn 得到:
update table1 set a='a',b='b'

亦或Hibernate中

如我执行:find("select * from t_table where id = ?",new Integer(5));
在控制台显示SQL时只显示:select * from t_table where id = ?
如何才能做到将控制台显示的占位符用其真实的值来替换?
即控制台输出时显示:select * from t_table where id = 5

共享我在工程中的使用方法:
插入操作:

/**
* 执行插入数据库的语句
public int executeInsert(String sql, Object[] params) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1 获得连接
conn = MyDBConnection.getInstance().getConnection();
//2 设置提交方式为程序控制
conn.setAutoCommit(false);
//3 获得语句对象
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
//4 设置SQL语句的参数
if (null != params && 0 < params.length) {
setParams(pstmt, params);
}
//5 打印SQL语句
if (MyDBConstants.showSQL) {

getPreparedSQL(sql, params);
}
//6 执行语句
pstmt.executeUpdate();
//7 程序提交
conn.commit();
//8 返回生成的主键
rs = pstmt.getGeneratedKeys();
int generatedKey = 0;
if (rs.next()) {
generatedKey = rs.getInt(1);
}
if (0 < generatedKey)
throw new MySQLException("插入记录时出错");
return generatedKey;
} catch (SQLException e) {
//回滚
MyDBUtil.rollBack(conn);
throw new MySQLException(e);
} finally {
//关闭打开的操作
MyDBUtil.close(conn, pstmt, rs);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式