怎么获取PreparedStatement 的最终执行SQL
3个回答
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();
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());????附件是这段代码中用到的类。??????????????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在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);
}
}
..原因就是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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询