1.使用自己的话表述MVC.
MVC是Java设计模式中的一种以我个人的话来说,V代表着视图 也就是用户能看到的通过V(视图)我们能知道信息可以直观的了解到信息也就是页面(jsp或者html)再说C(控制) C是各种信息交互的地方C指明了什么信息要到哪里去拿或者把信息传给V 是中间的那一层 M(模型) 是封装了那些信息的一层 。
2.掌握JDBC的基本操作。
对book表中的数据进行增删改查;
我使用的是 工厂链接+接口+实现类+实体类+测试类实现
首先先建立一个表book表 里面的字段有 id int,bookName varchar,price int,description varchar
然后再通过jdbc对该表进行操作
1.导入炸药包(Jar)这个是必须的 不管操作什么数据库都要先导入jar包
2.写出实体类里面有私有属性构造方法以及get set方法。
public class Book {
private int id;
private String bookNmae;
private int price;
private String description;
public Book(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookNmae() {
return bookNmae;
}
public void setBookNmae(String bookNmae) {
this.bookNmae = bookNmae;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
使用jdbc技术
*使用jdbc技术时候需要四个步骤
1.加载数据库驱动 2.建立数据库连接 3.发送sql语句并且返回结果集 4.关闭资源
贴上代码
- 数据库连接工厂
*/
import java.sql.Connection;
import java.sql.DriverManager;
public class Fatory {
private static String dburl = "jdbc:mysql://localhost:3306/zuoye?useUnicode=true&characterEncoding=UTF-8";
private static String dbuname = "root";
private static String dbupassword = "123456";
synchronized public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(dburl,dbuname,dbupassword);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
}
/**
- 接口
- @author 陈福桔
*/
public interface Bookdao {
public void addBook(Book book);
public void delBook(int id);
public void updateBook(Book book);
public Book findBookById(int id);
}
/**
- 实现类
*/
import java.nio.channels.ConnectionPendingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import java.util.spi.ResourceBundleControlProvider;
import javax.annotation.Resource;
import disici.Fatory;
import disici.Book;
import disici.Bookdao;
public class BookdaoImpl implements Bookdao {
@Override
public void addBook(Book book) {
// TODO Auto-generated method stub
Connection conn=null; //数据库连接
PreparedStatement ps=null;//与编辑对象
ResultSet rs=null;//结果集
try {
conn=Fatory.getConnection();
String sql="insert into book values(?,?,?,?)";
ps=conn.prepareStatement(sql);
ps.setInt(1, book.getId());
ps.setString(2, book.getBookNmae());
ps.setInt(3, book.getPrice());
ps.setString(4, book.getDescription());
ps.executeUpdate();
ps.close();
conn.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
System.out.println("添加成功"+book.getId()+book.getBookNmae()+book.getPrice()+book.getDescription());
}
}
@Override
public void delBook(int id) {
// TODO Auto-generated method stub
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=Fatory.getConnection();
String sql="delete from book where id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, id);
ps.executeUpdate();
ps.close();
conn.close();
System.out.println("删除成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
public void updateBook(Book book) {
// TODO Auto-generated method stub
Connection conn=null; //声明数据库连接对象
PreparedStatement ps=null;//预编译 new的时候为真,
ResultSet rs=null;//定义结果集对象 rs
try {
conn=Fatory.getConnection();
String sql="update book set id=?,BookName=?,price=?,description=? where id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, book.getId());
ps.setString(2, book.getBookNmae());
ps.setInt(3, book.getPrice());
ps.setString(4, book.getDescription());
ps.setInt(5, 111);//根据id修改哈
ps.executeUpdate();
ps.close();
conn.close();
System.out.println("修改后的信息为"+book.getId()+book.getBookNmae()+book.getPrice()+book.getDescription());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
public Book findBookById(int id) {
// TODO Auto-generated method stub
Connection conn=null; //声明数据库连接对象
PreparedStatement ps=null;//预编译 new的时候为真,
Book book=new Book();
try {
conn=Fatory.getConnection();
String sql="select * from book where id=?";
ps=conn.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
book.setId(rs.getInt("id"));
book.setBookNmae(rs.getString("bookName"));
book.setPrice(rs.getInt("price"));
book.setDescription(rs.getString("description"));
System.out.println("查询id为"+book.getId()+book.getBookNmae()+book.getDescription()+book.getId()+book.getPrice());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return book;
}
}
下面就是Test测试类测试结果
/**
-
测试类
/
import disici.;
public class Test {public static void main(String args[]){
Book book=new Book();
book.setId(887);
book.setBookNmae(“高数挂科”);
book.setPrice(502);
book.setDescription(“让你受尽折磨+N”);
BookdaoImpl impl=new BookdaoImpl();
//impl.addBook(book);//impl.delBook(book.getId()); //impl.updateBook(book); impl.findBookById(334); // impl.updateBook(book);
}
}
执行add方法结果
添加成功
执行del
成功删除了ID为123的信息
执行查询 //
根据id查询信息
执行修改
把ID为334的字段给修改了
总结
踩了小坑
写sql语句时候多打了一个一定要注意语句的正确
2.数据库乱码问题
乱码请在 conn 连接那加上代码 useUnicode=true&characterEncoding=UTF-8
关于空指针异常 1.查看自己的参数有没有传递2.查看传递的参数名字是否相同
关于PreparedStatement与Statement
使用PreparedStatement 可以预防sql注入而且PreparedStatement比Statement更为高效
在使用编写sql语句后要紧跟 conn.prepareStatement(sql); 不然忘了的话空指针找半天找不到