import java.sql.*;
/**
* 测试PreparedStatement的基本用法
* 详述:execute,executeUpdate,executeQuery的区别
*/
public class TestPreparedStatement {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
try {
//1:加载驱动类
Class.forName("com.mysql.jdbc.Driver");
//2:建立连接(连接对象内部其实包含Socket对象,是一个远程的连接,比较耗时,这是Connection对象管理的一个要点)
//真正的开发中,都会使用连接池来管理对象
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test","root","123456");
//?是占位符
String insertSql = "insert into user (uid,name,age) values (?,?,?)";
ps = conn.prepareStatement(insertSql);
//参数索引是从1开始计算,
// ps.setString(1, "张三");
// ps.setString(2, "1234");
// ps.setDate(3, new java.sql.Date(System.currentTimeMillis()));
//直接使用setObject(),无需判断值得类型
ps.setObject(1, "1");
ps.setObject(2, "李四");
ps.setObject(3, "18");
ps.executeUpdate();
System.out.println("插入一行记录");
/*
* executeQuery()
*/
String selectSql = "select name from user";
ps = conn.prepareStatement(selectSql);
resultSet = ps.executeQuery();
while (resultSet.next()) {
//李四
System.out.println(resultSet.getString("name"));
}
/*
* execute()
* 运行语句,返回是否有结果集(很少使用)
* execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。
* 其返回值为布尔类型:是true时,表示执行的是查询语句,可以通过getResultset方法获取结果;
* 返回值为false时,执行的是更新语句或DDL语句,getUpdateCount方法获取更新的记录数量
* execute()方法处理的是较复杂的SQL语句或结果。
* 当某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法getResultSet()获得第一个结果集,然后调用适当的getXXX方法获取其中的值。
* 要获得第二个结果集,需要先调用getMoreResults()方法,然后再调用getResultSet方法。
* 当某个过程返回两个更新计数,则首先调用方法getUpdateCount(),然后调用getMoreResults(),并再次调用getUpdateCount()。
* 对于不知道返回内容,则情况更为复杂。如果结果是ResultSet对象,则方法execute 返回 true;
* 如果结果是 Java int,则返回 false。如果返回int,则意味着结果是更新计数或执行的语句是 DDL 命令。
* 在调用方法 execute 之后要做的第一件事情是调用getResultSet或getUpdateCount。
* 调用方法getResultSet可以获得两个或多个ResultSet对象中第一个对象;
* 或调用方法getUpdateCount可以获得两个或多个更新计数中第一个更新计数的内容。
*/
if(ps.execute()) {
resultSet = null;
System.out.println("获取的结果集是");
resultSet = ps.getResultSet();
while (resultSet.next()) {
//1
System.out.println(resultSet.getString("uid"));
}
}else {
System.out.println("更新的结果是:"+ps.getUpdateCount());
}
//运行insert/update/delete,返回更新的行数(常用)
//int a = ps.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
3 PreparedStatement与execute()
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本来想家里在增加一辆车,可是想想家里只有自己一个能开车的人,算了,奥迪卖了再买,就这么定!于是开始比较,途乐、普拉...