连接数据库
package com.hanqi.util; //这种util包下面放我们用到的工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class dbHelper { private static final String USERNAME = "test"; //常量全部大写 private static final String PASSWORD = "test"; private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl"; private static final String DRIVERCLASSNAME = "oracle.jdbc.OracleDriver"; public static Connection getConnection() { //方法定义成静态的,可以通过类名直接点出来 Connection conn = null; try { Class.forName(DRIVERCLASSNAME); //大写calss表示类(和反射有关系),小写class表示关键字.. //forName表示加载项目里面的某个类.也不需要取什么返回值,只需要加载一下就可以了 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); //jdbc里面还有一个 驱动管理类,有一个方法(三个方法的重载)直接把这个连接获取到 //这个方法有个返回值,所以写一个返回值,在上面定义 一个 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } //写一个主方法测试一下是否连接成功了 public static void main(String[] args) { Connection c = getConnection(); System.out.println(c); destroy(c,null,null); //当显示 oracle.jdbc.driver.T4CConnection@4629104a 样式 //就表明数据库连接成功了 } public static void destroy (Connection conn, Statement sm,ResultSet rs) { if (conn != null) { try { conn.close(); //如果它不是空的,就把它关了 } catch (SQLException e) { e.printStackTrace(); } conn = null; //如果没关,就把空值赋给 conn,让垃圾回收机制去收回 } if (sm != null) { try { sm.close(); } catch (SQLException e) { e.printStackTrace(); } sm = null; } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } }
增
package com.hanqi.dal; //在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下. //以后学框架后会改用dao包 import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import com.hanqi.util.dbHelper; //这个类 是用于增删改查 //要添加一个数据,就要先打开那个表 public class DataBaseMethodDal { //两个成员对象 private Connection conn; private Statement sm; //构建一个方法往里面添加数据 public int insertAppuser() { //这个方法名 就是查找这个表de 意思 init(); //调用下面初始化的方法; String sql = "insert into student "+ "values(sq_test.nextval,'混蛋','stu-1063','2',sysdate,'ADV-609','1')"; //定义sql语句 int num = -1; try { num = sm.executeUpdate(sql); //executeUpdate 是用来调用增删改的,把上面想要增加的语句放上 //如果执行成功 返回的是一个整数型,返回的是影响的行数 1,不成功返回-1 //executeQuery 是用来调用查询语句的 } catch (SQLException e) { e.printStackTrace(); } return num ; } //初始化,先初识化两个成员对象 public void init() { conn = dbHelper.getConnection(); //先去获取到数据库的连接对象 try { sm = conn.createStatement(); //由这个连接对象可以获取到执行数据库语句的一个对象 } catch (SQLException e) { e.printStackTrace(); } } }
package com.hanqi.test; import com.hanqi.dal.DataBaseMethodDal; public class TestDemo { public static void main(String[] args) { DataBaseMethodDal dbmd = new DataBaseMethodDal(); int i = dbmd.insertAppuser(); //调用实例化类里面插入数据的那个方法就行了 System.out.println(i); } }
批量添加
package com.hanqi.dal; //在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下. //以后学框架后会改用dao包 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import com.hanqi.model.AppUser; import com.hanqi.util.dbHelper; //这个类 是用于增删改查 //要添加一个数据,就要先打开那个表 public class DataBaseMethodDal { //两个成员对象 private Connection conn; private Statement sm; private PreparedStatement ps; //批量添加 public int[] insertAppuser(List<AppUser> list) { init(); int[] num = null; try { for(AppUser user :list) { String sql = "insert into appuser " +"values(sq_test.nextval,'" +user.getName()+"','" +user.getCode()+"','" +user.getSex()+"',to_date('" +user.getBirthday2()+"','yyyy-MM-dd'))"; sm.addBatch(sql); //批量添加 } num = sm.executeBatch(); // 批量提交 } catch (SQLException e) { e.printStackTrace(); } return num; } public void init() { conn = dbHelper.getConnection(); //先去获取到数据库的连接对象 try { sm = conn.createStatement(); //由这个连接对象可以获取到执行数据库语句的一个对象 } catch (SQLException e) { e.printStackTrace(); } }
import com.hanqi.dal.DataBaseMethodDal; import com.hanqi.model.AppUser; public class TestDemo { public static void main(String[] args) { DataBaseMethodDal dbmd = new DataBaseMethodDal(); List<AppUser> list = new ArrayList<AppUser>(); AppUser user1 = new AppUser("小红4","ss-14",1,new Date()); AppUser user2 = new AppUser("小红5","ss-15",2,new Date()); AppUser user3 = new AppUser("小红6","ss-16",1,new Date()); list.add(user1); list.add(user2); list.add(user3); int[] arr = dbmd.insertAppuser(list); //将一个数组转换成字符串打印出来 System.out.println(Arrays.toString(arr));
批量添加(重点这个)
package com.hanqi.dal; //在使用jdbc做项目的公司,通常dal这个包作为数据库的连接类,跟数据库有关的东西都放到这个包下. //以后学框架后会改用dao包 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import com.hanqi.model.AppUser; import com.hanqi.util.dbHelper; //这个类 是用于增删改查 //要添加一个数据,就要先打开那个表 public class DataBaseMethodDal { //两个成员对象 private Connection conn; private Statement sm; private PreparedStatement ps; //批量添加方法2着重记忆 public int[] insertAppuserByprepared(List<AppUser> list) { //调用这个方法他的返回值是-2,代表添加成功啦 String sql = "insert into appuser " +"values(sq_test.nextval,?,?,?,?)"; init(sql); int[] num = null; try { for(AppUser user :list) { /*java.sql.Date extends java.util.Date */ ps.setString(1, user.getName()); ps.setString(2, user.getCode()); ps.setInt(3, user.getSex()); ps.setDate(4, new java.sql.Date(user.getBirthday().getTime())); //java.sql.Date只记录日期没有时间 java.util.Date里带着时间和日期 //timeStamp 精确到毫秒 time只有时间没有日期 ps.addBatch(); //把上面的怼进去 } num = ps.executeBatch(); //然后 执行! // 批量提交 } catch (SQLException e) { e.printStackTrace(); } return num; } public void init(String sql) { conn = dbHelper.getConnection(); try { ps = conn.prepareStatement(sql); //返回用于执行sql语句的一个对象 } catch (SQLException e) { e.printStackTrace(); } } }
package com.hanqi.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import com.hanqi.dal.DataBaseMethodDal; import com.hanqi.model.AppUser; public class TestDemo { public static void main(String[] args) { DataBaseMethodDal dbmd = new DataBaseMethodDal(); //下面是添加数据 //AppUser user = new AppUser("小红","ss-13",1,new Date()); //int i = dbmd.insertAppuser(user); //下面是批量添加数据 List<AppUser> list = new ArrayList<AppUser>(); AppUser user1 = new AppUser("小红4","ss-14",1,new Date()); AppUser user2 = new AppUser("小红5","ss-15",2,new Date()); AppUser user3 = new AppUser("小红6","ss-16",1,new Date()); list.add(user1); list.add(user2); list.add(user3); int[] arr = dbmd.insertAppuserByprepared(list); //将一个数组转换成字符串打印出来 System.out.println(Arrays.toString(arr)); }
修改数据
public int updateappuser(String username) { String sql = "update appuser a set a.code ='ss-10'" +"where a.name = ?"; //sql注入攻击 //username += "or 1=1";会永远成立 init(sql); int a = -1; try { ps.setString(1, username); //索引是从1开始的 a =ps.executeUpdate(); //修改数据,返回影响的行数 } catch (SQLException e) { e.printStackTrace(); } return a; } public void init(String sql) { conn = dbHelper.getConnection(); try { ps = conn.prepareStatement(sql); //返回用于执行sql语句的一个对象 } catch (SQLException e) { e.printStackTrace(); } } }
package com.hanqi.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import com.hanqi.dal.DataBaseMethodDal; import com.hanqi.model.AppUser; public class TestDemo { public static void main(String[] args) { DataBaseMethodDal dbmd = new DataBaseMethodDal(); //用占位符修改数据 //int i2 = dbmd.updateappuser("hanqi"); System.out.println(i4);
删除数据
//删除数据 public int deleteappuser(Integer id) { String sql = "delete appuser a where a.id = ?"; init(sql); int num = -1; try { ps.setInt(1, id); num = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return num; } //批量删除 public int deleteappuser(String code) { String sql = "delete appuser a where a.code = ?"; //加入这个表里的code这一列有几个重复的 init(sql); int num = -1; try { ps.setString(1, code); num = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return num; } public void init(String sql) { conn = dbHelper.getConnection(); try { ps = conn.prepareStatement(sql); //返回用于执行sql语句的一个对象 } catch (SQLException e) { e.printStackTrace(); } }
package com.hanqi.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import com.hanqi.dal.DataBaseMethodDal; import com.hanqi.model.AppUser; public class TestDemo { public static void main(String[] args) { DataBaseMethodDal dbmd = new DataBaseMethodDal(); //删除数据 //int i3= dbmd.deleteappuser(52); //批量删除 //int i4= dbmd.deleteappuser("ss-11"); //System.out.println(i4);