最近开始复习以前学过的JDBC今天肝了一晚上 来睡睡回笼觉,长话短说 我们现在开始。
我们先写一个获取数据库连接的jdbc封装类 以后可以用
如果不是maven环境的话在src文件下新建一个db.properties文件
然后在改文件中写入数据库配置信息 :
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/xxxx username=root password=xxxx
然后嘞需要写一个链接数据库的工具类如下:
package com.java.util; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; import java.util.ResourceBundle; //jdbc 封装工具类 public class JdbcUtil { private static String driver; private static String url; private static String username; private static String password; /* * 静态代码块加载配置文件信息 */ static { try { //1.通过当前类获取类加载器 ClassLoader classLoader=JdbcUtil.class.getClassLoader(); //2.类加载器的方式获取输入流 InputStream is=classLoader.getResourceAsStream("db.properties"); //3.创建properties对象 Properties props=new Properties(); //4.加载输入流 props.load(is); //5.获取相关参数的值 driver=props.getProperty("driver"); url=props.getProperty("url"); username=props.getProperty("username"); password=props.getProperty("password"); System.out.println(password); } catch (IOException e) { e.printStackTrace(); } } public static Connection getConnection() { Connection conn = null; try { // 1.注册驱动 Class.forName(driver); // 2.获取连接 conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } // 释放资源 public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
写这个的时候别忘记导入连接驱动包哟= =
然后我们创建一个User类
包含 id name 和password 创建 他们的set get方法 这里忽略不写
继续创建一个UserDao接口 代码如下:
package com.java.dao; import com.java.domain.User; import java.util.List; public interface UserDao { //添加 public void addc(User user); //更新 public void updata(User user); //删除 public void delete(int id) ; //通过id查询 public User findById(int id) ; //查询表中所有信息 public List<User> findAll() ; }
在创建UserDao基础的情况下创建一个userDaoimp类 并且实现UserDao 接口的方法,也就是我们所说的增删改查= = 如下:
package com.java.dao.impl; import com.java.dao.UserDao; import com.java.domain.User; import com.java.util.JdbcUtil; import com.sun.xml.internal.bind.v2.model.core.ID; import org.junit.Test; import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserDaoImpl implements UserDao{
//增加 @Override public void addc(User user) { Connection conn = null; PreparedStatement pstmt = null; String sql = "insert into user(id,name,password)values(?,?,?)"; conn = JdbcUtil.getConnection(); try { pstmt = conn.prepareStatement(sql); pstmt.setInt(1,user.getId()); pstmt.setString(2,user.getName()); pstmt.setString(3,user.getPassword()); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtil.release(conn,pstmt,null); } }
//更新 @Override public void updata(User user) { Connection conn = null; PreparedStatement ps = null; String sql = "UPDATE user SET name=?,password=? WHERE id=?"; try { conn = JdbcUtil.getConnection(); ps = conn.prepareStatement(sql); ps.setString(1,user.getName()); ps.setString(2,user.getPassword()); ps.setInt(3, user.getId()); ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { JdbcUtil.release(conn,ps,null); } }
//删除 @Override public void delete(int id) { Connection conn = null; PreparedStatement pstm= null; String sql = "delete from user where id=?"; conn = JdbcUtil.getConnection(); try { pstm = conn.prepareStatement(sql); pstm.setInt(1,id); pstm.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtil.release(conn,pstm,null); } }
//通过id查询 @Override public User findById(int id) { Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; User user = null; String sql ="select name from user where id=?"; conn = JdbcUtil.getConnection(); try { pstm = conn.prepareStatement(sql); pstm.setInt(1,id); rs = pstm.executeQuery(); if (rs.next()){ user = new User(); user.setId(id); user.setName(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtil.release(conn,pstm,rs); } return user; }
//查询所有 @Override public List<User> findAll(){ Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; User user = null; List<User> userList = new ArrayList<User>(); String sql = "select id,name,password from user"; try{ conn = JdbcUtil.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ user = new User(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setPassword(rs.getString(3)); userList.add(user); } }catch(SQLException e){ e.printStackTrace(); }finally{ JdbcUtil.release(conn, ps, rs); } return userList; } }
这个时候写好了需要测试一下 所以新建一个测试类 UserDaoTest:
package com.java.test; import com.java.dao.UserDao; import com.java.dao.impl.UserDaoImpl; import com.java.domain.User; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class UserDaoTest { @Test public void addc(){ User user = new User(); user.setId(3); user.setName("jojo"); user.setPassword("123123"); new UserDaoImpl().addc(user); } @Test public void updata(){ User user = new User(); user.setName("wang"); user.setPassword("56745"); user.setId(2); new UserDaoImpl().updata(user); System.out.println(user.getName()); } @Test public void deletId(){ int id = 3; new UserDaoImpl().delete(id); } @Test public void ByTestID(){ int id=2; User user = new UserDaoImpl().findById(id); System.out.println(user.getName()); } @Test public void testAllByUser(){ ArrayList list= (ArrayList) new UserDaoImpl().findAll(); for(int i=0;i<list.size();i++){ User user =(User) list.get(i); System.out.println(user); } } }
ok增删改查完了 剩下各位方法的使用比如: PreparedStatement 什么的啊 我明天再详细的写出来 今天再写这个代码的时候遇见过一个问题
MySQL数据库连接不上并且报错 Can't get hostname for your address 解决方案如下
在计算机---右键管理----服务里面 找到MYSQL 右键属性 找到MYSQL的服务
再右键属性 找到登陆 勾选本地用户。。。
选择完毕之后再重启一下服务就好了= = 累啊。