数据库操作,jdbc的CRUD

Posted xiaodong135

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库操作,jdbc的CRUD相关的知识,希望对你有一定的参考价值。

用Java代码操作数据库,可以用JDBC。首先要加载驱动,之后建立连接,再然后就可以对数据库进行操作。

1.建立连接。此处用的是mysql数据库

 1 public class DBUtil {
 2 
 3     public static String URL = "jdbc:mysql://localhost:3306/JDBCDEmo";
 4     public static String USER = "root";
 5     public static String PASSWORD = "abc123_";
 6     
 7     private static Connection conn;
 8     
 9     static{
10         try {
11             //或得去驱动
12             Class.forName("com.mysql.jdbc.Driver");
13             //得到数据库的连接
14             conn = DriverManager.getConnection(URL, USER, PASSWORD);
15         } catch (Exception e) {
16             // TODO Auto-generated catch block
17             e.printStackTrace();
18         }
19     }
20     
21     public static Connection getConnection(){
22         return conn;
23     }46 }

2. 建立连接以后,就可以用相应的方法就行CRUD了public class BoyDao {

public void addBoy(Boy by) {
      
//或得连接,编写sql语句,?号代表要插入额数据 Connection conn = DBUtil.getConnection(); String sql = "INSERT INTO Boy" + " (user_name, sex, age, birthday, email, mobile, create_user, " + "create_date, update_user, update_date, isdel)" + " values(?, ?, ?, ?, ?, ?, ?, current_date(), ?, current_date(), ?)"; try {
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理
关于是使用PrepareStatement还是普通的statement 请参考这里 http://www.cnblogs.com/0banana0/articles/2029863.html
PreparedStatement pst
= conn.prepareStatement(sql); pst.setString(1, by.getUser_name()); pst.setInt(2, by.getSex()); pst.setInt(3, by.getAge()); pst.setDate(4, new Date(by.getBirthday().getTime())); pst.setString(5, by.getEmail()); pst.setString(6, by.getMobile()); pst.setString(7, by.getCreate_user()); pst.setString(8, by.getUpdate_user()); pst.setInt(9, by.getIsdel()); pst.execute(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
//修改
public void updateBoy(Boy by){ Connection conn = DBUtil.getConnection(); String sql = "Update Boy set " + " user_name = ?, sex = ?, age = ?, birthday = ?, email = ?, mobile = ?, create_user = ?, " + "create_date = current_date(), update_user = ?, update_date = current_date(), isdel = ?" + " where id = ?"; try { PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, by.getUser_name()); pst.setInt(2, by.getSex()); pst.setInt(3, by.getAge()); pst.setDate(4, new Date(by.getBirthday().getTime())); pst.setString(5, by.getEmail()); pst.setString(6, by.getMobile()); pst.setString(7, by.getCreate_user()); pst.setString(8, by.getUpdate_user()); pst.setInt(9, by.getIsdel()); pst.setInt(10, by.getId()); pst.execute(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void deleteBoy(Boy by) throws Exception{ Connection conn = DBUtil.getConnection(); String sql ="DELETE FROM Boy" + " where id = ?"; PreparedStatement pst = conn.prepareStatement(sql); pst.setInt(1, by.getId()); pst.execute(); } public List<Boy> queray() { List<Boy> list = new ArrayList<>(); try { Connection conn = DBUtil.getConnection(); Statement sm = conn.createStatement();
  
    //需要获得 结果操作集,之后就可以得到查询出来的结果 .next()是判断有没有结果,并把操作集的指针移到下一个操作集上。其实查询出来的结果可以看做是数据库中的一行一行的数据,那么刚开始的时候指针指向数据表的上一行,好比一个空的头指针,所以要移到下一个,以判断到底有没有数据。 ResultSet rs = sm.executeQuery("SELECT user_name FROM Boy"); while (rs.next()) { String name = rs.getString("user_name"); Boy by = new Boy(); by.setUser_name(name); list.add(by); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }

 

以上是关于数据库操作,jdbc的CRUD的主要内容,如果未能解决你的问题,请参考以下文章

DBUtils——用来完成jdbc的CRUD

JDBC基础 & CRUD操作

mybatis实现CRUD操作和优化代码及调试(mysql数据库)

jdbc

JDBC4.JDBCUtils实现CRUD操作

jdbc简单的CRUD操作