从0到1学JAVA之第五天——JDBC分离Interface和Imple实现对数据库增删改查,

By | 11月 16, 2017

今天完成的任务

利用jdbc实现对数据库的增删改查。

代码已经上传github,gayhub链接

1.数据表设计:

2.blog\JobDAO.java              #定义job表的数据操作接口

package blog;

public interface JobDAO {
      public int insert(String jname,int number,long create_at,long update_at);
      public int update(String jname,int number);
      public int delete(String jname);
      public void select(String jname);
}

 3.blog\JobDAOImpl.java        #定义Job表的数据操作类,实现JobDAO接口,包括增删改查

package blog;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.*;
public  class JobDAOImpl implements JobDAO{
        private Connection conn;
        private PreparedStatement psjob;
        private Statement jobinfo;
        private ResultSet results;
        long time = new Date().getTime();
        //插入数据
        public int insert(String jname, int number, long create_at,long update_at){
        	int result = 0;
        	conn = ConnectionManager.getConnection();
        	try{
        		String sql = "insert into yl_job (jname,number,create_at,update_at)values(?,?,?,?)";
        		psjob = conn.prepareStatement(sql);
        		psjob.setString(1, jname);
        		psjob.setInt(2, number);
        		psjob.setLong(3, create_at);
        		psjob.setLong(4, update_at);
        		result = psjob.executeUpdate();
        	}catch(SQLException e){
        		e.printStackTrace();
        	}finally{
        		ConnectionManager.closeStatement(psjob);
        		ConnectionManager.closeConnection(conn);
        	}
        	return result;
        }
        //更新job的 数目
        public int update(String jobName, int number){
        	int result = 0;
        	conn = ConnectionManager.getConnection();
        	try{
        		String sql = "update yl_job set number=?,update_at=? where jname=?";
        	    psjob = conn.prepareStatement(sql);
        		psjob.setInt(1, number);
        		psjob.setLong(2, time);
        		psjob.setString(3, jobName);
        		result = psjob.executeUpdate();
        	}catch(SQLException e){
        		e.printStackTrace();
        	}finally{
        		ConnectionManager.closeStatement(psjob);
        		ConnectionManager.closeConnection(conn);
        	}
        	return result;
        }
        //根据job name删除job
        public int delete(String jobName){
        	int result = 0;
        	conn = ConnectionManager.getConnection();
        	try{
        		String sql = "delete from yl_job where jname=?";
        		psjob = conn.prepareStatement(sql);
        		psjob.setString(1, jobName);
        		result = psjob.executeUpdate();
        	}catch(SQLException e){
        		e.printStackTrace();
        	}finally{
        		ConnectionManager.closeStatement(psjob);
        		ConnectionManager.closeConnection(conn);
        	}
        	return result;
        }
        //从数据库查询数据
        public void select(String jobName){
        	conn = ConnectionManager.getConnection();
        	try{
        		String sql = "select * from yl_job where jname = '"+jobName+"'";
        		jobinfo = conn.createStatement();
        		ResultSet results = jobinfo.executeQuery(sql);
        		while(results.next()){
        			System.out.println(results.getString("jid")+" "+results.getString("jname")+" "+results.getString("create_at")
        			+" "+results.getString("update_at") );
        		}
        	}catch(SQLException e){
        		e.printStackTrace();
        	}
        }

}

4.blog\TestJob.java               #测试JobDAOImpl.java类中的方法

package blog;
import java.util.*;
public class TestJob {
 public static void main(String[] args){
 JobDAO jobdao = new JobDAOImpl();
 long time = new Date().getTime();
 int res;
 res = jobdao.insert("JAVA架构师", 3, time, time);
 if(res>0)
 System.out.println("插入成功, 插入"+res+"条");
 else
 System.out.println("插入失败!!!");
 res = jobdao.update("JAVA架构师", 13);
 if(res>0)
 System.out.println("更新成功!");
 else
 System.out.println("更新失败!!!");
 res = jobdao.delete("JAVA架构师");
 if(res>0)
 System.out.println("删除成功!");
 else
 System.out.println("删除失败!!!");
 jobdao.select("JAVA研发工程师");
 }
}

 5.控制台输出结果

明天计划的任务

1.学习MyBatis。

遇到的问题

1.存入数据的中文显示为三个???

在连接数据库的url后面添加参数:

private static final String DATABASE_URL="jdbc:mysql://localhost:3306/ylxjava?useUnicode=true&characterEncoding=utf8";

2.错误:java.sql.SQLException:Column count doesn’t match value count at row 1

错误原因:在插入数据时,插入的VALUE的字段数跟数据库表字段个数不一致

3.如何获取当前时间戳?

注意:import java.util.date;    #引入date库
new Date().getTime();

4.错误:The type Date is ambiguous

意思是“Date类型不明确”,其实是因为冲突造成的。在该文件中,一零同时引入了java.sql.* 和java.util.*,但是两个钟中都存在着Date类型,编译器不清楚使用哪一个,于是报错。

解决办法,将需要的sql的包一个一个引入。

import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;

5.错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column

在操作数据库时String类型的参数必须要用’ ‘把参数引起来才能传递并接收!此处一零上传的参数是String类型,错误原因是没有加单引号。因此,在进行数据库操作时,千万不要漏了两边的单引号。

String sql = "select * from yl_job where jname = '"+jobName+"'";

收获

1.熟悉了利用JDBC对数据库实现增删改查。

2.学习了如果实现Interface和Imple的分离

发表评论

您的电子邮箱地址不会被公开。