连接数据库,和数据增删改

 

连接数据库

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);

  

 

 

posted @ 2017-12-29 17:18  子言小竹  阅读(241)  评论(0编辑  收藏  举报