zoukankan      html  css  js  c++  java
  • JDBC连接数据库

    public class DBHelper {//定义四个属性: username, password, url, driverclassname
            private static final String USERNAME = "TEST";   //final ,变量不能改,不能重写,不能继承,变量名要大写
            private static final String PASSWORD = "TEST";
            private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
            private static final String DIVERCLASSNAME = "oracle.jdbc.OracleDriver";
           // Connection接口是jdk中定义好的一个数据库连接的接口
          
            public static Connection getConnection () {  //返回型
            	Connection cn = null;  
            	   try {
    				Class.forName(DIVERCLASSNAME); //类加载器去加载数据库的驱动程序
    				   cn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    				   //DriverManager:驱动程序管理类, 由这个类来获取Connection接口的实例
       //直接调用DriverManager的静态方法getConnection()获取连接
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
            	
            	return cn;
            }
           public static void main(String[] args) {   //目的是用来测试数据库是否引入成功,可以不用来写
    			   Connection c = getConnection ();
    			   System.out.println(c);
    			   destroy(c,null,null);
    		}    
            public static void destroy ( Connection c , Statement sm , ResultSet r) { //释放资源 
            	  if (c != null) {
            		  try {
    					c.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
            		  c = null;
    			}
            	  if (sm != null) {
            		  try {
    					sm.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
            		  sm = null;
    			}
            	  if (r != null) {
            		  try {
    					r.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
            		  r = null;
    			}
            }
    }
    

    以上是连接数据库

    以下是从数据库里取的连接之后进行增.删.改.查的 操作

    public class Student {    //将数据库里面的内容分装成一个类,就是一个数据模型
           private  Integer id;
           private String name;
           private String code;
           private Integer sex;
           private  Date birth;
    	public Student() {
    		super();
    	}
    	
    	public Student(Integer id, String name, String code, Integer sex, Date birth) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.code = code;
    		this.sex = sex;
    		this.birth = birth;
    	}
    
    	public Student(String name, String code, Integer sex, Date birth) { //如果ID不用传参数,采取序列生成
    		super();
    		this.name = name;
    		this.code = code;
    		this.sex = sex;
    		this.birth = birth;
    	}
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getCode() {
    		return code;
    	}
    	public void setCode(String code) {
    		this.code = code;
    	}
    	public Integer getSex() {
    		return sex;
    	}
    	public void setSex(Integer sex) {
    		this.sex = sex;
    	}
    	public Date getBirth() {
    		return birth;
    	}
    	
    	public String  setTime() {  //为了获取日期的格式而构造的方法
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    		  return sdf.format(this.birth);
    	}
    	
    	public void setBirth(Date birth) {
    		this.birth = birth;
    	}
    	@Override
    	public String toString() {
    		return "Student [id=" + id + ", name=" + name + ", code=" + code + ", sex=" + sex + ", birth=" + birth + "]";
    	}
    	
    	
    	
           
    }
    
    public class DatabaceMethodDal {   //dal结尾的包为一个处理数据的包,test结尾的包为一个测试是否添加进数据的包,
    	//until结尾的包为一个工具的包
         private   Connection coon; 
    	 private   Statement sm;
    	 private  PreparedStatement  ps; 
    	 private ResultSet rs;
    	//添加一条数据
           public   int  insertstudent () {
        	   init();  //调用那个初始化的方法
        	   String sql = "insert into student st" +
          " values(sq_test.nextval,'张华','stu-1070','1',sysdate,'LAU-100','2')";   //nexttval为序列生成
        	   int num = -1;
        	     try {
    				   num = sm.executeUpdate(sql);
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    			close();
        	     return num;
           }
           //更新数据,用参数来实现,解决SQL注入的问题,防止后面的参数被随意更改
           public int UpdateStudent (Integer id, String name) {
        	     String sql = "update student s set s.birthday = sysdate "
        	     		+ "where s.id = ? and s.name = ?";
        	     init(sql);
        	     int p = -1;
        	     try {
    				ps.setInt(1, id);  //占位符索引值, 第几个 ? , 就写几, 从1开始数
    				 ps.setString(2, name);
    				 p =  ps.executeUpdate(); //用于增删改的语句
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} 
        	     close();//关闭资源
        	     return p;
           }
           //批量处理  添加数据,直接通过Statement来实现的
           public int[]  InsertStudent (List<Student> list) {
        	   int[] num = null; 
        		init();
        	   try {
    				for (Student st : list) {
    					init();
    					
    String sql = "insert into student values (sq_test.nextval,'"+st.getName()
    +"','"+st.getCode()+"','"+st.getSex()+"',to_date('"+st.setTime()+"','yyyy-mm-dd'))";
    						sm.addBatch(sql);   //prepareStatement.addBatch()-->每次处理一条sql语句
    					
    				}
    				 num =  sm.executeBatch(); //返回int[] prepareStatement.executeBatch()-->将一批命令提交给数据库去执行
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
        	   close();
        	 	return num;
           }
         //批量处理  插入数据,直接通过prepareStatement  
             public int[] InsertStudentByprepare (List<Student> list) {
            	 String sql = "insert into  AppUser  values(sq_test,?,?,?,?)";
            	 init(sql);
            	 int[] num = null;
            	try {
    				for (Student s : list) {
    					ps.setString(1,s.getName());
    					ps.setString(2, s.getCode());
    					ps.setInt(3, s.getSex());
    					ps.setDate(4, new java.sql.Date(s.getBirth().getTime()));
    					ps.addBatch();
    				}
    				  num  =  ps.executeBatch();
    			} catch (SQLException e) { 
    				e.printStackTrace();
    			}
            	 close();
            	return num;
             }
           
           //查询
           public List<Student> selectStudent (Integer id,String name) {  //返回一个集合
        	   String sql = "select * from student st where st.id = ? and st.name = ?";
        	   init(sql);
        	   List<Student> list = null;   
        	   list = new ArrayList<Student> ();   
        	   try {
    			ps.setInt(1, id );  
    			   ps.setString(2, name);  
    			    rs= ps.executeQuery();   //查询,返回一个由Statement执行查询sql之后返回的结果集
    			    
    			    while (rs.next()) {  //查询一条,相当于迭代器里面的指针
    				    Student st = new Student(rs.getInt("id"),        //里面写的是数据库里列的字段名
    				    		rs.getString("name"),rs.getString("code"),
    				    		rs.getInt("sex"),rs.getDate("birthday"));
    				    list.add(st);
    				}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
        	   close();
    		return list;
        	    
           }
      
           public void init () {  //初始化,连接数据库
        	    coon = DBHelper.getConnection();  
        	    try {
    				sm = coon.createStatement();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
           }
           public void init ( String sql) {  //重载方法
       	    coon = DBHelper.getConnection();  
       	    try {
    				ps = coon.prepareStatement(sql);  //连接的是sql
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
          }
           public void close() {   //关闭资源的方法
        	   DBHelper.destroy(coon, sm, rs);
           }
    }
    

    在Tomcat上打印一下,看看有没有在数据库里面对数据处理成功

    public class TestDemo {   //测试是否修改数据成功
    	public static void main(String[] args) {
    		DatabaceMethodDal dm = new  DatabaceMethodDal();
    		//写入数据
    		int i =  dm.insertstudent();
    		System.out.println(i);
    		
    		//更新数据
    		Student s = new Student();
    	  int i =  dm.UpdateStudent(23, "张华");
    		 System.out.println(i);
    		 //批量处理    通过Statement来实现的
    		 
    		List<Student> list = new ArrayList<Student>();
    		Student st1 = new Student("王小明","stu-1025",1,new Date());
    		 Student st2 = new Student("王小花","stu-1026",2,new Date());
    		 list.add(st1);
    		list.add(st2);
    		//int [] arr =  dm.InsertStudent(list);
    		int[] arr2 = dm.InsertStudentByprepare(list);
    		System.out.println(Arrays.toString(arr2));
    		//查询
    		 List<Student> list = dm.selectStudent(1, "陈迪");
    	        System.out.println(list);
    	        
    	}	
    	
    	     
    }
    
  • 相关阅读:
    html5不能播放视频的方法
    mysql找出重复数据的方法
    jquery each循环遍历完再执行的方法
    Android:TextView跑马灯-详解
    日志处理(一) log4j 入门和详解(转)
    周记 2014.11.08
    周记 2014.11.01
    linux下解压命令大全
    关于Context []startup failed due to previous errors
    周记 2014.10.25
  • 原文地址:https://www.cnblogs.com/zuo72/p/8117253.html
Copyright © 2011-2022 走看看