老师给的例子都在工程里,好麻烦,,,,整他一下
精华
增:
PreparedStatement ps = conn.prepareStatement("insert into tb_books(name) values(?)");
ps.setString(1, book.getName());
int row = ps.executeUpdate();
查:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from tb_books");
while (rs.next()) {
println(rs.getInt("bookCount"));
}
改:
PreparedStatement ps = conn.prepareStatement("update tb_books set bookcount=?");
ps.setInt(1, bookCount);
int row = ps.executeUpdate();
删:
PreparedStatement ps = conn.prepareStatement("delete from tb_books where id=?");
ps.setInt(1, id);
ps.executeUpdate();
总结
增删改都会对数据库进行改动,都用:executeUpdate()
, 有返回值
查不会对数据库进行改动,用executeQuery
, 用ResultSet
接收
关于
PreparedStatement ps = conn.prepareStatement();
Statement stmt = conn.createStatement();
的区别:
stmt不会改变
ps会改变,后面有?
完整版
增:
try {
// 加载数据库驱动,注册到驱动管理器
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接字符串
String url = "jdbc:mysql://localhost:3306/db_database10?useUnicode=true&characterEncoding=utf8";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "123456";
// 创建Connection连接
Connection conn = DriverManager.getConnection(url,username,password);
// 添加图书信息的SQL语句
String sql = "insert into tb_books(name,price,bookCount,author) values(?,?,?,?)";
// 获取PreparedStatement
PreparedStatement ps = conn.prepareStatement(sql);
// 对SQL语句中的第1个参数赋值
ps.setString(1, book.getName());
System.out.println("name:"+book.getName());
// 对SQL语句中的第2个参数赋值
ps.setDouble(2, book.getPrice());
// 对SQL语句中的第3个参数赋值
ps.setInt(3,book.getBookCount());
// 对SQL语句中的第4个参数赋值
ps.setString(4, book.getAuthor());
// 执行更新操作,返回所影响的行数
int row = ps.executeUpdate();
// 判断是否更新成功
if(row > 0){
// 更新成输出信息
out.print("成功添加了 " + row + "条数据!");
}
// 关闭PreparedStatement,释放资源
ps.close();
// 关闭Connection,释放资源
conn.close();
} catch (Exception e) {
out.print("图书信息添加失败!");
e.printStackTrace();
}
查:
try {
// 加载数据库驱动,注册到驱动管理器
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接字符串
String url = "jdbc:mysql://localhost:3306/db_database10";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "123456";
System.out.print(password);
// 创建Connection连接
Connection conn = DriverManager.getConnection(url, username, password);
// 获取Statement
Statement stmt = conn.createStatement();
// 添加图书信息的SQL语句
String sql = "select * from tb_books";
// 执行查询
ResultSet rs = stmt.executeQuery(sql);
// 实例化List对象
List<Book> list = new ArrayList<Book>();
// 判断光标向后移动,并判断是否有效
while (rs.next()) {
// 实例化Book对象
Book book = new Book();
// 对id属性赋值
book.setId(rs.getInt("id"));
// 对name属性赋值
book.setName(rs.getString("name"));
// 对price属性赋值
book.setPrice(rs.getDouble("price"));
// 对bookCount属性赋值
book.setBookCount(rs.getInt("bookCount"));
// 对author属性赋值
book.setAuthor(rs.getString("author"));
// 将图书对象添加到集合中
list.add(book);
}
// 将图书集合放置到request之中
request.setAttribute("list", list);
rs.close(); // 关闭ResultSet
stmt.close(); // 关闭Statement
conn.close(); // 关闭Connection
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
改:
try {
// 加载数据库驱动,注册到驱动管理器
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接字符串
String url = "jdbc:mysql://localhost:3306/db_database10";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "123456";
// 创建Connection连接
Connection conn = DriverManager.getConnection(url,username,password);
// 更新SQL语句
String sql = "update tb_books set bookcount=? where id=?";
// 获取PreparedStatement
PreparedStatement ps = conn.prepareStatement(sql);
// 对SQL语句中的第一个参数赋值
ps.setInt(1, bookCount);
// 对SQL语句中的第二个参数赋值
ps.setInt(2, id);
// 执行更新操作
ps.executeUpdate();
// 关闭PreparedStatement
ps.close();
// 关闭Connection
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
删:
try {
// 加载数据库驱动,注册到驱动管理器
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接字符串
String url = "jdbc:mysql://localhost:3306/db_database10";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "123456";
// 创建Connection连接
Connection conn = DriverManager.getConnection(url,username,password);
// 删除图书信息的SQL语句
String sql = "delete from tb_books where id=?";
// 获取PreparedStatement
PreparedStatement ps = conn.prepareStatement(sql);
// 对SQL语句中的第一个占位符赋值
ps.setInt(1, id);
// 执行更新操作
ps.executeUpdate();
// 关闭PreparedStatement
ps.close();
// 关闭Connection
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
Statement接口在创建了数据库连接之后,就可以通过程序来调用SQL语句对数据库进行操作,
在JDBC中Statement接口封装了这些操作。Statement接口提供了执行语句和获取查询结果的基本方法
PreparedStatement接口继承于Statement接口,它拥有Statement接口中的方法,
而且PreparedStatement接口针对带有参数SQL语句的执行操作进行了扩展。
应用于PreparedStatement接口中的SQL语句,可以使用占位符“?”来代替SQL语句中的参数,然后再对其进行赋值。
使用PreparedStatement接口,不仅可以提高SQL的执行效率,而且还可以避免SQL语句的注入式攻击